diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2026-08-08 16:39:53 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2026-08-08 16:39:53 -0700 |
| commit | d4eee3bdb8af1010a0c1edf571c00a7f41c5abe3 (patch) | |
| tree | cf3a64419f979e6307b31c34edebd5caee9a5785 /kernel | |
| parent | 91a73db6970aa7cd3d2ea73a4a11eeb3519737db (diff) | |
| parent | 8e7ff730dd96519a333d1570edf1c3fabb6d3629 (diff) | |
Merge tag 'locking-urgent-2026-08-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull futex fix from Ingo Molnar:
- Fix race in futex_pivot_pending() during private hash resize
that can cause stuck tasks (Yao Kai)
* tag 'locking-urgent-2026-08-08' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
futex: Fix race in futex_pivot_pending() during private hash resize
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/futex/core.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/futex/core.c b/kernel/futex/core.c index 2650d1e52803..128c5752f225 100644 --- a/kernel/futex/core.c +++ b/kernel/futex/core.c @@ -1783,14 +1783,15 @@ void futex_hash_free(struct mm_struct *mm) static bool futex_pivot_pending(struct mm_struct *mm) { + struct futex_mm_phash *mmph = &mm->futex.phash; struct futex_private_hash *fph; - guard(rcu)(); + guard(mutex)(&mmph->lock); - if (!mm->futex.phash.hash_new) + if (!mmph->hash_new) return true; - fph = rcu_dereference(mm->futex.phash.hash); + fph = rcu_dereference_raw(mmph->hash); return futex_ref_is_dead(fph); } |
