
CVE-2026-43499: Linux kernel futex PI use-after-free research package
remove_waiter() en kernel/locking/rtmutex.c es utilizado por las rutas de slowlock, pero también para la reversión 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 waiter no se limpia, dejando un puntero colgante listo para un uso después de liberación.rt_mutex_adjust_prio_chain() opera sobre la tarea incorrecta.CWE-416 (Uso después de liberación). CVSS 3.1: 7.8 ALTA (Local, Complejidad baja, Privilegios bajos requeridos).
Versiones afectadas: 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.
Herramienta de validación sin escalada de privilegios, únicamente para el dispositivo de prueba autorizado.
Paquete reproducible: test_package/ (compilación, hashes, pasos de ADB, divulgación).
Requisitos previos: Android NDK r27+, adb. En 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
Éxito de --dry-run: EDEADLK=1 + DRY_RUN_STOP_BEFORE_CORRUPTION=1.
Paquete de prueba (qué se demuestra / qué no se demuestra en este teléfono): evidence/PROOF.md
Paquete para el proveedor (transcripciones de --dry-run + paquete de divulgación): evidence/vendor_package_20260726/
Divulgación al proveedor: test_package/docs/VENDOR_DISCLOSURE.md.
Repositorios públicos de otros dispositivos (solo referencia, no aplicables a amber): evidence/OTHER_DEVICE_REPOS.md
No se implementan etapas de credenciales / SELinux / CFI / root.
Reportado por:
Autor de la corrección: Keenan Dong
Commit de la corrección realizado por: Thomas Gleixner
Commit: 3bfdc63 — rtmutex: Use waiter::task instead of current in remove_waiter()