Re: [PATCH v1 02/14] futex: Extend the FUTEX2 flags

From: Thomas Gleixner
Date: Mon Jul 31 2023 - 13:42:19 EST


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.