On 3/29/2019 10:00 PM, Jann Horn wrote:
The first two arguments of __user_atomic_cmpxchg_inatomic() are: - `uval` is a kernel pointer into which the old value should be stored - `ptr` is the user pointer on which the cmpxchg should operate This means that casting `uval` to `__typeof__(ptr)` is wrong. Since `uval` is only used once inside the macro, just get rid of __uval and use `(uval)` directly. Signed-off-by: Jann Horn <ja...@google.com>
Looks good to me. Reviewed-by: Mukesh Ojha <mo...@codeaurora.org> Cheers, -Mukesh
--- arch/x86/include/asm/uaccess.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h index 1954dd5552a2..a21f2a2f17bf 100644 --- a/arch/x86/include/asm/uaccess.h +++ b/arch/x86/include/asm/uaccess.h @@ -585,7 +585,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 +660,7 @@ extern void __cmpxchg_wrong_size(void) __cmpxchg_wrong_size(); \ } \ __uaccess_end(); \ - *__uval = __old; \ + *(uval) = __old; \ __ret; \ })