Linux: futex: Fix private hash use-after-free on resize
What fixes it
- 5d5dc18b3a9ac011619b7d3af4514bf9e9b6a6afLinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
futex: Fix private hash use-after-free on resize
poll_state_synchronize_rcu(mm->futex.phash.batches) is used by futex_ref_drop() to check that a grace period has passed since the current hash was published. This relies on batches referencing a grace period which started after the hash pointer was assigned.
__futex_pivot_hash() sets mmph->batches before it replaces mmph->hash:
scoped_guard(rcu) { mmph->batches = get_state_synchronize_rcu(); rcu_assign_pointer(mmph->hash, new); }
The scoped_guard(rcu) doesn't stop new grace periods from starting, and if one starts between those two assignments, futex_ref_drop() can move forward while a reader still holds a pointer to the old hash.
Fix things by setting mmph->batches after assigning mmph->hash. The scoped_guard(rcu) isn't needed, so let's drop that as well.
Text from CVE List
Affected versions 6
- Linuxaffected: 56180dd20c19e5b0fa34822997a9ac66b517e7b3 before 5d5dc18b3a9ac011619b7d3af4514bf9e9b6a6afCVE List
- Linuxaffected: 56180dd20c19e5b0fa34822997a9ac66b517e7b3 before f35e3b5784221654f9cdbd6222275a7fa203f6c3CVE List
- Linuxaffected: 6.17CVE List
- Linuxunaffected: all versions before 6.17CVE List
- Linuxunaffected: 7.2.10 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List