
CVE-2026-43499 PoC
remove_waiter() dans kernel/locking/rtmutex.c est utilisée par les chemins de slowlock mais aussi pour le rollback du verrou proxy dans rt_mutex_start_proxy_lock() lorsqu'elle est invoquée depuis futex_requeue().
Dans le cas du verrou proxy, waiter::task n'est pas current, mais remove_waiter() opère incorrectement sur current. Cela cause trois problèmes :
waiter::task::pi_lock soit détenu.pi_blocked_on de la tâche d'attente n'est pas effacé, laissant un pointeur pendant prêt pour une utilisation après libération.rt_mutex_adjust_prio_chain() opère sur la mauvaise tâche.CWE-416 (Use After Free). CVSS 3.1 : 7.8 ÉLEVÉ (Local, Faible complexité, Faibles privilèges requis).
Affecté : Linux 2.6.39 à 6.18.x ; corrigé dans 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4.
Prérequis : 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
Résultat attendu sur un appareil vulnérable se termine par une panique du noyau :
Impossible de gérer l'écriture du noyau en mémoire en lecture seule
Signalé par :
Correction écrite par : Keenan Dong
Correction validée par : Thomas Gleixner
Commit : 3bfdc63 — rtmutex : Utiliser waiter::task au lieu de current dans remove_waiter()