fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / i386 / math-emu / reg_ld_str.c
index 699fe33..e976cae 100644 (file)
@@ -91,7 +91,7 @@ int FPU_load_extended(long double __user *s, int stnr)
   FPU_REG *sti_ptr = &st(stnr);
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, s, 10);
+  FPU_access_ok(VERIFY_READ, s, 10);
   __copy_from_user(sti_ptr, s, 10);
   RE_ENTRANT_CHECK_ON;
 
@@ -106,7 +106,7 @@ int FPU_load_double(double __user *dfloat, FPU_REG *loaded_data)
   unsigned m64, l64;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, dfloat, 8);
+  FPU_access_ok(VERIFY_READ, dfloat, 8);
   FPU_get_user(m64, 1 + (unsigned long __user *) dfloat);
   FPU_get_user(l64, (unsigned long __user *) dfloat);
   RE_ENTRANT_CHECK_ON;
@@ -178,7 +178,7 @@ int FPU_load_single(float __user *single, FPU_REG *loaded_data)
   int exp, tag, negative;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, single, 4);
+  FPU_access_ok(VERIFY_READ, single, 4);
   FPU_get_user(m32, (unsigned long __user *) single);
   RE_ENTRANT_CHECK_ON;
 
@@ -243,8 +243,9 @@ int FPU_load_int64(long long __user *_s)
   FPU_REG *st0_ptr = &st(0);
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, _s, 8);
-  copy_from_user(&s,_s,8);
+  FPU_access_ok(VERIFY_READ, _s, 8);
+  if (copy_from_user(&s,_s,8))
+    FPU_abort;
   RE_ENTRANT_CHECK_ON;
 
   if (s == 0)
@@ -274,7 +275,7 @@ int FPU_load_int32(long __user *_s, FPU_REG *loaded_data)
   int negative;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, _s, 4);
+  FPU_access_ok(VERIFY_READ, _s, 4);
   FPU_get_user(s, _s);
   RE_ENTRANT_CHECK_ON;
 
@@ -302,7 +303,7 @@ int FPU_load_int16(short __user *_s, FPU_REG *loaded_data)
   int s, negative;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, _s, 2);
+  FPU_access_ok(VERIFY_READ, _s, 2);
   /* Cast as short to get the sign extended. */
   FPU_get_user(s, _s);
   RE_ENTRANT_CHECK_ON;
@@ -335,7 +336,7 @@ int FPU_load_bcd(u_char __user *s)
   int sign;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ, s, 10);
+  FPU_access_ok(VERIFY_READ, s, 10);
   RE_ENTRANT_CHECK_ON;
   for ( pos = 8; pos >= 0; pos--)
     {
@@ -380,7 +381,7 @@ int FPU_store_extended(FPU_REG *st0_ptr, u_char st0_tag, long double __user *d)
   if ( st0_tag != TAG_Empty )
     {
       RE_ENTRANT_CHECK_OFF;
-      FPU_verify_area(VERIFY_WRITE, d, 10);
+      FPU_access_ok(VERIFY_WRITE, d, 10);
 
       FPU_put_user(st0_ptr->sigl, (unsigned long __user *) d);
       FPU_put_user(st0_ptr->sigh, (unsigned long __user *) ((u_char __user *)d + 4));
@@ -397,7 +398,7 @@ int FPU_store_extended(FPU_REG *st0_ptr, u_char st0_tag, long double __user *d)
       /* The masked response */
       /* Put out the QNaN indefinite */
       RE_ENTRANT_CHECK_OFF;
-      FPU_verify_area(VERIFY_WRITE,d,10);
+      FPU_access_ok(VERIFY_WRITE,d,10);
       FPU_put_user(0, (unsigned long __user *) d);
       FPU_put_user(0xc0000000, 1 + (unsigned long __user *) d);
       FPU_put_user(0xffff, 4 + (short __user *) d);
@@ -607,7 +608,7 @@ int FPU_store_double(FPU_REG *st0_ptr, u_char st0_tag, double __user *dfloat)
          /* The masked response */
          /* Put out the QNaN indefinite */
          RE_ENTRANT_CHECK_OFF;
-         FPU_verify_area(VERIFY_WRITE,dfloat,8);
+         FPU_access_ok(VERIFY_WRITE,dfloat,8);
          FPU_put_user(0, (unsigned long __user *) dfloat);
          FPU_put_user(0xfff80000, 1 + (unsigned long __user *) dfloat);
          RE_ENTRANT_CHECK_ON;
@@ -620,7 +621,7 @@ int FPU_store_double(FPU_REG *st0_ptr, u_char st0_tag, double __user *dfloat)
     l[1] |= 0x80000000;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,dfloat,8);
+  FPU_access_ok(VERIFY_WRITE,dfloat,8);
   FPU_put_user(l[0], (unsigned long __user *)dfloat);
   FPU_put_user(l[1], 1 + (unsigned long __user *)dfloat);
   RE_ENTRANT_CHECK_ON;
@@ -826,7 +827,7 @@ int FPU_store_single(FPU_REG *st0_ptr, u_char st0_tag, float __user *single)
          /* The masked response */
          /* Put out the QNaN indefinite */
          RE_ENTRANT_CHECK_OFF;
-         FPU_verify_area(VERIFY_WRITE,single,4);
+         FPU_access_ok(VERIFY_WRITE,single,4);
          FPU_put_user(0xffc00000, (unsigned long __user *) single);
          RE_ENTRANT_CHECK_ON;
          return 1;
@@ -845,7 +846,7 @@ int FPU_store_single(FPU_REG *st0_ptr, u_char st0_tag, float __user *single)
     templ |= 0x80000000;
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,single,4);
+  FPU_access_ok(VERIFY_WRITE,single,4);
   FPU_put_user(templ,(unsigned long __user *) single);
   RE_ENTRANT_CHECK_ON;
 
@@ -906,8 +907,9 @@ int FPU_store_int64(FPU_REG *st0_ptr, u_char st0_tag, long long __user *d)
     }
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,d,8);
-  copy_to_user(d, &tll, 8);
+  FPU_access_ok(VERIFY_WRITE,d,8);
+  if (copy_to_user(d, &tll, 8))
+    FPU_abort;
   RE_ENTRANT_CHECK_ON;
 
   return 1;
@@ -963,7 +965,7 @@ int FPU_store_int32(FPU_REG *st0_ptr, u_char st0_tag, long __user *d)
     }
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,d,4);
+  FPU_access_ok(VERIFY_WRITE,d,4);
   FPU_put_user(t.sigl, (unsigned long __user *) d);
   RE_ENTRANT_CHECK_ON;
 
@@ -1020,7 +1022,7 @@ int FPU_store_int16(FPU_REG *st0_ptr, u_char st0_tag, short __user *d)
     }
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,d,2);
+  FPU_access_ok(VERIFY_WRITE,d,2);
   FPU_put_user((short)t.sigl, d);
   RE_ENTRANT_CHECK_ON;
 
@@ -1069,7 +1071,7 @@ int FPU_store_bcd(FPU_REG *st0_ptr, u_char st0_tag, u_char __user *d)
        {
          /* Produce the QNaN "indefinite" */
          RE_ENTRANT_CHECK_OFF;
-         FPU_verify_area(VERIFY_WRITE,d,10);
+         FPU_access_ok(VERIFY_WRITE,d,10);
          for ( i = 0; i < 7; i++)
            FPU_put_user(0, d+i); /* These bytes "undefined" */
          FPU_put_user(0xc0, d+7); /* This byte "undefined" */
@@ -1088,7 +1090,7 @@ int FPU_store_bcd(FPU_REG *st0_ptr, u_char st0_tag, u_char __user *d)
     }
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,d,10);
+  FPU_access_ok(VERIFY_WRITE,d,10);
   RE_ENTRANT_CHECK_ON;
   for ( i = 0; i < 9; i++)
     {
@@ -1186,7 +1188,7 @@ u_char __user *fldenv(fpu_addr_modes addr_modes, u_char __user *s)
       ^ (addr_modes.override.operand_size == OP_SIZE_PREFIX)) )
     {
       RE_ENTRANT_CHECK_OFF;
-      FPU_verify_area(VERIFY_READ, s, 0x0e);
+      FPU_access_ok(VERIFY_READ, s, 0x0e);
       FPU_get_user(control_word, (unsigned short __user *) s);
       FPU_get_user(partial_status, (unsigned short __user *) (s+2));
       FPU_get_user(tag_word, (unsigned short __user *) (s+4));
@@ -1206,7 +1208,7 @@ u_char __user *fldenv(fpu_addr_modes addr_modes, u_char __user *s)
   else
     {
       RE_ENTRANT_CHECK_OFF;
-      FPU_verify_area(VERIFY_READ, s, 0x1c);
+      FPU_access_ok(VERIFY_READ, s, 0x1c);
       FPU_get_user(control_word, (unsigned short __user *) s);
       FPU_get_user(partial_status, (unsigned short __user *) (s+4));
       FPU_get_user(tag_word, (unsigned short __user *) (s+8));
@@ -1274,7 +1276,7 @@ void frstor(fpu_addr_modes addr_modes, u_char __user *data_address)
 
   /* Copy all registers in stack order. */
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_READ,s,80);
+  FPU_access_ok(VERIFY_READ,s,80);
   __copy_from_user(register_base+offset, s, other);
   if ( offset )
     __copy_from_user(register_base, s+other, offset);
@@ -1298,7 +1300,7 @@ u_char __user *fstenv(fpu_addr_modes addr_modes, u_char __user *d)
       ^ (addr_modes.override.operand_size == OP_SIZE_PREFIX)) )
     {
       RE_ENTRANT_CHECK_OFF;
-      FPU_verify_area(VERIFY_WRITE,d,14);
+      FPU_access_ok(VERIFY_WRITE,d,14);
 #ifdef PECULIAR_486
       FPU_put_user(control_word & ~0xe080, (unsigned long __user *) d);
 #else
@@ -1326,7 +1328,7 @@ u_char __user *fstenv(fpu_addr_modes addr_modes, u_char __user *d)
   else
     {
       RE_ENTRANT_CHECK_OFF;
-      FPU_verify_area(VERIFY_WRITE, d, 7*4);
+      FPU_access_ok(VERIFY_WRITE, d, 7*4);
 #ifdef PECULIAR_486
       control_word &= ~0xe080;
       /* An 80486 sets nearly all of the reserved bits to 1. */
@@ -1336,7 +1338,8 @@ u_char __user *fstenv(fpu_addr_modes addr_modes, u_char __user *d)
       I387.soft.fcs &= ~0xf8000000;
       I387.soft.fos |= 0xffff0000;
 #endif /* PECULIAR_486 */
-      __copy_to_user(d, &control_word, 7*4);
+      if (__copy_to_user(d, &control_word, 7*4))
+       FPU_abort;
       RE_ENTRANT_CHECK_ON;
       d += 0x1c;
     }
@@ -1356,12 +1359,14 @@ void fsave(fpu_addr_modes addr_modes, u_char __user *data_address)
   d = fstenv(addr_modes, data_address);
 
   RE_ENTRANT_CHECK_OFF;
-  FPU_verify_area(VERIFY_WRITE,d,80);
+  FPU_access_ok(VERIFY_WRITE,d,80);
 
   /* Copy all registers in stack order. */
-  __copy_to_user(d, register_base+offset, other);
+  if (__copy_to_user(d, register_base+offset, other))
+    FPU_abort;
   if ( offset )
-    __copy_to_user(d+other, register_base, offset);
+    if (__copy_to_user(d+other, register_base, offset))
+      FPU_abort;
   RE_ENTRANT_CHECK_ON;
 
   finit();