In the Linux kernel, the following vulnerability has been resolved:
futex: Clear stale exiting pointer in futex_lock_pi() retry path
Fuzzying/stressing futexes triggered:
WARNING: kernel/futex/core.c:825 at wait_for_owner_exiting+0x7a/0x80, CPU#11: futex_lock_pi_s/524
When futex_lock_pi_atomic() sees the owner is exiting, it returns -EBUSY
and stores a refcounted task pointer in 'exiting'.
After wait_for_owner_exiting() consumes that reference, the local pointer
is never reset to nil. Upon a retry, if futex_lock_pi_atomic() returns a
different error, the bogus pointer is passed to wait_for_owner_exiting().
CPU0 CPU1 CPU2
futex_lock_pi(uaddr)
// acquires the PI futex
exit()
futex_cleanup_begin()
futex_state = EXITING;
futex_lock_pi(uaddr)
futex_lock_pi_atomic()
attach_to_pi_owner()
// observes EXITING
*exiting = owner; // takes ref
return -EBUSY
wait_for_owner_exiting(-EBUSY, owner)
put_task_struct(); // drops ref
// exiting still points to owner
goto retry;
futex_lock_pi_atomic()
lock_pi_update_atomic()
cmpxchg(uaddr)
*uaddr ^= WAITERS // whatever
// value changed
return -EAGAIN;
wait_for_owner_exiting(-EAGAIN, exiting) // stale
WARN_ON_ONCE(exiting)
Fix this by resetting upon retry, essentially aligning it with requeue_pi.
CVSS
5.5 MEDIUM (v3.1, NVD)CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before 33095ae3bdde5e5c264d7e88a2f3e7703a26c7aa; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before e7824ec168d2ac883a213cd1f4d6cc0816002a85; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before 5e8e06bf8909e79b4acd950cf578cfc2f10bbefa; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before de7c0c04ad868f2cee6671b11c0a6d20421af1da; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before 7475dfad10a05a5bfadebf5f2499bd61b19ed293; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before 92e47ad03e03dbb5515bdf06444bf6b1e147310d; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before 71112e62807d1925dc3ae6188b11f8cfc85aec23; from 3ef240eaff36b8119ac9e2ea17cbf41179c930ba before 210d36d892de5195e6766c45519dfb1e65f3eb83; and 10 more ranges
from 4.4.255 before 4.5; from 4.9.255 before 4.10; from 4.14.158 before 4.15; from 4.19.172 before 4.20; from 5.4.1 before 5.5; from 5.5.1 before 5.10.253; from 5.11 before 5.15.203; from 5.16 before 6.1.168; and 12 more ranges
The CVE record is authoritative. Products marked “from the name” were identified from the CNA's free-text names, not a CPE, and are matched less certainly. This product uses the NVD API but is not endorsed or certified by the NVD.
Printed from infosecsignals.com. Every record links back to the agency that published it.
Your cookie choices
We use essential cookies to run this site, and, only with your consent, an advertising cookie from Google to measure whether our ads lead to sign-ups and subscriptions. See our for details.