Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / include / asm-s390 / uaccess.h
index 5eda2c3..0b7c0ca 100644 (file)
 #define segment_eq(a,b) ((a).ar4 == (b).ar4)
 
 
-#define __access_ok(addr,size) (1)
-
-#define access_ok(type,addr,size) __access_ok(addr,size)
-
-extern inline int verify_area(int type, const void __user *addr,
-                                               unsigned long size)
+static inline int __access_ok(const void __user *addr, unsigned long size)
 {
-       return access_ok(type, addr, size) ? 0 : -EFAULT;
+       return 1;
 }
+#define access_ok(type,addr,size) __access_ok(addr,size)
 
 /*
  * The exception table consists of pairs of addresses: the first is the
@@ -148,11 +144,11 @@ struct exception_table_entry
 })
 #endif
 
-#ifndef __CHECKER__
 #define __put_user(x, ptr) \
 ({                                                             \
        __typeof__(*(ptr)) __x = (x);                           \
        int __pu_err;                                           \
+        __chk_user_ptr(ptr);                                    \
        switch (sizeof (*(ptr))) {                              \
        case 1:                                                 \
        case 2:                                                 \
@@ -161,19 +157,11 @@ struct exception_table_entry
                __put_user_asm(__x, ptr, __pu_err);             \
                break;                                          \
        default:                                                \
-               __pu_err = __put_user_bad();                    \
+               __put_user_bad();                               \
                break;                                          \
         }                                                      \
        __pu_err;                                               \
 })
-#else
-#define __put_user(x, ptr)                     \
-({                                             \
-       void __user *p;                         \
-       p = (ptr);                              \
-       0;                                      \
-})
-#endif
 
 #define put_user(x, ptr)                                       \
 ({                                                             \
@@ -182,7 +170,7 @@ struct exception_table_entry
 })
 
 
-extern int __put_user_bad(void);
+extern int __put_user_bad(void) __attribute__((noreturn));
 
 #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 2)
 #define __get_user_asm(x, ptr, err) \
@@ -212,35 +200,41 @@ extern int __put_user_bad(void);
 })
 #endif
 
-#ifndef __CHECKER__
 #define __get_user(x, ptr)                                     \
 ({                                                             \
-       __typeof__(*(ptr)) __x;                                 \
        int __gu_err;                                           \
+        __chk_user_ptr(ptr);                                    \
        switch (sizeof(*(ptr))) {                               \
-       case 1:                                                 \
-       case 2:                                                 \
-       case 4:                                                 \
-       case 8:                                                 \
+       case 1: {                                               \
+               unsigned char __x;                              \
                __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
                break;                                          \
+       };                                                      \
+       case 2: {                                               \
+               unsigned short __x;                             \
+               __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
+               break;                                          \
+       };                                                      \
+       case 4: {                                               \
+               unsigned int __x;                               \
+               __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
+               break;                                          \
+       };                                                      \
+       case 8: {                                               \
+               unsigned long long __x;                         \
+               __get_user_asm(__x, ptr, __gu_err);             \
+               (x) = *(__force __typeof__(*(ptr)) *) &__x;     \
+               break;                                          \
+       };                                                      \
        default:                                                \
-               __x = 0;                                        \
-               __gu_err = __get_user_bad();                    \
+               __get_user_bad();                               \
                break;                                          \
        }                                                       \
-       (x) = __x;                                              \
        __gu_err;                                               \
 })
-#else
-#define __get_user(x, ptr)                     \
-({                                             \
-       void __user *p;                         \
-       p = (ptr);                              \
-       0;                                      \
-})
-#endif
-
 
 #define get_user(x, ptr)                                       \
 ({                                                             \
@@ -248,7 +242,7 @@ extern int __put_user_bad(void);
        __get_user(x, ptr);                                     \
 })
 
-extern int __get_user_bad(void);
+extern int __get_user_bad(void) __attribute__((noreturn));
 
 #define __put_user_unaligned __put_user
 #define __get_user_unaligned __get_user