aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/um/kernel/ptrace.c18
-rw-r--r--arch/um/sys-x86_64/ptrace.c7
2 files changed, 11 insertions, 14 deletions
diff --git a/arch/um/kernel/ptrace.c b/arch/um/kernel/ptrace.c
index 963d82bdec06..a5e33f29bbeb 100644
--- a/arch/um/kernel/ptrace.c
+++ b/arch/um/kernel/ptrace.c
@@ -47,6 +47,7 @@ long arch_ptrace(struct task_struct *child, long request,
47{ 47{
48 int i, ret; 48 int i, ret;
49 unsigned long __user *p = (void __user *)data; 49 unsigned long __user *p = (void __user *)data;
50 void __user *vp = p;
50 51
51 switch (request) { 52 switch (request) {
52 /* read word at location addr. */ 53 /* read word at location addr. */
@@ -108,24 +109,20 @@ long arch_ptrace(struct task_struct *child, long request,
108#endif 109#endif
109#ifdef PTRACE_GETFPREGS 110#ifdef PTRACE_GETFPREGS
110 case PTRACE_GETFPREGS: /* Get the child FPU state. */ 111 case PTRACE_GETFPREGS: /* Get the child FPU state. */
111 ret = get_fpregs((struct user_i387_struct __user *) data, 112 ret = get_fpregs(vp, child);
112 child);
113 break; 113 break;
114#endif 114#endif
115#ifdef PTRACE_SETFPREGS 115#ifdef PTRACE_SETFPREGS
116 case PTRACE_SETFPREGS: /* Set the child FPU state. */ 116 case PTRACE_SETFPREGS: /* Set the child FPU state. */
117 ret = set_fpregs((struct user_i387_struct __user *) data, 117 ret = set_fpregs(vp, child);
118 child);
119 break; 118 break;
120#endif 119#endif
121 case PTRACE_GET_THREAD_AREA: 120 case PTRACE_GET_THREAD_AREA:
122 ret = ptrace_get_thread_area(child, addr, 121 ret = ptrace_get_thread_area(child, addr, vp);
123 (struct user_desc __user *) data);
124 break; 122 break;
125 123
126 case PTRACE_SET_THREAD_AREA: 124 case PTRACE_SET_THREAD_AREA:
127 ret = ptrace_set_thread_area(child, addr, 125 ret = ptrace_set_thread_area(child, addr, datavp);
128 (struct user_desc __user *) data);
129 break; 126 break;
130 127
131 case PTRACE_FAULTINFO: { 128 case PTRACE_FAULTINFO: {
@@ -135,7 +132,8 @@ long arch_ptrace(struct task_struct *child, long request,
135 * On i386, ptrace_faultinfo is smaller! 132 * On i386, ptrace_faultinfo is smaller!
136 */ 133 */
137 ret = copy_to_user(p, &child->thread.arch.faultinfo, 134 ret = copy_to_user(p, &child->thread.arch.faultinfo,
138 sizeof(struct ptrace_faultinfo)); 135 sizeof(struct ptrace_faultinfo)) ?
136 -EIO : 0;
139 break; 137 break;
140 } 138 }
141 139
@@ -159,7 +157,7 @@ long arch_ptrace(struct task_struct *child, long request,
159#ifdef PTRACE_ARCH_PRCTL 157#ifdef PTRACE_ARCH_PRCTL
160 case PTRACE_ARCH_PRCTL: 158 case PTRACE_ARCH_PRCTL:
161 /* XXX Calls ptrace on the host - needs some SMP thinking */ 159 /* XXX Calls ptrace on the host - needs some SMP thinking */
162 ret = arch_prctl(child, data, (void *) addr); 160 ret = arch_prctl(child, data, (void __user *) addr);
163 break; 161 break;
164#endif 162#endif
165 default: 163 default:
diff --git a/arch/um/sys-x86_64/ptrace.c b/arch/um/sys-x86_64/ptrace.c
index 67e63680df28..f43613643cdb 100644
--- a/arch/um/sys-x86_64/ptrace.c
+++ b/arch/um/sys-x86_64/ptrace.c
@@ -179,15 +179,14 @@ long subarch_ptrace(struct task_struct *child, long request,
179 unsigned long addr, unsigned long data) 179 unsigned long addr, unsigned long data)
180{ 180{
181 int ret = -EIO; 181 int ret = -EIO;
182 void __user *datap = (void __user *) data;
182 183
183 switch (request) { 184 switch (request) {
184 case PTRACE_GETFPXREGS: /* Get the child FPU state. */ 185 case PTRACE_GETFPXREGS: /* Get the child FPU state. */
185 ret = get_fpregs((struct user_i387_struct __user *) data, 186 ret = get_fpregs(datap, child);
186 child);
187 break; 187 break;
188 case PTRACE_SETFPXREGS: /* Set the child FPU state. */ 188 case PTRACE_SETFPXREGS: /* Set the child FPU state. */
189 ret = set_fpregs((struct user_i387_struct __user *) data, 189 ret = set_fpregs(datap, child);
190 child);
191 break; 190 break;
192 } 191 }
193 192