fs, kernel: permit disabling the uselib syscall
uselib hasn't been used since libc5; glibc does not use it. Support turning it off. When disabled, also omit the load_elf_library implementation from binfmt_elf.c, which only uselib invokes. bloat-o-meter: add/remove: 0/4 grow/shrink: 0/1 up/down: 0/-785 (-785) function old new delta padzero 39 36 -3 uselib_flags 20 - -20 sys_uselib 168 - -168 SyS_uselib 168 - -168 load_elf_library 426 - -426 The new CONFIG_USELIB defaults to `y'. Signed-off-by: Josh Triplett <josh@joshtriplett.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
8f6c5ffc89
commit
69369a7003
4 changed files with 21 additions and 1 deletions
|
@ -46,10 +46,15 @@
|
|||
#endif
|
||||
|
||||
static int load_elf_binary(struct linux_binprm *bprm);
|
||||
static int load_elf_library(struct file *);
|
||||
static unsigned long elf_map(struct file *, unsigned long, struct elf_phdr *,
|
||||
int, int, unsigned long);
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
static int load_elf_library(struct file *);
|
||||
#else
|
||||
#define load_elf_library NULL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* If we don't support core dumping, then supply a NULL so we
|
||||
* don't even try.
|
||||
|
@ -1005,6 +1010,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
|
|||
goto out;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/* This is really simpleminded and specialized - we are loading an
|
||||
a.out library that is given an ELF header. */
|
||||
static int load_elf_library(struct file *file)
|
||||
|
@ -1083,6 +1089,7 @@ static int load_elf_library(struct file *file)
|
|||
out:
|
||||
return error;
|
||||
}
|
||||
#endif /* #ifdef CONFIG_USELIB */
|
||||
|
||||
#ifdef CONFIG_ELF_CORE
|
||||
/*
|
||||
|
|
|
@ -97,6 +97,7 @@ static inline void put_binfmt(struct linux_binfmt * fmt)
|
|||
module_put(fmt->module);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_USELIB
|
||||
/*
|
||||
* Note that a shared library must be both readable and executable due to
|
||||
* security reasons.
|
||||
|
@ -156,6 +157,7 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)
|
|||
out:
|
||||
return error;
|
||||
}
|
||||
#endif /* #ifdef CONFIG_USELIB */
|
||||
|
||||
#ifdef CONFIG_MMU
|
||||
/*
|
||||
|
|
10
init/Kconfig
10
init/Kconfig
|
@ -273,6 +273,16 @@ config FHANDLE
|
|||
get renamed. Enables open_by_handle_at(2) and name_to_handle_at(2)
|
||||
syscalls.
|
||||
|
||||
config USELIB
|
||||
bool "uselib syscall"
|
||||
default y
|
||||
help
|
||||
This option enables the uselib syscall, a system call used in the
|
||||
dynamic linker from libc5 and earlier. glibc does not use this
|
||||
system call. If you intend to run programs built on libc5 or
|
||||
earlier, you may need to enable this syscall. Current systems
|
||||
running glibc can safely disable this.
|
||||
|
||||
config AUDIT
|
||||
bool "Auditing support"
|
||||
depends on NET
|
||||
|
|
|
@ -152,6 +152,7 @@ cond_syscall(sys_process_vm_readv);
|
|||
cond_syscall(sys_process_vm_writev);
|
||||
cond_syscall(compat_sys_process_vm_readv);
|
||||
cond_syscall(compat_sys_process_vm_writev);
|
||||
cond_syscall(sys_uselib);
|
||||
|
||||
/* arch-specific weak syscall entries */
|
||||
cond_syscall(sys_pciconfig_read);
|
||||
|
|
Loading…
Reference in a new issue