diff options
Diffstat (limited to 'arch/x86/include/asm/uaccess.h')
| -rw-r--r-- | arch/x86/include/asm/uaccess.h | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h index 1954dd5552a2..c82abd6e4ca3 100644 --- a/arch/x86/include/asm/uaccess.h +++ b/arch/x86/include/asm/uaccess.h @@ -427,10 +427,11 @@ do {									\  ({								\  	__label__ __pu_label;					\  	int __pu_err = -EFAULT;					\ -	__typeof__(*(ptr)) __pu_val;				\ -	__pu_val = x;						\ +	__typeof__(*(ptr)) __pu_val = (x);			\ +	__typeof__(ptr) __pu_ptr = (ptr);			\ +	__typeof__(size) __pu_size = (size);			\  	__uaccess_begin();					\ -	__put_user_size(__pu_val, (ptr), (size), __pu_label);	\ +	__put_user_size(__pu_val, __pu_ptr, __pu_size, __pu_label);	\  	__pu_err = 0;						\  __pu_label:							\  	__uaccess_end();					\ @@ -585,7 +586,6 @@ extern void __cmpxchg_wrong_size(void)  #define __user_atomic_cmpxchg_inatomic(uval, ptr, old, new, size)	\  ({									\  	int __ret = 0;							\ -	__typeof__(ptr) __uval = (uval);				\  	__typeof__(*(ptr)) __old = (old);				\  	__typeof__(*(ptr)) __new = (new);				\  	__uaccess_begin_nospec();					\ @@ -661,7 +661,7 @@ extern void __cmpxchg_wrong_size(void)  		__cmpxchg_wrong_size();					\  	}								\  	__uaccess_end();						\ -	*__uval = __old;						\ +	*(uval) = __old;						\  	__ret;								\  }) @@ -705,7 +705,7 @@ extern struct movsl_mask {   * checking before using them, but you have to surround them with the   * user_access_begin/end() pair.   */ -static __must_check inline bool user_access_begin(const void __user *ptr, size_t len) +static __must_check __always_inline bool user_access_begin(const void __user *ptr, size_t len)  {  	if (unlikely(!access_ok(ptr,len)))  		return 0; @@ -715,6 +715,9 @@ static __must_check inline bool user_access_begin(const void __user *ptr, size_t  #define user_access_begin(a,b)	user_access_begin(a,b)  #define user_access_end()	__uaccess_end() +#define user_access_save()	smap_save() +#define user_access_restore(x)	smap_restore(x) +  #define unsafe_put_user(x, ptr, label)	\  	__put_user_size((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)), label)  |