Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69369a70 authored by Josh Triplett's avatar Josh Triplett Committed by Linus Torvalds
Browse files

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: default avatarJosh Triplett <josh@joshtriplett.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 8f6c5ffc
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -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 @@ out_free_ph:
	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 @@ out_free_ph:
out:
	return error;
}
#endif /* #ifdef CONFIG_USELIB */

#ifdef CONFIG_ELF_CORE
/*
+2 −0
Original line number Diff line number Diff line
@@ -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 @@ exit:
out:
  	return error;
}
#endif /* #ifdef CONFIG_USELIB */

#ifdef CONFIG_MMU
/*
+10 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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);