Subject: [PATCH] pspace support for ptrace (Update all of the architectures) From: Eric W. Biederman Date: 1129800422 -0600 --- arch/alpha/kernel/ptrace.c | 2 ++ arch/arm/kernel/ptrace.c | 2 ++ arch/arm26/kernel/ptrace.c | 2 ++ arch/cris/arch-v10/kernel/ptrace.c | 2 ++ arch/cris/arch-v32/kernel/ptrace.c | 2 ++ arch/frv/kernel/ptrace.c | 2 ++ arch/h8300/kernel/ptrace.c | 2 ++ arch/ia64/ia32/sys_ia32.c | 3 ++- arch/ia64/kernel/ptrace.c | 2 ++ arch/m32r/kernel/ptrace.c | 2 ++ arch/m68k/kernel/ptrace.c | 2 ++ arch/m68knommu/kernel/ptrace.c | 2 ++ arch/mips/kernel/ptrace.c | 2 ++ arch/mips/kernel/ptrace32.c | 2 ++ arch/parisc/kernel/ptrace.c | 2 ++ arch/ppc/kernel/ptrace.c | 2 ++ arch/ppc64/kernel/ptrace.c | 2 ++ arch/ppc64/kernel/ptrace32.c | 2 ++ arch/s390/kernel/ptrace.c | 2 ++ arch/sh/kernel/ptrace.c | 2 ++ arch/sh64/kernel/ptrace.c | 2 ++ arch/sparc/kernel/ptrace.c | 2 ++ arch/sparc64/kernel/ptrace.c | 2 ++ arch/um/kernel/ptrace.c | 2 ++ arch/v850/kernel/ptrace.c | 2 ++ arch/x86_64/ia32/ptrace32.c | 2 ++ arch/x86_64/kernel/ptrace.c | 2 ++ arch/xtensa/kernel/ptrace.c | 2 ++ 28 files changed, 56 insertions(+), 1 deletions(-) 94190f765d1c535bd398af84723285c058817f54 diff --git a/arch/alpha/kernel/ptrace.c b/arch/alpha/kernel/ptrace.c index bbd3753..17067ab 100644 --- a/arch/alpha/kernel/ptrace.c +++ b/arch/alpha/kernel/ptrace.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -262,6 +263,7 @@ 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)); diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c index cd99b83..c8114bb 100644 --- a/arch/arm/kernel/ptrace.c +++ b/arch/arm/kernel/ptrace.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -787,6 +788,7 @@ 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) { diff --git a/arch/arm26/kernel/ptrace.c b/arch/arm26/kernel/ptrace.c index 8a52124..9f8cd17 100644 --- a/arch/arm26/kernel/ptrace.c +++ b/arch/arm26/kernel/ptrace.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -670,6 +671,7 @@ 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) { diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c index 130dd21..74b205b 100644 --- a/arch/cris/arch-v10/kernel/ptrace.c +++ b/arch/cris/arch-v10/kernel/ptrace.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -83,6 +84,7 @@ 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; diff --git a/arch/cris/arch-v32/kernel/ptrace.c b/arch/cris/arch-v32/kernel/ptrace.c index 208489d..df3afb7 100644 --- a/arch/cris/arch-v32/kernel/ptrace.c +++ b/arch/cris/arch-v32/kernel/ptrace.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -106,6 +107,7 @@ 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; diff --git a/arch/frv/kernel/ptrace.c b/arch/frv/kernel/ptrace.c index cbe03cb..d7b4c83 100644 --- a/arch/frv/kernel/ptrace.c +++ b/arch/frv/kernel/ptrace.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -112,6 +113,7 @@ asmlinkage int sys_ptrace(long request, unsigned long tmp; int ret; + pid = pid_from_user(pid); lock_kernel(); ret = -EPERM; if (request == PTRACE_TRACEME) { diff --git a/arch/h8300/kernel/ptrace.c b/arch/h8300/kernel/ptrace.c index 05c15e8..606790f 100644 --- a/arch/h8300/kernel/ptrace.c +++ b/arch/h8300/kernel/ptrace.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -62,6 +63,7 @@ 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) { diff --git a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c index 3fa67ec..4b7d0cd 100644 --- a/arch/ia64/ia32/sys_ia32.c +++ b/arch/ia64/ia32/sys_ia32.c @@ -50,6 +50,7 @@ #include #include #include +#include #include #include @@ -1766,7 +1767,7 @@ sys32_ptrace (int request, pid_t pid, un ret = -ESRCH; read_lock(&tasklist_lock); - child = find_task_by_pid(pid); + child = find_task_by_pid(pid_from_user(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 bbb8bc7..f8504a5 100644 --- a/arch/ia64/kernel/ptrace.c +++ b/arch/ia64/kernel/ptrace.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -1425,6 +1426,7 @@ 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) { diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index 124f7c1..3456e5b 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -761,6 +762,7 @@ 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) { diff --git a/arch/m68k/kernel/ptrace.c b/arch/m68k/kernel/ptrace.c index 8ed1b01..fd3710c 100644 --- a/arch/m68k/kernel/ptrace.c +++ b/arch/m68k/kernel/ptrace.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -127,6 +128,7 @@ 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? */ diff --git a/arch/m68knommu/kernel/ptrace.c b/arch/m68knommu/kernel/ptrace.c index 9724e1c..8def2a6 100644 --- a/arch/m68knommu/kernel/ptrace.c +++ b/arch/m68knommu/kernel/ptrace.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -106,6 +107,7 @@ 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) { diff --git a/arch/mips/kernel/ptrace.c b/arch/mips/kernel/ptrace.c index 0b571a5..5f83178 100644 --- a/arch/mips/kernel/ptrace.c +++ b/arch/mips/kernel/ptrace.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include @@ -57,6 +58,7 @@ 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) { diff --git a/arch/mips/kernel/ptrace32.c b/arch/mips/kernel/ptrace32.c index eee2079..a6ab610 100644 --- a/arch/mips/kernel/ptrace32.c +++ b/arch/mips/kernel/ptrace32.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -44,6 +45,7 @@ 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, diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index f3428e5..db7f1bf 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -86,6 +87,7 @@ 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) { diff --git a/arch/ppc/kernel/ptrace.c b/arch/ppc/kernel/ptrace.c index e7aee41..ecafaec 100644 --- a/arch/ppc/kernel/ptrace.c +++ b/arch/ppc/kernel/ptrace.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -245,6 +246,7 @@ 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? */ diff --git a/arch/ppc64/kernel/ptrace.c b/arch/ppc64/kernel/ptrace.c index b1c044c..87524db 100644 --- a/arch/ppc64/kernel/ptrace.c +++ b/arch/ppc64/kernel/ptrace.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -58,6 +59,7 @@ 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? */ diff --git a/arch/ppc64/kernel/ptrace32.c b/arch/ppc64/kernel/ptrace32.c index fb8c22d..a0761d4 100644 --- a/arch/ppc64/kernel/ptrace32.c +++ b/arch/ppc64/kernel/ptrace32.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -45,6 +46,7 @@ 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? */ diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index 06afa31..ef8a640 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c @@ -33,6 +33,7 @@ #include #include #include +#include #include #include @@ -711,6 +712,7 @@ sys_ptrace(long request, long pid, long struct task_struct *child; int ret; + pid = pid_from_user(pid); lock_kernel(); if (request == PTRACE_TRACEME) { diff --git a/arch/sh/kernel/ptrace.c b/arch/sh/kernel/ptrace.c index b28919b..988478e 100644 --- a/arch/sh/kernel/ptrace.c +++ b/arch/sh/kernel/ptrace.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -86,6 +87,7 @@ 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) { diff --git a/arch/sh64/kernel/ptrace.c b/arch/sh64/kernel/ptrace.c index fd20009..b4c0062 100644 --- a/arch/sh64/kernel/ptrace.c +++ b/arch/sh64/kernel/ptrace.c @@ -28,6 +28,7 @@ #include #include #include +#include #include #include @@ -129,6 +130,7 @@ asmlinkage int sys_ptrace(long request, static int first_call = 1; int ret; + pid = pid_from_user(pid); lock_kernel(); if (first_call) { diff --git a/arch/sparc/kernel/ptrace.c b/arch/sparc/kernel/ptrace.c index 475c4c1..123e72f 100644 --- a/arch/sparc/kernel/ptrace.c +++ b/arch/sparc/kernel/ptrace.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -268,6 +269,7 @@ asmlinkage void do_ptrace(struct pt_regs struct task_struct *child; int ret; + pid = pid_from_user(pid); lock_kernel(); #ifdef DEBUG_PTRACE { diff --git a/arch/sparc64/kernel/ptrace.c b/arch/sparc64/kernel/ptrace.c index 774ecbb..d5dcc4d 100644 --- a/arch/sparc64/kernel/ptrace.c +++ b/arch/sparc64/kernel/ptrace.c @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -174,6 +175,7 @@ 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; diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c index 71af4d5..31fd34a 100644 --- a/arch/um/kernel/ptrace.c +++ b/arch/um/kernel/ptrace.c @@ -10,6 +10,7 @@ #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 @@ -48,6 +49,7 @@ 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) { diff --git a/arch/v850/kernel/ptrace.c b/arch/v850/kernel/ptrace.c index 4726b87..c6f23dd 100644 --- a/arch/v850/kernel/ptrace.c +++ b/arch/v850/kernel/ptrace.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -118,6 +119,7 @@ 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) { diff --git a/arch/x86_64/ia32/ptrace32.c b/arch/x86_64/ia32/ptrace32.c index 2a925e2..0375f2f 100644 --- a/arch/x86_64/ia32/ptrace32.c +++ b/arch/x86_64/ia32/ptrace32.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -254,6 +255,7 @@ 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/kernel/ptrace.c b/arch/x86_64/kernel/ptrace.c index bbf64b5..78a5e5e 100644 --- a/arch/x86_64/kernel/ptrace.c +++ b/arch/x86_64/kernel/ptrace.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -319,6 +320,7 @@ 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; diff --git a/arch/xtensa/kernel/ptrace.c b/arch/xtensa/kernel/ptrace.c index 2659efd..ce8c097 100644 --- a/arch/xtensa/kernel/ptrace.c +++ b/arch/xtensa/kernel/ptrace.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -50,6 +51,7 @@ int sys_ptrace(long request, long pid, l struct task_struct *child; int ret = -EPERM; + pid = pid_from_user(pid); lock_kernel(); #if 0 -- 1.0.GIT