x32: make X32, !IA32_EMULATION setups able to execute x32 binaries
authorAl Viro <viro@zeniv.linux.org.uk>
Mon, 4 Jan 2021 23:34:30 +0000 (18:34 -0500)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 6 Jan 2021 13:41:17 +0000 (08:41 -0500)
It's really trivial - the only wrinkle is making sure that
compiler knows that ia32-related side of COMPAT_ARCH_DLINFO
is dead code on such configs (we don't get there without
having passed compat_elf_check_arch(), and on such configs
that'll fail for ia32 binary).

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
arch/x86/Kconfig
arch/x86/include/asm/elf.h

index 302a6b453c91c2fb3d2afca2aa895bf5000b8285..a2182d22b5faee17a7cbe76cb03af99a4495c2eb 100644 (file)
@@ -2864,7 +2864,6 @@ config IA32_EMULATION
        depends on X86_64
        select ARCH_WANT_OLD_COMPAT_IPC
        select BINFMT_ELF
-       select COMPAT_BINFMT_ELF
        select COMPAT_OLD_SIGACTION
        help
          Include code to run legacy 32-bit programs under a
@@ -2900,6 +2899,7 @@ config COMPAT_32
 config COMPAT
        def_bool y
        depends on IA32_EMULATION || X86_X32
+       select COMPAT_BINFMT_ELF if BINFMT_ELF
 
 if COMPAT
 config COMPAT_FOR_U64_ALIGNMENT
index 66bdfe838d611e472fd2602f76556c7326cfec3e..9224d40cdefee7f60f8dde09b42b71c0f5a9f4fd 100644 (file)
@@ -364,7 +364,7 @@ do {                                                                        \
 #define COMPAT_ARCH_DLINFO                                             \
 if (exec->e_machine == EM_X86_64)                                      \
        ARCH_DLINFO_X32;                                                \
-else                                                                   \
+else if (IS_ENABLED(CONFIG_IA32_EMULATION))                            \
        ARCH_DLINFO_IA32
 
 #define COMPAT_ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000)