
CVE-2026-43499: Linux kernel futex PI use-after-free research package
remove_waiter() dans kernel/locking/rtmutex.c est utilisée par les chemins slowlock mais aussi pour le rollback du proxy-lock dans rt_mutex_start_proxy_lock() lorsqu'elle est appelée depuis futex_requeue().
Dans le cas du proxy-lock, waiter::task n'est pas current, mais remove_waiter() opère incorrectement sur current. Cela entraîne trois problèmes :
waiter::task::pi_lock soit détenu.pi_blocked_on de la tâche du waiter 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 (Utilisation après libération). CVSS 3.1 : 7.8 HIGH (Local, complexité faible, privilèges faibles requis).
Versions affectées : Linux 2.6.39 à 6.18.x ; corrigé dans 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4.
Harnais de validation sans escalade de privilèges, réservé à l'appareil de test autorisé.
Paquet reproductible : test_package/ (build, hashs, étapes ADB, divulgation).
Prérequis : Android NDK r27+, adb. Sous Windows : .\build.ps1.
.\build.ps1
adb push build/ghostlock_validate /data/local/tmp/ghostlock_validate
adb shell chmod 755 /data/local/tmp/ghostlock_validate
# Safe default (recommended)
adb shell /data/local/tmp/ghostlock_validate --dry-run --retries 3
# Optional crash probe (may panic) — not for privilege escalation
# adb shell /data/local/tmp/ghostlock_validate --probe --retries 1
Succès de --dry-run : EDEADLK=1 + DRY_RUN_STOP_BEFORE_CORRUPTION=1.
Paquet de preuve (ce qui est / n'est pas démontré sur ce téléphone) : evidence/PROOF.md
Paquet fournisseur (transcriptions dry-run + bundle de divulgation) : evidence/vendor_package_20260726/
Divulgation au fournisseur : test_package/docs/VENDOR_DISCLOSURE.md.
Dépôts publics pour d'autres appareils (référence uniquement, non applicables à amber) : evidence/OTHER_DEVICE_REPOS.md
Aucune étape credential / SELinux / CFI / root n'est implémentée.
Rapporté par :
Correctif rédigé par : Keenan Dong
Commit du correctif par : Thomas Gleixner
Commit : 3bfdc63 — rtmutex : utiliser waiter::task au lieu de current dans remove_waiter()