x86/compat: Don't build the 32-bit VDSO if not needed
authorBrian Gerst <brgerst@gmail.com>
Mon, 22 Jun 2015 11:55:15 +0000 (07:55 -0400)
committerIngo Molnar <mingo@kernel.org>
Mon, 6 Jul 2015 13:28:56 +0000 (15:28 +0200)
Build the 32-bit vdso only for native 32-bit or 32-bit compat is
enabled.  x32 should not force it to build.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1434974121-32575-7-git-send-email-brgerst@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/entry/vdso/Makefile
arch/x86/entry/vdso/vma.c
arch/x86/include/asm/elf.h

index e97032069f88cdcc8f1c692bd63960fd8bda517d..96c06172c2ffda05847c15d10bb181801f8b3d16 100644 (file)
@@ -8,7 +8,7 @@ KASAN_SANITIZE := n
 VDSO64-$(CONFIG_X86_64)                := y
 VDSOX32-$(CONFIG_X86_X32_ABI)  := y
 VDSO32-$(CONFIG_X86_32)                := y
-VDSO32-$(CONFIG_COMPAT)                := y
+VDSO32-$(CONFIG_IA32_EMULATION)        := y
 
 # files to link into the vdso
 vobjs-y := vdso-note.o vclock_gettime.o vgetcpu.o
@@ -20,7 +20,7 @@ obj-y                         += vma.o
 vdso_img-$(VDSO64-y)           += 64
 vdso_img-$(VDSOX32-y)          += x32
 vdso_img-$(VDSO32-y)           += 32-int80
-vdso_img-$(CONFIG_COMPAT)      += 32-syscall
+vdso_img-$(CONFIG_IA32_EMULATION)      += 32-syscall
 vdso_img-$(VDSO32-y)           += 32-sysenter
 
 obj-$(VDSO32-y)                        += vdso32-setup.o
@@ -126,7 +126,7 @@ $(obj)/vdsox32.so.dbg: $(src)/vdsox32.lds $(vobjx32s) FORCE
 # Build multiple 32-bit vDSO images to choose from at boot time.
 #
 vdso32.so-$(VDSO32-y)          += int80
-vdso32.so-$(CONFIG_COMPAT)     += syscall
+vdso32.so-$(CONFIG_IA32_EMULATION)     += syscall
 vdso32.so-$(VDSO32-y)          += sysenter
 
 vdso32-images                  = $(vdso32.so-y:%=vdso32-%.so)
index 1c9f750c38592c7278c95d7f8dbe6e1a88835c0c..434543145d7889f3fbedd2b28e54df9212346af9 100644 (file)
@@ -177,7 +177,7 @@ up_fail:
        return ret;
 }
 
-#if defined(CONFIG_X86_32) || defined(CONFIG_COMPAT)
+#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
 static int load_vdso32(void)
 {
        int ret;
@@ -219,8 +219,11 @@ int compat_arch_setup_additional_pages(struct linux_binprm *bprm,
                return map_vdso(&vdso_image_x32, true);
        }
 #endif
-
+#ifdef CONFIG_IA32_EMULATION
        return load_vdso32();
+#else
+       return 0;
+#endif
 }
 #endif
 #else
index 2bf67c0e9339d2880699934ec82caab358641c96..141c561f46649209915158211c31b038ee061ac8 100644 (file)
@@ -78,7 +78,7 @@ typedef struct user_fxsr_struct elf_fpxregset_t;
 #ifdef CONFIG_X86_64
 extern unsigned int vdso64_enabled;
 #endif
-#if defined(CONFIG_X86_32) || defined(CONFIG_COMPAT)
+#if defined(CONFIG_X86_32) || defined(CONFIG_IA32_EMULATION)
 extern unsigned int vdso32_enabled;
 #endif