On Mon, Jul 31 2023 at 18:11, Thomas Gleixner wrote: > On Fri, Jul 21 2023 at 12:22, Peter Zijlstra wrote: >> +#define FUTEX2_8 0x00 >> +#define FUTEX2_16 0x01 >> #define FUTEX2_32 0x02 >> - /* 0x04 */ >> +#define FUTEX2_64 0x03 >> +#define FUTEX2_NUMA 0x04 >> /* 0x08 */ >> /* 0x10 */ >> /* 0x20 */ >> --- a/kernel/futex/syscalls.c >> +++ b/kernel/futex/syscalls.c >> @@ -183,7 +183,7 @@ SYSCALL_DEFINE6(futex, u32 __user *, uad >> return do_futex(uaddr, op, val, tp, uaddr2, (unsigned long)utime, val3); >> } >> >> -#define FUTEX2_MASK (FUTEX2_32 | FUTEX2_PRIVATE) >> +#define FUTEX2_MASK (FUTEX2_64 | FUTEX2_PRIVATE) >> >> /** >> * futex_parse_waitv - Parse a waitv array from userspace >> @@ -207,7 +207,12 @@ static int futex_parse_waitv(struct fute >> if ((aux.flags & ~FUTEX2_MASK) || aux.__reserved) >> return -EINVAL; > > With the above aux.flags with FUTEX2_32 set will result in -EINVAL. I > don't think that's intentional. Aargh. This is really nasty to make FUTEX2_64 0x3 and abuse it to test the flags for validity. Intuitive and obvious is something else.