locking/rtmutex: Skip remove_waiter() when waiter is not enqueued
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.1.177, 6.6.144, 6.12.95, 6.18.36, 7.0.13
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: locking/rtmutex: Skip remove_waiter() when waiter is not enqueued syzbot triggered the following splat in remove_waiter() via FUTEX_CMP_REQUEUE_PI: KASAN: null-ptr-deref in range [0x0000000000000a88-0x0000000000000a8f] class_raw_spinlock_constructor remove_waiter+0x159/0x1200 kernel/locking/rtmutex.c:1561 rt_mutex_start_proxy_lock+0x103/0x120 futex_requeue+0x10e4/0x20d0 __x64_sys_futex+0x34f/0x4d0 task_blocks_on_rt_mutex() does not arm the waiter upon deadlock detection, leaving waiter->task nil, where 3bfdc63936dd ("rtmutex: Use waiter::task instead of current in remove_waiter()") made this fatal. Furthermore, rt_mutex_start_proxy_lock() should not be calling into remove_waiter() upon a successfully grabbing the rtmutex. 1a1fb985f2e2 ("futex: Handle early deadlock return correctly"), moved the remove_waiter() out of __rt_mutex_start_proxy_lock() (where 'ret' was only ever 0 or < 0) into the wrapper. Tighten this check to account for try_to_take_rt_mutex().
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
Version range not reported
- Linux Linux
From 6.1.175 · fixed in 6.1.177; From 6.6.140 · fixed in 6.6.144; From 6.12.86 · fixed in 6.12.95; From 6.18.27 · fixed in 6.18.36; From 7.0.4 · fixed in 7.0.13
References 8
git.kernel.org
- stable/c/bfbc047ceb42c0e1fac8f3a155d4548a8bbe76b1
- stable/c/4ffacf76a457b7ca8ac05f5df8740b0d8f53574a
- stable/c/4afda3a1da02129568a3a2f1898aa13e6763bcba
- stable/c/6707d7e0b71748cb3cd95bad81dae5fe1b3c8f48
- stable/c/5799f9bd7fee40370b93ab1ddf001cdc7017c14d
- stable/c/a388e3dfaf9538a680de5ed43a8ebb5dd45b6e53
- stable/c/55363fa0a04524d11efeaadee734d2db1756ed27
- stable/c/40a25d59e85b3c8709ac2424d44f65610467871e