Commit b74956df authored by Arjan van de Ven's avatar Arjan van de Ven Committed by Linus Torvalds

[PATCH] Allow heap to be marked executable too

This makes it possible to mark binaries to have both an executable stack
and heap, allowing for a NX system to disable NX on a per-binary level.
Signed-off-by: default avatarArjan van de Ven <arjan@infradead.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 735a58f4
...@@ -757,7 +757,7 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) ...@@ -757,7 +757,7 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
/* Do this immediately, since STACK_TOP as used in setup_arg_pages /* Do this immediately, since STACK_TOP as used in setup_arg_pages
may depend on the personality. */ may depend on the personality. */
SET_PERSONALITY(loc->elf_ex, ibcs2_interpreter); SET_PERSONALITY(loc->elf_ex, ibcs2_interpreter);
if (elf_read_implies_exec(loc->elf_ex, have_pt_gnu_stack)) if (elf_read_implies_exec(loc->elf_ex, executable_stack))
current->personality |= READ_IMPLIES_EXEC; current->personality |= READ_IMPLIES_EXEC;
arch_pick_mmap_layout(current->mm); arch_pick_mmap_layout(current->mm);
......
...@@ -123,7 +123,7 @@ typedef struct user_fxsr_struct elf_fpxregset_t; ...@@ -123,7 +123,7 @@ typedef struct user_fxsr_struct elf_fpxregset_t;
* An executable for which elf_read_implies_exec() returns TRUE will * An executable for which elf_read_implies_exec() returns TRUE will
* have the READ_IMPLIES_EXEC personality flag set automatically. * have the READ_IMPLIES_EXEC personality flag set automatically.
*/ */
#define elf_read_implies_exec(ex, have_pt_gnu_stack) (!(have_pt_gnu_stack)) #define elf_read_implies_exec(ex, executable_stack) (executable_stack != EXSTACK_DISABLE_X)
extern int dump_task_regs (struct task_struct *, elf_gregset_t *); extern int dump_task_regs (struct task_struct *, elf_gregset_t *);
extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *);
......
...@@ -186,8 +186,8 @@ extern void ia64_elf_core_copy_regs (struct pt_regs *src, elf_gregset_t dst); ...@@ -186,8 +186,8 @@ extern void ia64_elf_core_copy_regs (struct pt_regs *src, elf_gregset_t dst);
#ifdef __KERNEL__ #ifdef __KERNEL__
#define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX) #define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX)
#define elf_read_implies_exec(ex, have_pt_gnu_stack) \ #define elf_read_implies_exec(ex, executable_stack) \
(!(have_pt_gnu_stack) && ((ex).e_flags & EF_IA_64_LINUX_EXECUTABLE_STACK) != 0) ((executable_stack!=EXSTACK_DISABLE_X) && ((ex).e_flags & EF_IA_64_LINUX_EXECUTABLE_STACK) != 0)
struct task_struct; struct task_struct;
......
...@@ -147,14 +147,7 @@ extern void set_personality_64bit(void); ...@@ -147,14 +147,7 @@ extern void set_personality_64bit(void);
* An executable for which elf_read_implies_exec() returns TRUE will * An executable for which elf_read_implies_exec() returns TRUE will
* have the READ_IMPLIES_EXEC personality flag set automatically. * have the READ_IMPLIES_EXEC personality flag set automatically.
*/ */
#define elf_read_implies_exec(ex, have_pt_gnu_stack) (!(have_pt_gnu_stack)) #define elf_read_implies_exec(ex, executable_stack) (executable_stack != EXSTACK_DISABLE_X)
/*
* An executable for which elf_read_implies_exec() returns TRUE will
* have the READ_IMPLIES_EXEC personality flag set automatically.
*/
#define elf_read_implies_exec_binary(ex, have_pt_gnu_stack) \
(!(have_pt_gnu_stack))
extern int dump_task_regs (struct task_struct *, elf_gregset_t *); extern int dump_task_regs (struct task_struct *, elf_gregset_t *);
extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *); extern int dump_task_fpu (struct task_struct *, elf_fpregset_t *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment