Re: [PATCH v5 02/13] x86/um: nommu: elf loader for fdpic

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hajime Tazaki <thehajime@xxxxxxxxx> writes:

> As UML supports CONFIG_MMU=n case, it has to use an alternate ELF
> loader, FDPIC ELF loader.  In this commit, we added necessary
> definitions in the arch, as UML has not been used so far.  It also
> updates Kconfig file to use BINFMT_ELF_FDPIC under !MMU environment.

Why does the no mmu case need an alternative elf loader?

Last time I looked the regular binfmt_elf works just fine
without an mmu.  I looked again and at a quick skim the
regular elf loader still looks like it will work without
an MMU.

You would need ET_DYN binaries just so they will load and run
in a position independent way.  But even that seems a common
configuration even with a MMU these days.

There are some funny things in elf_fdpic where it departs
from the ELF standard and is no fun to support unless it
is necessary.  So I am not excited to see more architectures
supporting ELF_FDPIC.

Eric



> Cc: Eric Biederman <ebiederm@xxxxxxxxxxxx>
> Cc: Kees Cook <kees@xxxxxxxxxx>
> Cc: Alexander Viro <viro@xxxxxxxxxxxxxxxxxx>
> Cc: Christian Brauner <brauner@xxxxxxxxxx>
> Cc: Jan Kara <jack@xxxxxxx>
> Cc: linux-mm@xxxxxxxxx
> Cc: linux-fsdevel@xxxxxxxxxxxxxxx
> Signed-off-by: Hajime Tazaki <thehajime@xxxxxxxxx>
> Signed-off-by: Ricardo Koller <ricarkol@xxxxxxxxxx>
> ---
>  arch/um/include/asm/mmu.h            | 5 +++++
>  arch/um/include/asm/ptrace-generic.h | 6 ++++++
>  arch/x86/um/asm/elf.h                | 8 ++++++--
>  fs/Kconfig.binfmt                    | 2 +-
>  4 files changed, 18 insertions(+), 3 deletions(-)
>
> diff --git a/arch/um/include/asm/mmu.h b/arch/um/include/asm/mmu.h
> index a3eaca41ff61..01422b761aa0 100644
> --- a/arch/um/include/asm/mmu.h
> +++ b/arch/um/include/asm/mmu.h
> @@ -14,6 +14,11 @@ typedef struct mm_context {
>  	/* Address range in need of a TLB sync */
>  	unsigned long sync_tlb_range_from;
>  	unsigned long sync_tlb_range_to;
> +
> +#ifdef CONFIG_BINFMT_ELF_FDPIC
> +	unsigned long   exec_fdpic_loadmap;
> +	unsigned long   interp_fdpic_loadmap;
> +#endif
>  } mm_context_t;
>  
>  #endif
> diff --git a/arch/um/include/asm/ptrace-generic.h b/arch/um/include/asm/ptrace-generic.h
> index 4696f24d1492..4ff844bcb1cd 100644
> --- a/arch/um/include/asm/ptrace-generic.h
> +++ b/arch/um/include/asm/ptrace-generic.h
> @@ -29,6 +29,12 @@ struct pt_regs {
>  
>  #define PTRACE_OLDSETOPTIONS 21
>  
> +#ifdef CONFIG_BINFMT_ELF_FDPIC
> +#define PTRACE_GETFDPIC		31
> +#define PTRACE_GETFDPIC_EXEC	0
> +#define PTRACE_GETFDPIC_INTERP	1
> +#endif
> +
>  struct task_struct;
>  
>  extern long subarch_ptrace(struct task_struct *child, long request,
> diff --git a/arch/x86/um/asm/elf.h b/arch/x86/um/asm/elf.h
> index 62ed5d68a978..33f69f1eac10 100644
> --- a/arch/x86/um/asm/elf.h
> +++ b/arch/x86/um/asm/elf.h
> @@ -9,6 +9,7 @@
>  #include <skas.h>
>  
>  #define CORE_DUMP_USE_REGSET
> +#define ELF_FDPIC_CORE_EFLAGS  0
>  
>  #ifdef CONFIG_X86_32
>  
> @@ -190,8 +191,11 @@ extern int arch_setup_additional_pages(struct linux_binprm *bprm,
>  
>  extern unsigned long um_vdso_addr;
>  #define AT_SYSINFO_EHDR 33
> -#define ARCH_DLINFO	NEW_AUX_ENT(AT_SYSINFO_EHDR, um_vdso_addr)
> -
> +#define ARCH_DLINFO						\
> +do {								\
> +	NEW_AUX_ENT(AT_SYSINFO_EHDR, um_vdso_addr);		\
> +	NEW_AUX_ENT(AT_MINSIGSTKSZ, 0);			\
> +} while (0)
>  #endif
>  
>  typedef unsigned long elf_greg_t;
> diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
> index bd2f530e5740..419ba0282806 100644
> --- a/fs/Kconfig.binfmt
> +++ b/fs/Kconfig.binfmt
> @@ -58,7 +58,7 @@ config ARCH_USE_GNU_PROPERTY
>  config BINFMT_ELF_FDPIC
>  	bool "Kernel support for FDPIC ELF binaries"
>  	default y if !BINFMT_ELF
> -	depends on ARM || ((M68K || RISCV || SUPERH || XTENSA) && !MMU)
> +	depends on ARM || ((M68K || RISCV || SUPERH || UML || XTENSA) && !MMU)
>  	select ELFCORE
>  	help
>  	  ELF FDPIC binaries are based on ELF, but allow the individual load




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux