]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
x86: Reject x32 executables if x32 ABI not supported
authorBen Hutchings <ben@decadent.org.uk>
Sun, 7 Sep 2014 20:05:05 +0000 (21:05 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 8 Oct 2014 09:17:42 +0000 (11:17 +0200)
It is currently possible to execve() an x32 executable on an x86_64
kernel that has only ia32 compat enabled.  However all its syscalls
will fail, even _exit().  This usually causes it to segfault.

Change the ELF compat architecture check so that x32 executables are
rejected if we don't support the x32 ABI.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Link: http://lkml.kernel.org/r/1410120305.6822.9.camel@decadent.org.uk
Cc: stable@vger.kernel.org
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/include/asm/elf.h

index 1a055c81d864d0027499f56d03cf210571e3bacf..ca3347a9dab5211399e9e93a5e53d71ca1943095 100644 (file)
@@ -160,8 +160,9 @@ do {                                                \
 #define elf_check_arch(x)                      \
        ((x)->e_machine == EM_X86_64)
 
-#define compat_elf_check_arch(x)               \
-       (elf_check_arch_ia32(x) || (x)->e_machine == EM_X86_64)
+#define compat_elf_check_arch(x)                                       \
+       (elf_check_arch_ia32(x) ||                                      \
+        (IS_ENABLED(CONFIG_X86_X32_ABI) && (x)->e_machine == EM_X86_64))
 
 #if __USER32_DS != __USER_DS
 # error "The following code assumes __USER32_DS == __USER_DS"