Replace the can_do_masked_user_access() conditional with the generic macro.
No functional change.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: x86@kernel.org
---
arch/x86/include/asm/futex.h | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
--- a/arch/x86/include/asm/futex.h
+++ b/arch/x86/include/asm/futex.h
@@ -48,9 +48,7 @@ do { \
static __always_inline int arch_futex_atomic_op_inuser(int op, int oparg, int *oval,
u32 __user *uaddr)
{
- if (can_do_masked_user_access())
- uaddr = masked_user_access_begin(uaddr);
- else if (!user_access_begin(uaddr, sizeof(u32)))
+ if (!user_write_masked_begin(uaddr))
return -EFAULT;
switch (op) {
@@ -74,7 +72,7 @@ static __always_inline int arch_futex_at
user_access_end();
return -ENOSYS;
}
- user_access_end();
+ user_write_access_end();
return 0;
Efault:
user_access_end();
@@ -86,9 +84,7 @@ static inline int futex_atomic_cmpxchg_i
{
int ret = 0;
- if (can_do_masked_user_access())
- uaddr = masked_user_access_begin(uaddr);
- else if (!user_access_begin(uaddr, sizeof(u32)))
+ if (!user_write_masked_begin(uaddr))
return -EFAULT;
asm volatile("\n"
"1:\t" LOCK_PREFIX "cmpxchgl %3, %2\n"
@@ -98,7 +94,7 @@ static inline int futex_atomic_cmpxchg_i
: "r" (newval), "1" (oldval)
: "memory"
);
- user_access_end();
+ user_write_access_end();
*uval = oldval;
return ret;
}
Le 13/08/2025 à 17:57, Thomas Gleixner a écrit : > Replace the can_do_masked_user_access() conditional with the generic macro. > > No functional change. > > Signed-off-by: Thomas Gleixner <tglx@linutronix.de> > Cc: x86@kernel.org > --- > arch/x86/include/asm/futex.h | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > --- a/arch/x86/include/asm/futex.h > +++ b/arch/x86/include/asm/futex.h > @@ -48,9 +48,7 @@ do { \ > static __always_inline int arch_futex_atomic_op_inuser(int op, int oparg, int *oval, > u32 __user *uaddr) > { > - if (can_do_masked_user_access()) > - uaddr = masked_user_access_begin(uaddr); > - else if (!user_access_begin(uaddr, sizeof(u32))) > + if (!user_write_masked_begin(uaddr)) You are replacing a user_access_begin() by a macro that calls user_write_access_begin(). I means that reads will not be allowed, allthough arch_futex_atomic_op_inuser() performs read-then-write, so it requires a full read-write user access. > return -EFAULT; > > switch (op) { > @@ -74,7 +72,7 @@ static __always_inline int arch_futex_at > user_access_end(); > return -ENOSYS; > } > - user_access_end(); > + user_write_access_end(); Same, can't be changed to write-only, read permission is required as well. > return 0; > Efault: > user_access_end(); > @@ -86,9 +84,7 @@ static inline int futex_atomic_cmpxchg_i > { > int ret = 0; > > - if (can_do_masked_user_access()) > - uaddr = masked_user_access_begin(uaddr); > - else if (!user_access_begin(uaddr, sizeof(u32))) > + if (!user_write_masked_begin(uaddr)) Same, read access is also needed. > return -EFAULT; > asm volatile("\n" > "1:\t" LOCK_PREFIX "cmpxchgl %3, %2\n" > @@ -98,7 +94,7 @@ static inline int futex_atomic_cmpxchg_i > : "r" (newval), "1" (oldval) > : "memory" > ); > - user_access_end(); > + user_write_access_end(); Same, read access is also needed. > *uval = oldval; > return ret; > } > >
© 2016 - 2025 Red Hat, Inc.