Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h
- index b218b85..fb9887a 100644
- --- a/include/asm-generic/uaccess.h
- +++ b/include/asm-generic/uaccess.h
- @@ -142,16 +142,17 @@ static inline __must_check long __copy_to_user(void __user *to,
- */
- #define __put_user(x, ptr) \
- ({ \
- - __typeof__(*(ptr)) __x = (x); \
- + __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
- + __typeof__(*(ptr)) __pu_val = (x); \
- int __pu_err = -EFAULT; \
- - __chk_user_ptr(ptr); \
- - switch (sizeof (*(ptr))) { \
- + __chk_user_ptr(__pu_addr); \
- + switch (sizeof (*(__pu_addr))) { \
- case 1: \
- case 2: \
- case 4: \
- case 8: \
- - __pu_err = __put_user_fn(sizeof (*(ptr)), \
- - ptr, &__x); \
- + __pu_err = __put_user_fn(sizeof (*(__pu_addr)), \
- + __pu_addr, &__pu_val); \
- break; \
- default: \
- __put_user_bad(); \
- @@ -162,9 +163,10 @@ static inline __must_check long __copy_to_user(void __user *to,
- #define put_user(x, ptr) \
- ({ \
- + __typeof__(*(ptr)) __user *__Pu_addr = (ptr); \
- might_sleep(); \
- - access_ok(VERIFY_WRITE, ptr, sizeof(*ptr)) ? \
- - __put_user(x, ptr) : \
- + access_ok(VERIFY_WRITE, __Pu_addr, sizeof(*__Pu_addr)) ?\
- + __put_user(x, __Pu_addr) : \
- -EFAULT; \
- })
- @@ -178,35 +180,36 @@ extern int __put_user_bad(void) __attribute__((noreturn));
- #define __get_user(x, ptr) \
- ({ \
- + const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
- int __gu_err = -EFAULT; \
- - __chk_user_ptr(ptr); \
- - switch (sizeof(*(ptr))) { \
- + __chk_user_ptr(__gu_addr); \
- + switch (sizeof(*__gu_addr)) { \
- case 1: { \
- - unsigned char __x; \
- - __gu_err = __get_user_fn(sizeof (*(ptr)), \
- - ptr, &__x); \
- - (x) = *(__force __typeof__(*(ptr)) *) &__x; \
- + unsigned char __gu_val; \
- + __gu_err = __get_user_fn(sizeof (*__gu_addr), \
- + __gu_addr, &__gu_val); \
- + (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val; \
- break; \
- }; \
- case 2: { \
- - unsigned short __x; \
- - __gu_err = __get_user_fn(sizeof (*(ptr)), \
- - ptr, &__x); \
- - (x) = *(__force __typeof__(*(ptr)) *) &__x; \
- + unsigned short __gu_val; \
- + __gu_err = __get_user_fn(sizeof (*__gu_addr), \
- + __gu_addr, &__gu_val); \
- + (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val; \
- break; \
- }; \
- case 4: { \
- - unsigned int __x; \
- - __gu_err = __get_user_fn(sizeof (*(ptr)), \
- - ptr, &__x); \
- - (x) = *(__force __typeof__(*(ptr)) *) &__x; \
- + unsigned int __gu_val; \
- + __gu_err = __get_user_fn(sizeof (*__gu_addr), \
- + __gu_addr, &__gu_val); \
- + (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val; \
- break; \
- }; \
- case 8: { \
- - unsigned long long __x; \
- - __gu_err = __get_user_fn(sizeof (*(ptr)), \
- - ptr, &__x); \
- - (x) = *(__force __typeof__(*(ptr)) *) &__x; \
- + unsigned long long __gu_val; \
- + __gu_err = __get_user_fn(sizeof (*__gu_addr), \
- + __gu_addr, &__gu_val); \
- + (x) = *(__force __typeof__(*__gu_addr) *) &__gu_val; \
- break; \
- }; \
- default: \
- @@ -218,9 +221,10 @@ extern int __put_user_bad(void) __attribute__((noreturn));
- #define get_user(x, ptr) \
- ({ \
- + const __typeof__(*(ptr)) __user *__Gu_addr = (ptr); \
- might_sleep(); \
- - access_ok(VERIFY_READ, ptr, sizeof(*ptr)) ? \
- - __get_user(x, ptr) : \
- + access_ok(VERIFY_READ, __Gu_addr, sizeof(*__Gu_addr)) ? \
- + __get_user(x, __Gu_addr) : \
- -EFAULT; \
- })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement