X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fum%2Fkernel%2Fexec_kern.c;h=49ddabe69be74e3db30641cad223f90610896b10;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=a5f21283d2cd840af2448fe23d1993189099155f;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/arch/um/kernel/exec_kern.c b/arch/um/kernel/exec_kern.c index a5f21283d..49ddabe69 100644 --- a/arch/um/kernel/exec_kern.c +++ b/arch/um/kernel/exec_kern.c @@ -34,38 +34,42 @@ void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp) extern void log_exec(char **argv, void *tty); -static int execve1(char *file, char **argv, char **env) +static long execve1(char *file, char __user * __user *argv, + char *__user __user *env) { - int error; + long error; #ifdef CONFIG_TTY_LOG log_exec(argv, current->tty); #endif error = do_execve(file, argv, env, ¤t->thread.regs); if (error == 0){ + task_lock(current); current->ptrace &= ~PT_DTRACE; + task_unlock(current); set_cmdline(current_cmd()); } return(error); } -int um_execve(char *file, char **argv, char **env) +long um_execve(char *file, char __user *__user *argv, char __user *__user *env) { - int err; + long err; err = execve1(file, argv, env); - if(!err) + if(!err) do_longjmp(current->thread.exec_buf, 1); return(err); } -int sys_execve(char *file, char **argv, char **env) +long sys_execve(char *file, char __user *__user *argv, + char __user *__user *env) { - int error; + long error; char *filename; lock_kernel(); - filename = getname((char *) file); + filename = getname((char __user *) file); error = PTR_ERR(filename); if (IS_ERR(filename)) goto out; error = execve1(filename, argv, env);