
CVE-2026-43499 PoC
remove_waiter() in kernel/locking/rtmutex.c viene usata dai percorsi slowlock ma anche per il rollback del proxy-lock in rt_mutex_start_proxy_lock() quando invocata da futex_requeue().
Nel caso del proxy-lock, waiter::task non è current, ma remove_waiter() opera erroneamente su current. Ciò causa tre problemi:
waiter::task::pi_lock sia trattenuto.pi_blocked_on del task waiter non viene cancellato, lasciando un puntatore dangling pronto per un uso-dopo-liberazione.rt_mutex_adjust_prio_chain() opera sul task sbagliato.CWE-416 (Uso dopo liberazione). CVSS 3.1: 7.8 ALTO (Locale, Bassa complessità, Bassi privilegi richiesti).
Interessati: Linux 2.6.39 fino a 6.18.x; corretto in 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4.
Prerequisiti: Android NDK 27, CMake ≥ 3.22, adb.
cmake -B build -G Ninja
cmake --build build
adb push build/trigger /data/local/tmp/trigger
adb shell chmod +x /data/local/tmp/trigger
adb shell /data/local/tmp/trigger
Output atteso su un dispositivo vulnerabile termina con un kernel panic:
Unable to handle kernel write to read-only memory
Segnalato da:
Correzione di: Keenan Dong
Commit di: Thomas Gleixner
Commit: 3bfdc63 — rtmutex: Usa waiter::task invece di current in remove_waiter()