This patch adds the execns() syscall to the i386 architecture. Signed-off-by: Cedric Le Goater Cc: Andrew Morton Cc: Kirill Korotaev Cc: Andrey Savochkin Cc: Eric W. Biederman Cc: Herbert Poetzl Cc: Sam Vilain Cc: Serge E. Hallyn Cc: Dave Hansen --- arch/i386/kernel/process.c | 31 +++++++++++++++++++++++++++++++ arch/i386/kernel/syscall_table.S | 1 + include/asm-i386/unistd.h | 3 ++- 3 files changed, 34 insertions(+), 1 deletion(-) Index: 2.6.18-rc1-mm1/arch/i386/kernel/process.c =================================================================== --- 2.6.18-rc1-mm1.orig/arch/i386/kernel/process.c +++ 2.6.18-rc1-mm1/arch/i386/kernel/process.c @@ -768,6 +768,37 @@ out: return error; } +/* + * sys_execns() executes a new program and unshares selected + * namespaces. + */ +asmlinkage int sys_execns(struct pt_regs regs) +{ + int error; + int flags; + char * filename; + + flags = regs.ebx; + filename = getname((char __user *) regs.ecx); + error = PTR_ERR(filename); + if (IS_ERR(filename)) + goto out; + error = do_execns(flags, filename, + (char __user * __user *) regs.edx, + (char __user * __user *) regs.edi, + ®s); + if (error == 0) { + task_lock(current); + current->ptrace &= ~PT_DTRACE; + task_unlock(current); + /* Make sure we don't return using sysenter.. */ + set_thread_flag(TIF_IRET); + } + putname(filename); +out: + return error; +} + #define top_esp (THREAD_SIZE - sizeof(unsigned long)) #define top_ebp (THREAD_SIZE - 2*sizeof(unsigned long)) Index: 2.6.18-rc1-mm1/arch/i386/kernel/syscall_table.S =================================================================== --- 2.6.18-rc1-mm1.orig/arch/i386/kernel/syscall_table.S +++ 2.6.18-rc1-mm1/arch/i386/kernel/syscall_table.S @@ -317,3 +317,4 @@ ENTRY(sys_call_table) .long sys_tee /* 315 */ .long sys_vmsplice .long sys_move_pages + .long sys_execns Index: 2.6.18-rc1-mm1/include/asm-i386/unistd.h =================================================================== --- 2.6.18-rc1-mm1.orig/include/asm-i386/unistd.h +++ 2.6.18-rc1-mm1/include/asm-i386/unistd.h @@ -323,10 +323,11 @@ #define __NR_tee 315 #define __NR_vmsplice 316 #define __NR_move_pages 317 +#define __NR_execns 318 #ifdef __KERNEL__ -#define NR_syscalls 318 +#define NR_syscalls 319 #include /* --