Commit 7b78127e authored by Chris Wright's avatar Chris Wright Committed by Linus Torvalds

[PATCH] error out on execve with no binfmts

Early calls to userspace can invoke an execve() before any binfmt handlers
are registered.  Properly return an error in this case rather than 0.
On at least one arch (x86_64) without this patch, the system will double
fault on early attempts to call_usermodehelper.
Signed-off-by: default avatarChris Wright <chrisw@osdl.org>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 0d772aaa
...@@ -984,7 +984,7 @@ EXPORT_SYMBOL(remove_arg_zero); ...@@ -984,7 +984,7 @@ EXPORT_SYMBOL(remove_arg_zero);
*/ */
int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
{ {
int try,retval=0; int try,retval;
struct linux_binfmt *fmt; struct linux_binfmt *fmt;
#ifdef __alpha__ #ifdef __alpha__
/* handle /sbin/loader.. */ /* handle /sbin/loader.. */
...@@ -1028,6 +1028,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs) ...@@ -1028,6 +1028,7 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)
/* kernel module loader fixup */ /* kernel module loader fixup */
/* so we don't try to load run modprobe in kernel space. */ /* so we don't try to load run modprobe in kernel space. */
set_fs(USER_DS); set_fs(USER_DS);
retval = -ENOENT;
for (try=0; try<2; try++) { for (try=0; try<2; try++) {
read_lock(&binfmt_lock); read_lock(&binfmt_lock);
for (fmt = formats ; fmt ; fmt = fmt->next) { for (fmt = formats ; fmt ; fmt = fmt->next) {
......
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