|
@@ -215,22 +215,18 @@ copy_thread(unsigned long clone_flags,
|
|
/*
|
|
/*
|
|
* sys_execve() executes a new program.
|
|
* sys_execve() executes a new program.
|
|
*/
|
|
*/
|
|
-
|
|
|
|
asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp)
|
|
asmlinkage int sys_execve(char __user *name, char __user * __user *argv, char __user * __user *envp)
|
|
{
|
|
{
|
|
int error;
|
|
int error;
|
|
char *filename;
|
|
char *filename;
|
|
struct pt_regs *regs = (struct pt_regs *)((&name) + 6);
|
|
struct pt_regs *regs = (struct pt_regs *)((&name) + 6);
|
|
|
|
|
|
- lock_kernel();
|
|
|
|
filename = getname(name);
|
|
filename = getname(name);
|
|
error = PTR_ERR(filename);
|
|
error = PTR_ERR(filename);
|
|
if (IS_ERR(filename))
|
|
if (IS_ERR(filename))
|
|
- goto out;
|
|
|
|
|
|
+ return error;
|
|
error = do_execve(filename, argv, envp, regs);
|
|
error = do_execve(filename, argv, envp, regs);
|
|
putname(filename);
|
|
putname(filename);
|
|
- out:
|
|
|
|
- unlock_kernel();
|
|
|
|
return error;
|
|
return error;
|
|
}
|
|
}
|
|
|
|
|