
CVE-2026-43499 PoC
remove_waiter() en kernel/locking/rtmutex.c es utilizado por las rutas de slowlock, pero también para el rollback de proxy-lock en rt_mutex_start_proxy_lock() cuando se invoca desde futex_requeue().
En el caso de proxy-lock, waiter::task no es current, pero remove_waiter() opera incorrectamente sobre current. Esto causa tres problemas:
waiter::task::pi_lock esté retenido.pi_blocked_on de la tarea del waiter no se limpia, dejando un puntero colgante preparado para un uso después de liberar (use-after-free).rt_mutex_adjust_prio_chain() opera sobre la tarea incorrecta.CWE-416 (Uso después de liberar). CVSS 3.1: 7.8 ALTO (Local, Complejidad baja, Privilegios bajos requeridos).
Afecta: Linux 2.6.39 hasta 6.18.x; corregido en 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4.
Requisitos previos: 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
La salida esperada en un dispositivo vulnerable termina con un pánico del kernel:
Unable to handle kernel write to read-only memory
Reportado por:
Corrección escrita por: Keenan Dong
Commit realizado por: Thomas Gleixner
Commit: 3bfdc63 — rtmutex: Use waiter::task instead of current in remove_waiter()