Subject: [PATCH] Update cpuset and ptrace to handle completely separate pspaces From: Eric W. Biederman Date: 1130175614 -0600 --- arch/alpha/kernel/ptrace.c | 4 +--- arch/arm/kernel/ptrace.c | 4 +--- arch/arm26/kernel/ptrace.c | 3 +-- arch/cris/arch-v10/kernel/ptrace.c | 4 +--- arch/cris/arch-v32/kernel/ptrace.c | 4 +--- arch/frv/kernel/ptrace.c | 3 +-- arch/h8300/kernel/ptrace.c | 4 +--- arch/i386/kernel/ptrace.c | 1 - arch/ia64/ia32/sys_ia32.c | 3 +-- arch/ia64/kernel/ptrace.c | 4 +--- arch/m32r/kernel/ptrace.c | 4 +--- arch/m68k/kernel/ptrace.c | 4 +--- arch/m68knommu/kernel/ptrace.c | 4 +--- arch/mips/kernel/ptrace.c | 4 +--- arch/mips/kernel/ptrace32.c | 4 +--- arch/parisc/kernel/ptrace.c | 4 +--- arch/ppc/kernel/ptrace.c | 4 +--- arch/ppc64/kernel/ptrace.c | 4 +--- arch/ppc64/kernel/ptrace32.c | 4 +--- arch/s390/kernel/ptrace.c | 4 +--- arch/sh/kernel/ptrace.c | 4 +--- arch/sh64/kernel/ptrace.c | 4 +--- arch/sparc/kernel/ptrace.c | 4 +--- arch/sparc64/kernel/ptrace.c | 4 +--- arch/um/kernel/ptrace.c | 4 +--- arch/v850/kernel/ptrace.c | 4 +--- arch/x86_64/ia32/ptrace32.c | 4 +--- arch/x86_64/ia32/sys_ia32.c | 5 +---- arch/x86_64/kernel/process.c | 12 +++--------- arch/x86_64/kernel/ptrace.c | 4 +--- arch/xtensa/kernel/ptrace.c | 4 +--- kernel/cpuset.c | 3 +-- 32 files changed, 33 insertions(+), 97 deletions(-) 8472097f05b3765976c427222acec69fe831b4e7 diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c index 17067ab..2fe0f69 100644 --- a/arch/alpha/kernel/ptrace.c +++ b/arch/alpha/kernel/ptrace.c @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -263,7 +262,6 @@ do_sys_ptrace(long request, long pid, lo size_t copied; long ret; - pid = pid_from_user(pid); lock_kernel(); DBG(DBG_MEM, ("request=%ld pid=%ld addr=0x%lx data=0x%lx\n", request, pid, addr, data)); @@ -285,7 +283,7 @@ do_sys_ptrace(long request, long pid, lo ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index c8114bb..d81258e 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -788,7 +787,6 @@ asmlinkage int sys_ptrace(long request, struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -805,7 +803,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/arm26/kernel/ptrace.c b/arch/arm26/kernel/ptrace.c index 9f8cd17..bc316f1 100644 --- a/arch/arm26/kernel/ptrace.c +++ b/arch/arm26/kernel/ptrace.c @@ -671,7 +671,6 @@ asmlinkage int sys_ptrace(long request, struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -688,7 +687,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c index 74b205b..08b42c2 100644 --- a/arch/cris/arch-v10/kernel/ptrace.c +++ b/arch/cris/arch-v10/kernel/ptrace.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -84,7 +83,6 @@ sys_ptrace(long request, long pid, long int ret; unsigned long __user *datap = (unsigned long __user *)data; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; @@ -103,7 +101,7 @@ sys_ptrace(long request, long pid, long ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); diff --git a/arch/cris/arch-v32/kernel/ptrace.c b/arch/cris/arch-v32/kernel/ptrace.c index df3afb7..8fa890f 100644 --- a/arch/cris/arch-v32/kernel/ptrace.c +++ b/arch/cris/arch-v32/kernel/ptrace.c @@ -12,7 +12,6 @@ #include #include #include -#include #include #include @@ -107,7 +106,6 @@ sys_ptrace(long request, long pid, long int ret; unsigned long __user *datap = (unsigned long __user *)data; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; @@ -126,7 +124,7 @@ sys_ptrace(long request, long pid, long ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); diff --git a/arch/frv/kernel/ptrace.c b/arch/frv/kernel/ptrace.c index d7b4c83..c308c1d 100644 --- a/arch/frv/kernel/ptrace.c +++ b/arch/frv/kernel/ptrace.c @@ -113,7 +113,6 @@ asmlinkage int sys_ptrace(long request, unsigned long tmp; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -130,7 +129,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/h8300/kernel/ptrace.c b/arch/h8300/kernel/ptrace.c index 606790f..e4eed73 100644 --- a/arch/h8300/kernel/ptrace.c +++ b/arch/h8300/kernel/ptrace.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -63,7 +62,6 @@ asmlinkage int sys_ptrace(long request, struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -77,7 +75,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/i386/kernel/ptrace.c b/arch/i386/kernel/ptrace.c index e77a4a1..e5a8e2b 100644 --- a/arch/i386/kernel/ptrace.c +++ b/arch/i386/kernel/ptrace.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include diff --git a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c index 4b7d0cd..572de1c 100644 --- a/arch/ia64/ia32/sys_ia32.c +++ b/arch/ia64/ia32/sys_ia32.c @@ -50,7 +50,6 @@ #include #include #include -#include #include #include @@ -1767,7 +1766,7 @@ sys32_ptrace (int request, pid_t pid, un ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid_from_user(pid)); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/ia64/kernel/ptrace.c b/arch/ia64/kernel/ptrace.c index f8504a5..5a6c78f 100644 --- a/arch/ia64/kernel/ptrace.c +++ b/arch/ia64/kernel/ptrace.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include @@ -1426,7 +1425,6 @@ sys_ptrace (long request, pid_t pid, uns struct switch_stack *sw; long ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -1448,7 +1446,7 @@ sys_ptrace (long request, pid_t pid, uns ret = -ESRCH; read_lock(&tasklist_lock); { - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) { if (peek_or_poke) child = find_thread_for_addr(child, addr); diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index 3456e5b..8fd502d 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -762,7 +761,6 @@ asmlinkage int sys_ptrace(long request, struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -776,7 +774,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c index fd3710c..4f05640 100644 --- a/arch/m68k/kernel/ptrace.c +++ b/arch/m68k/kernel/ptrace.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -128,7 +127,6 @@ asmlinkage int sys_ptrace(long request, unsigned long tmp; int i, ret = 0; - pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { /* are we already being traced? */ @@ -141,7 +139,7 @@ asmlinkage int sys_ptrace(long request, goto out; } read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/m68knommu/kernel/ptrace.c b/arch/m68knommu/kernel/ptrace.c index 8def2a6..8c08be0 100644 --- a/arch/m68knommu/kernel/ptrace.c +++ b/arch/m68knommu/kernel/ptrace.c @@ -20,7 +20,6 @@ #include #include #include -#include #include #include @@ -107,7 +106,6 @@ asmlinkage int sys_ptrace(long request, struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -121,7 +119,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 5f83178..2711a1e 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c @@ -27,7 +27,6 @@ #include #include #include -#include #include #include @@ -58,7 +57,6 @@ asmlinkage int sys_ptrace(long request, (int) request, (int) pid, (unsigned long) addr, (unsigned long) data); #endif - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -74,7 +72,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c index a6ab610..a7cae78 100644 --- a/arch/mips/kernel/ptrace32.c +++ b/arch/mips/kernel/ptrace32.c @@ -25,7 +25,6 @@ #include #include #include -#include #include #include @@ -45,7 +44,6 @@ asmlinkage int sys32_ptrace(int request, struct task_struct *child; int ret; - pid = pid_from_user(pid); #if 0 printk("ptrace(r=%d,pid=%d,addr=%08lx,data=%08lx)\n", (int) request, (int) pid, (unsigned long) addr, @@ -66,7 +64,7 @@ asmlinkage int sys32_ptrace(int request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index db7f1bf..ff6bdb1 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include @@ -87,7 +86,6 @@ long sys_ptrace(long request, pid_t pid, long oaddr=addr, odata=data; #endif - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -107,7 +105,7 @@ long sys_ptrace(long request, pid_t pid, ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/ppc/kernel/ptrace.c b/arch/ppc/kernel/ptrace.c index ecafaec..6fcf11d 100644 --- a/arch/ppc/kernel/ptrace.c +++ b/arch/ppc/kernel/ptrace.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include @@ -246,7 +245,6 @@ int sys_ptrace(long request, long pid, l struct task_struct *child; int ret = -EPERM; - pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { /* are we already being traced? */ @@ -262,7 +260,7 @@ int sys_ptrace(long request, long pid, l } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/ppc64/kernel/ptrace.c b/arch/ppc64/kernel/ptrace.c index 87524db..59ccbca 100644 --- a/arch/ppc64/kernel/ptrace.c +++ b/arch/ppc64/kernel/ptrace.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include @@ -59,7 +58,6 @@ int sys_ptrace(long request, long pid, l struct task_struct *child; int ret = -EPERM; - pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { /* are we already being traced? */ @@ -75,7 +73,7 @@ int sys_ptrace(long request, long pid, l } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/ppc64/kernel/ptrace32.c b/arch/ppc64/kernel/ptrace32.c index a0761d4..5b80105 100644 --- a/arch/ppc64/kernel/ptrace32.c +++ b/arch/ppc64/kernel/ptrace32.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include @@ -46,7 +45,6 @@ int sys32_ptrace(long request, long pid, struct task_struct *child; int ret = -EPERM; - pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { /* are we already being traced? */ @@ -62,7 +60,7 @@ int sys32_ptrace(long request, long pid, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index ef8a640..2ea9d75 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c @@ -33,7 +33,6 @@ #include #include #include -#include #include #include @@ -712,7 +711,6 @@ sys_ptrace(long request, long pid, long struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { @@ -734,7 +732,7 @@ sys_ptrace(long request, long pid, long ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/sh/kernel/ptrace.c b/arch/sh/kernel/ptrace.c index 988478e..6fd8084 100644 --- a/arch/sh/kernel/ptrace.c +++ b/arch/sh/kernel/ptrace.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include @@ -87,7 +86,6 @@ asmlinkage int sys_ptrace(long request, struct user * dummy = NULL; int ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -104,7 +102,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/sh64/kernel/ptrace.c b/arch/sh64/kernel/ptrace.c index b4c0062..b923a03 100644 --- a/arch/sh64/kernel/ptrace.c +++ b/arch/sh64/kernel/ptrace.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include @@ -130,7 +129,6 @@ asmlinkage int sys_ptrace(long request, static int first_call = 1; int ret; - pid = pid_from_user(pid); lock_kernel(); if (first_call) { @@ -158,7 +156,7 @@ asmlinkage int sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/sparc/kernel/ptrace.c b/arch/sparc/kernel/ptrace.c index 123e72f..2cfb587 100644 --- a/arch/sparc/kernel/ptrace.c +++ b/arch/sparc/kernel/ptrace.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -269,7 +268,6 @@ asmlinkage void do_ptrace(struct pt_regs struct task_struct *child; int ret; - pid = pid_from_user(pid); lock_kernel(); #ifdef DEBUG_PTRACE { @@ -315,7 +313,7 @@ asmlinkage void do_ptrace(struct pt_regs } #endif read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/sparc64/kernel/ptrace.c b/arch/sparc64/kernel/ptrace.c index d5dcc4d..8374880 100644 --- a/arch/sparc64/kernel/ptrace.c +++ b/arch/sparc64/kernel/ptrace.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -175,7 +174,6 @@ asmlinkage void do_ptrace(struct pt_regs struct task_struct *child; int ret; - pid = pid_from_user(pid); if (test_thread_flag(TIF_32BIT)) { addr &= 0xffffffffUL; data &= 0xffffffffUL; @@ -226,7 +224,7 @@ asmlinkage void do_ptrace(struct pt_regs } #endif read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 31fd34a..3cd0899 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c @@ -10,7 +10,6 @@ #include "linux/security.h" #include "linux/ptrace.h" #include "linux/audit.h" -#include "linux/pspace.h" #ifdef CONFIG_PROC_MM #include "linux/proc_mm.h" #endif @@ -49,7 +48,6 @@ long sys_ptrace(long request, long pid, struct task_struct *child; int i, ret; - pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { @@ -68,7 +66,7 @@ long sys_ptrace(long request, long pid, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/v850/kernel/ptrace.c b/arch/v850/kernel/ptrace.c index c6f23dd..f68fff0 100644 --- a/arch/v850/kernel/ptrace.c +++ b/arch/v850/kernel/ptrace.c @@ -24,7 +24,6 @@ #include #include #include -#include #include #include @@ -119,7 +118,6 @@ int sys_ptrace(long request, long pid, l struct task_struct *child; int rval; - pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { @@ -135,7 +133,7 @@ int sys_ptrace(long request, long pid, l } rval = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c index 0375f2f..185caec 100644 --- a/arch/x86_64/ia32/ptrace32.c +++ b/arch/x86_64/ia32/ptrace32.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -207,7 +206,7 @@ static struct task_struct *find_target(i *err = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); @@ -255,7 +254,6 @@ asmlinkage long sys32_ptrace(long reques break; } - pid = pid_from_user(pid); child = find_target(request, pid, &ret); if (!child) return ret; diff --git a/arch/x86_64/ia32/sys_ia32.c b/arch/x86_64/ia32/sys_ia32.c index edc040c..f207cf3 100644 --- a/arch/x86_64/ia32/sys_ia32.c +++ b/arch/x86_64/ia32/sys_ia32.c @@ -62,7 +62,6 @@ #include #include #include -#include #include #include #include @@ -949,13 +948,11 @@ asmlinkage long sys32_execve(char __user asmlinkage long sys32_clone(unsigned int clone_flags, unsigned int newsp, struct pt_regs *regs) { - long ret; void __user *parent_tid = (void __user *)regs->rdx; void __user *child_tid = (void __user *)regs->rdi; if (!newsp) newsp = regs->rsp; - ret = do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); - return (ret > 0)? pid_to_user(ret): ret; + return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); } /* diff --git a/arch/x86_64/kernel/process.c b/arch/x86_64/kernel/process.c index 93b90b3..b5a89c0 100644 --- a/arch/x86_64/kernel/process.c +++ b/arch/x86_64/kernel/process.c @@ -36,7 +36,6 @@ #include #include #include -#include #include #include @@ -647,17 +646,14 @@ void set_personality_64bit(void) asmlinkage long sys_fork(struct pt_regs *regs) { - long ret = do_fork(SIGCHLD, regs->rsp, regs, 0, NULL, NULL); - return (ret > 0)? pid_to_user(ret) : ret; + return do_fork(SIGCHLD, regs->rsp, regs, 0, NULL, NULL); } asmlinkage long sys_clone(unsigned long clone_flags, unsigned long newsp, void __user *parent_tid, void __user *child_tid, struct pt_regs *regs) { - long ret; if (!newsp) newsp = regs->rsp; - ret = do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); - return (ret > 0)? pid_to_user(ret) : ret; + return do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); } /* @@ -672,10 +668,8 @@ asmlinkage long sys_clone(unsigned long */ asmlinkage long sys_vfork(struct pt_regs *regs) { - long ret; - ret = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->rsp, regs, 0, + return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->rsp, regs, 0, NULL, NULL); - return (ret > 0)? pid_to_user(ret) : ret; } unsigned long get_wchan(struct task_struct *p) diff --git a/arch/x86_64/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c index 78a5e5e..d36dfa2 100644 --- a/arch/x86_64/kernel/ptrace.c +++ b/arch/x86_64/kernel/ptrace.c @@ -19,7 +19,6 @@ #include #include #include -#include #include #include @@ -320,7 +319,6 @@ asmlinkage long sys_ptrace(long request, long i, ret; unsigned ui; - pid = pid_from_user(pid); /* This lock_kernel fixes a subtle race with suid exec */ lock_kernel(); ret = -EPERM; @@ -338,7 +336,7 @@ asmlinkage long sys_ptrace(long request, } ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c index ce8c097..e9ef8df 100644 --- a/arch/xtensa/kernel/ptrace.c +++ b/arch/xtensa/kernel/ptrace.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -51,7 +50,6 @@ int sys_ptrace(long request, long pid, l struct task_struct *child; int ret = -EPERM; - pid = pid_from_user(pid); lock_kernel(); #if 0 @@ -80,7 +78,7 @@ int sys_ptrace(long request, long pid, l ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(current->pspace, pid); if (child) get_task_struct(child); read_unlock(&tasklist_lock); diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 35f009c..1e27fd2 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c @@ -791,8 +791,7 @@ static int attach_task(struct cpuset *cs if (pid) { read_lock(&tasklist_lock); - pid = pid_from_user(pid); - tsk = find_task_by_pid(pid); + tsk = find_task_by_pid(current->pspace, pid); if (!tsk) { read_unlock(&tasklist_lock); return -ESRCH; -- 1.0.GIT