提交 fc5243d9 编写于 作者: M Martin Schwidefsky

[S390] arch_setup_additional_pages arguments

arch_setup_additional_pages currently gets two arguments, the binary
format descripton and an indication if the process uses an executable
stack or not. The second argument is not used by anybody, it could
be removed without replacement.

What actually does make sense is to pass an indication if the process
uses the elf interpreter or not. The glibc code will not use anything
from the vdso if the process does not use the dynamic linker, so for
statically linked binaries the architecture backend can choose not
to map the vdso.
Acked-by: NIngo Molnar <mingo@elte.hu>
Signed-off-by: NMartin Schwidefsky <schwidefsky@de.ibm.com>
上级 a114a9d6
...@@ -267,7 +267,7 @@ extern int ucache_bsize; ...@@ -267,7 +267,7 @@ extern int ucache_bsize;
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES #define ARCH_HAS_SETUP_ADDITIONAL_PAGES
struct linux_binprm; struct linux_binprm;
extern int arch_setup_additional_pages(struct linux_binprm *bprm, extern int arch_setup_additional_pages(struct linux_binprm *bprm,
int executable_stack); int uses_interp);
#define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b); #define VDSO_AUX_ENT(a,b) NEW_AUX_ENT(a,b);
#endif /* __KERNEL__ */ #endif /* __KERNEL__ */
......
...@@ -184,8 +184,7 @@ static void dump_vdso_pages(struct vm_area_struct * vma) ...@@ -184,8 +184,7 @@ static void dump_vdso_pages(struct vm_area_struct * vma)
* This is called from binfmt_elf, we create the special vma for the * This is called from binfmt_elf, we create the special vma for the
* vDSO and insert it into the mm struct tree * vDSO and insert it into the mm struct tree
*/ */
int arch_setup_additional_pages(struct linux_binprm *bprm, int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
int executable_stack)
{ {
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
struct page **vdso_pagelist; struct page **vdso_pagelist;
......
...@@ -204,7 +204,7 @@ do { \ ...@@ -204,7 +204,7 @@ do { \
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES #define ARCH_HAS_SETUP_ADDITIONAL_PAGES
struct linux_binprm; struct linux_binprm;
extern int arch_setup_additional_pages(struct linux_binprm *bprm, extern int arch_setup_additional_pages(struct linux_binprm *bprm,
int executable_stack); int uses_interp);
extern unsigned int vdso_enabled; extern unsigned int vdso_enabled;
extern void __kernel_vsyscall; extern void __kernel_vsyscall;
......
...@@ -59,8 +59,7 @@ int __init vsyscall_init(void) ...@@ -59,8 +59,7 @@ int __init vsyscall_init(void)
} }
/* Setup a VMA at program startup for the vsyscall page */ /* Setup a VMA at program startup for the vsyscall page */
int arch_setup_additional_pages(struct linux_binprm *bprm, int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
int executable_stack)
{ {
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
unsigned long addr; unsigned long addr;
......
...@@ -325,7 +325,7 @@ struct linux_binprm; ...@@ -325,7 +325,7 @@ struct linux_binprm;
#define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1
extern int arch_setup_additional_pages(struct linux_binprm *bprm, extern int arch_setup_additional_pages(struct linux_binprm *bprm,
int executable_stack); int uses_interp);
extern int syscall32_setup_pages(struct linux_binprm *, int exstack); extern int syscall32_setup_pages(struct linux_binprm *, int exstack);
#define compat_arch_setup_additional_pages syscall32_setup_pages #define compat_arch_setup_additional_pages syscall32_setup_pages
......
...@@ -310,7 +310,7 @@ int __init sysenter_setup(void) ...@@ -310,7 +310,7 @@ int __init sysenter_setup(void)
} }
/* Setup a VMA at program startup for the vsyscall page */ /* Setup a VMA at program startup for the vsyscall page */
int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack) int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{ {
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
unsigned long addr; unsigned long addr;
......
...@@ -98,7 +98,7 @@ static unsigned long vdso_addr(unsigned long start, unsigned len) ...@@ -98,7 +98,7 @@ static unsigned long vdso_addr(unsigned long start, unsigned len)
/* Setup a VMA at program startup for the vsyscall page. /* Setup a VMA at program startup for the vsyscall page.
Not called for compat tasks */ Not called for compat tasks */
int arch_setup_additional_pages(struct linux_binprm *bprm, int exstack) int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{ {
struct mm_struct *mm = current->mm; struct mm_struct *mm = current->mm;
unsigned long addr; unsigned long addr;
......
...@@ -949,7 +949,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs) ...@@ -949,7 +949,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
set_binfmt(&elf_format); set_binfmt(&elf_format);
#ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES #ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
retval = arch_setup_additional_pages(bprm, executable_stack); retval = arch_setup_additional_pages(bprm, !!elf_interpreter);
if (retval < 0) { if (retval < 0) {
send_sig(SIGKILL, current, 0); send_sig(SIGKILL, current, 0);
goto out; goto out;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册