diff --git a/arch/powerpc/include/asm/uaccess.h b/arch/powerpc/include/asm/uaccess.h index 47a454d19351df967a5d7293bb092ad50ad8e404..2395bdc991bdf4d875c0d4d9380a5edf122cc7f4 100644 --- a/arch/powerpc/include/asm/uaccess.h +++ b/arch/powerpc/include/asm/uaccess.h @@ -49,7 +49,7 @@ static inline bool __access_ok(unsigned long addr, unsigned long size) __put_user_check((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) #define __get_user(x, ptr) \ - __get_user_nocheck((x), (ptr), sizeof(*(ptr)), true) + __get_user_nocheck((x), (ptr), sizeof(*(ptr))) #define __put_user(x, ptr) \ __put_user_nocheck((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr))) @@ -216,19 +216,15 @@ do { \ #define __long_type(x) \ __typeof__(__builtin_choose_expr(sizeof(x) > sizeof(0UL), 0ULL, 0UL)) -#define __get_user_nocheck(x, ptr, size, do_allow) \ +#define __get_user_nocheck(x, ptr, size) \ ({ \ long __gu_err; \ __long_type(*(ptr)) __gu_val; \ __typeof__(*(ptr)) __user *__gu_addr = (ptr); \ __typeof__(size) __gu_size = (size); \ \ - if (do_allow) { \ - might_fault(); \ - __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \ - } else { \ - __get_user_size_allowed(__gu_val, __gu_addr, __gu_size, __gu_err); \ - } \ + might_fault(); \ + __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \ (x) = (__typeof__(*(ptr)))__gu_val; \ \ __gu_err; \ @@ -385,8 +381,14 @@ user_write_access_begin(const void __user *ptr, size_t len) #define user_write_access_end prevent_current_write_to_user #define unsafe_get_user(x, p, e) do { \ - if (unlikely(__get_user_nocheck((x), (p), sizeof(*(p)), false)))\ - goto e; \ + long __gu_err; \ + __long_type(*(p)) __gu_val; \ + __typeof__(*(p)) __user *__gu_addr = (p); \ + \ + __get_user_size_allowed(__gu_val, __gu_addr, sizeof(*(p)), __gu_err); \ + if (__gu_err) \ + goto e; \ + (x) = (__typeof__(*(p)))__gu_val; \ } while (0) #define unsafe_put_user(x, p, e) \