
CVE-2026-43499 PoC
remove_waiter() em kernel/locking/rtmutex.c é usado pelos caminhos de slowlock, mas também para o rollback de proxy-lock em rt_mutex_start_proxy_lock() quando invocado a partir de futex_requeue().
No caso de proxy-lock, waiter::task não é current, mas remove_waiter() opera incorretamente em current. Isso causa três problemas:
waiter::task::pi_lock seja mantido.pi_blocked_on da tarefa do waiter não é limpo, deixando um ponteiro pendente (dangling pointer) pronto para use-after-free.rt_mutex_adjust_prio_chain() opera na tarefa errada.CWE-416 (Use After Free). CVSS 3.1: 7.8 HIGH (Local, complexidade baixa, privilégios baixos necessários).
Afetado: Linux 2.6.39 até 6.18.x; corrigido em 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4.
Pré-requisitos: 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
A saída esperada em um dispositivo vulnerável termina com um panic do kernel:
Unable to handle kernel write to read-only memory
Relatado por:
Correção escrita por: Keenan Dong
Correção commitada por: Thomas Gleixner
Commit: 3bfdc63 — rtmutex: Use waiter::task instead of current in remove_waiter()