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 <ga...@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
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to