]> www.infradead.org Git - users/hch/misc.git/commitdiff
x86: make the masked_user_access_begin() macro use its argument only once
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 22 Sep 2024 17:55:42 +0000 (10:55 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 22 Sep 2024 17:55:42 +0000 (10:55 -0700)
This doesn't actually matter for any of the current users, but before
merging it mainline, make sure we don't have any surprising semantics.

We don't actually want to use an inline function here, because we want
to allow - but not require - const pointer arguments, and return them as
such.  But we already had a local auto-type variable, so let's just use
it to avoid any possible double evaluation.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
arch/x86/include/asm/uaccess_64.h

index 92859c1ef59c4cc8862c3e769caf5e20a43a2b53..afce8ee5d7b7947afd768a43c5351e123de68939 100644 (file)
@@ -59,8 +59,9 @@ static inline unsigned long __untagged_addr_remote(struct mm_struct *mm,
  * for dense accesses starting at the address.
  */
 #define mask_user_address(x) ((typeof(x))((long)(x)|((long)(x)>>63)))
-#define masked_user_access_begin(x) ({ \
-       __auto_type __masked_ptr = mask_user_address(x); \
+#define masked_user_access_begin(x) ({                         \
+       __auto_type __masked_ptr = (x);                         \
+       __masked_ptr = mask_user_address(__masked_ptr);         \
        __uaccess_begin(); __masked_ptr; })
 
 /*