diff options
| author | Jiri Kosina <jkosina@suse.com> | 2025-07-31 22:36:25 +0200 |
|---|---|---|
| committer | Jiri Kosina <jkosina@suse.com> | 2025-07-31 22:36:25 +0200 |
| commit | e9ef810dfee7a2227da9d423aecb0ced35faddbe (patch) | |
| tree | 52befbbbeacbd9340f90884dee840be3f492d3e1 /kernel/futex/core.c | |
| parent | selftests/hid: add a test case for the recent syzbot underflow (diff) | |
| parent | HID: amd_sfh: Enable operating mode (diff) | |
| download | linux-e9ef810dfee7a2227da9d423aecb0ced35faddbe.tar.gz linux-e9ef810dfee7a2227da9d423aecb0ced35faddbe.zip | |
Merge branch 'for-6.17/amd-sfh' into for-linus
- add support for operating modes (Basavaraj Natikar)
Diffstat (limited to 'kernel/futex/core.c')
| -rw-r--r-- | kernel/futex/core.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/kernel/futex/core.c b/kernel/futex/core.c index 565f9717c6ca..90d53fb0ee9e 100644 --- a/kernel/futex/core.c +++ b/kernel/futex/core.c @@ -583,8 +583,8 @@ int get_futex_key(u32 __user *uaddr, unsigned int flags, union futex_key *key, if (futex_get_value(&node, naddr)) return -EFAULT; - if (node != FUTEX_NO_NODE && - (node >= MAX_NUMNODES || !node_possible(node))) + if ((node != FUTEX_NO_NODE) && + ((unsigned int)node >= MAX_NUMNODES || !node_possible(node))) return -EINVAL; } @@ -1629,6 +1629,16 @@ again: mm->futex_phash_new = NULL; if (fph) { + if (cur && (!cur->hash_mask || cur->immutable)) { + /* + * If two threads simultaneously request the global + * hash then the first one performs the switch, + * the second one returns here. + */ + free = fph; + mm->futex_phash_new = new; + return -EBUSY; + } if (cur && !new) { /* * If we have an existing hash, but do not yet have |
