[PATCH] powerpc: ppc32 needs elf_read_implies_exec()

Kumar Gala galak at kernel.crashing.org
Sat Apr 18 04:16:19 EST 2009


On Apr 17, 2009, at 1:03 PM, Kumar Gala wrote:

> On ppc64 we implemented elf_read_implies_exec() for 32-bit binaries
> because old toolchains had bugs with regards to marking PHDRs as
> executable that needed to be.  For some reason we didn't do this on
> ppc32 builds.  This hadn't been an issue until recent changes to I$/D$
> handling that impacted the per-page exec handling on embedded PPC.
>
> Signed-off-by: Kumar Gala <galak at kernel.crashing.org>
> ---
> arch/powerpc/include/asm/elf.h |    1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/elf.h b/arch/powerpc/include/ 
> asm/elf.h
> index 1a856b1..b6ada56 100644
> --- a/arch/powerpc/include/asm/elf.h
> +++ b/arch/powerpc/include/asm/elf.h
> @@ -259,6 +259,7 @@ do {								\
> 		(exec_stk != EXSTACK_DISABLE_X) : 0)
> #else
> # define SET_PERSONALITY(ex) set_personality(PER_LINUX)
> +# define elf_read_implies_exec(ex, exec_stk) (exec_stk !=  
> EXSTACK_DISABLE_X)
> #endif /* __powerpc64__ */
>
> extern int dcache_bsize;
> -- 
> 1.6.0.6

I just want to make sure I understand the implications of this  
change.  It seems to me that we will not be able to support stack exec  
perms on any ppc32 part that has per-page exec support. Is that correct?

I'm wondering if we are too generous in the check, exec_stk can be:

EXSTACK_DEFAULT
EXSTACK_DISABLE_X
EXSTACK_ENABLE_X

It seems like EXSTACK_DISABLE_X/EXSTACK_ENABLE_X are only set if  
p_type == PT_GNU_STACK.  Do we think toolchains existed that set  
p_type to PT_GNU_STACK that don't set PF_X properly?

My thinking is elf_read_implies_exec() should be changed to:

# define elf_read_implies_exec(ex, exec_stk) (exec_stk ==  
EXSTACK_DEFAULT)

- k



More information about the Linuxppc-dev mailing list