exec.c (11e4afb49b7fa1fc8e1ffd850c1806dd86a08204) | exec.c (c7887325230aec47d47a32562a6e26014a0fafca) |
---|---|
1/* 2 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 3 * Licensed under the GPL 4 */ 5 6#include "linux/stddef.h" 7#include "linux/fs.h" 8#include "linux/smp_lock.h" --- 30 unchanged lines hidden (view full) --- 39 40void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp) 41{ 42 set_fs(USER_DS); 43 PT_REGS_IP(regs) = eip; 44 PT_REGS_SP(regs) = esp; 45} 46 | 1/* 2 * Copyright (C) 2000 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) 3 * Licensed under the GPL 4 */ 5 6#include "linux/stddef.h" 7#include "linux/fs.h" 8#include "linux/smp_lock.h" --- 30 unchanged lines hidden (view full) --- 39 40void start_thread(struct pt_regs *regs, unsigned long eip, unsigned long esp) 41{ 42 set_fs(USER_DS); 43 PT_REGS_IP(regs) = eip; 44 PT_REGS_SP(regs) = esp; 45} 46 |
47static long execve1(char *file, char __user * __user *argv, | 47static long execve1(const char *file, char __user * __user *argv, |
48 char __user *__user *env) 49{ 50 long error; 51 52 error = do_execve(file, argv, env, ¤t->thread.regs); 53 if (error == 0) { 54 task_lock(current); 55 current->ptrace &= ~PT_DTRACE; 56#ifdef SUBARCH_EXECVE1 57 SUBARCH_EXECVE1(¤t->thread.regs.regs); 58#endif 59 task_unlock(current); 60 } 61 return error; 62} 63 | 48 char __user *__user *env) 49{ 50 long error; 51 52 error = do_execve(file, argv, env, ¤t->thread.regs); 53 if (error == 0) { 54 task_lock(current); 55 current->ptrace &= ~PT_DTRACE; 56#ifdef SUBARCH_EXECVE1 57 SUBARCH_EXECVE1(¤t->thread.regs.regs); 58#endif 59 task_unlock(current); 60 } 61 return error; 62} 63 |
64long um_execve(char *file, char __user *__user *argv, char __user *__user *env) | 64long um_execve(const char *file, char __user *__user *argv, char __user *__user *env) |
65{ 66 long err; 67 68 err = execve1(file, argv, env); 69 if (!err) 70 UML_LONGJMP(current->thread.exec_buf, 1); 71 return err; 72} 73 | 65{ 66 long err; 67 68 err = execve1(file, argv, env); 69 if (!err) 70 UML_LONGJMP(current->thread.exec_buf, 1); 71 return err; 72} 73 |
74long sys_execve(char __user *file, char __user *__user *argv, | 74long sys_execve(const char __user *file, char __user *__user *argv, |
75 char __user *__user *env) 76{ 77 long error; 78 char *filename; 79 80 lock_kernel(); 81 filename = getname(file); 82 error = PTR_ERR(filename); 83 if (IS_ERR(filename)) goto out; 84 error = execve1(filename, argv, env); 85 putname(filename); 86 out: 87 unlock_kernel(); 88 return error; 89} | 75 char __user *__user *env) 76{ 77 long error; 78 char *filename; 79 80 lock_kernel(); 81 filename = getname(file); 82 error = PTR_ERR(filename); 83 if (IS_ERR(filename)) goto out; 84 error = execve1(filename, argv, env); 85 putname(filename); 86 out: 87 unlock_kernel(); 88 return error; 89} |