Overview
About vulnerability
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().
Details
KernelCare state
Live-patch status from KernelCare for each operating system.
| Operating system | Status | Covered kernels |
|---|---|---|
| AlmaLinux 8 | Released |
113 kernels
|
| AlmaLinux 9 | In Rollout |
2 kernels
|
| CentOS 8 | Released |
21 kernels
|
| Debian 11 | Released |
37 kernels
|
| Debian 11 cloud | Released |
17 kernels
|
| Debian 12 | Released |
41 kernels
|
| Debian 13 | Released |
11 kernels
|
| RHEL 8 | Released |
117 kernels
|
| RHEL 9 | Released |
114 kernels
|
| Rocky Linux 8 | Released |
94 kernels
|
| Rocky Linux 9 | Released |
89 kernels
|
| Ubuntu 18.04 | In Rollout |
125 kernels
|
| Ubuntu 18.04 AWS | Released |
67 kernels
|
| Ubuntu 18.04 AWS Focal | Released |
56 kernels
|
| Ubuntu 18.04 Azure | Released |
17 kernels
|
| Ubuntu 18.04 HWE Focal | Released |
69 kernels
|
| Ubuntu 20.04 | Released |
127 kernels
|
| Ubuntu 20.04 AWS | Released |
109 kernels
|
| Ubuntu 20.04 Azure | Released |
100 kernels
|
| Ubuntu 24.04 | Released |
46 kernels
|