patch-2_6_7-vs1_9_1_12
[linux-2.6.git] / arch / i386 / kernel / ptrace.c
index f965495..6f3a626 100644 (file)
@@ -174,7 +174,7 @@ ptrace_get_thread_area(struct task_struct *child,
        ((desc)->a & 0x0ffff) | \
         ((desc)->b & 0xf0000) )
 
-#define GET_32BIT(desc)                (((desc)->b >> 23) & 1)
+#define GET_32BIT(desc)                (((desc)->b >> 22) & 1)
 #define GET_CONTENTS(desc)     (((desc)->b >> 10) & 3)
 #define GET_WRITABLE(desc)     (((desc)->b >>  9) & 1)
 #define GET_LIMIT_PAGES(desc)  (((desc)->b >> 23) & 1)
@@ -235,6 +235,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
        struct task_struct *child;
        struct user * dummy = NULL;
        int i, ret;
+       unsigned long __user *datap = (unsigned long __user *)data;
 
        lock_kernel();
        ret = -EPERM;
@@ -285,7 +286,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                ret = -EIO;
                if (copied != sizeof(tmp))
                        break;
-               ret = put_user(tmp,(unsigned long *) data);
+               ret = put_user(tmp, datap);
                break;
        }
 
@@ -307,7 +308,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                        addr = addr >> 2;
                        tmp = child->thread.debugreg[addr];
                }
-               ret = put_user(tmp,(unsigned long *) data);
+               ret = put_user(tmp, datap);
                break;
        }
 
@@ -425,13 +426,13 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
                break;
 
        case PTRACE_GETREGS: { /* Get all gp regs from the child. */
-               if (!access_ok(VERIFY_WRITE, (unsigned *)data, FRAME_SIZE*sizeof(long))) {
+               if (!access_ok(VERIFY_WRITE, datap, FRAME_SIZE*sizeof(long))) {
                        ret = -EIO;
                        break;
                }
                for ( i = 0; i < FRAME_SIZE*sizeof(long); i += sizeof(long) ) {
-                       __put_user(getreg(child, i),(unsigned long *) data);
-                       data += sizeof(long);
+                       __put_user(getreg(child, i), datap);
+                       datap++;
                }
                ret = 0;
                break;
@@ -439,21 +440,21 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
 
        case PTRACE_SETREGS: { /* Set all gp regs in the child. */
                unsigned long tmp;
-               if (!access_ok(VERIFY_READ, (unsigned *)data, FRAME_SIZE*sizeof(long))) {
+               if (!access_ok(VERIFY_READ, datap, FRAME_SIZE*sizeof(long))) {
                        ret = -EIO;
                        break;
                }
                for ( i = 0; i < FRAME_SIZE*sizeof(long); i += sizeof(long) ) {
-                       __get_user(tmp, (unsigned long *) data);
+                       __get_user(tmp, datap);
                        putreg(child, i, tmp);
-                       data += sizeof(long);
+                       datap++;
                }
                ret = 0;
                break;
        }
 
        case PTRACE_GETFPREGS: { /* Get the child FPU state. */
-               if (!access_ok(VERIFY_WRITE, (unsigned *)data,
+               if (!access_ok(VERIFY_WRITE, datap,
                               sizeof(struct user_i387_struct))) {
                        ret = -EIO;
                        break;
@@ -466,7 +467,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
        }
 
        case PTRACE_SETFPREGS: { /* Set the child FPU state. */
-               if (!access_ok(VERIFY_READ, (unsigned *)data,
+               if (!access_ok(VERIFY_READ, datap,
                               sizeof(struct user_i387_struct))) {
                        ret = -EIO;
                        break;
@@ -478,7 +479,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
        }
 
        case PTRACE_GETFPXREGS: { /* Get the child extended FPU state. */
-               if (!access_ok(VERIFY_WRITE, (unsigned *)data,
+               if (!access_ok(VERIFY_WRITE, datap,
                               sizeof(struct user_fxsr_struct))) {
                        ret = -EIO;
                        break;
@@ -490,7 +491,7 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
        }
 
        case PTRACE_SETFPXREGS: { /* Set the child extended FPU state. */
-               if (!access_ok(VERIFY_READ, (unsigned *)data,
+               if (!access_ok(VERIFY_READ, datap,
                               sizeof(struct user_fxsr_struct))) {
                        ret = -EIO;
                        break;
@@ -501,13 +502,13 @@ asmlinkage int sys_ptrace(long request, long pid, long addr, long data)
        }
 
        case PTRACE_GET_THREAD_AREA:
-               ret = ptrace_get_thread_area(child,
-                                            addr, (struct user_desc __user *) data);
+               ret = ptrace_get_thread_area(child, addr,
+                                       (struct user_desc __user *) data);
                break;
 
        case PTRACE_SET_THREAD_AREA:
-               ret = ptrace_set_thread_area(child,
-                                            addr, (struct user_desc __user *) data);
+               ret = ptrace_set_thread_area(child, addr,
+                                       (struct user_desc __user *) data);
                break;
 
        default: