
CVE-2026-43499: Pacote de pesquisa sobre use-after-free no futex PI do kernel Linux
remove_waiter() em kernel/locking/rtmutex.c é usada pelos caminhos de slowlock, mas também para o rollback de proxy-lock em rt_mutex_start_proxy_lock() quando invocada a partir de futex_requeue().
No caso de proxy-lock, waiter::task não é current, mas remove_waiter() opera incorretamente sobre current. Isso causa três problemas:
waiter::task::pi_lock seja mantida.pi_blocked_on da tarefa (waiter) não é limpo, deixando um ponteiro pendente (dangling pointer) preparado para uso após liberação.rt_mutex_adjust_prio_chain() opera sobre a tarefa errada.CWE-416 (Uso Após Liberação). CVSS 3.1: 7.8 ALTO (Local, complexidade baixa, privilégios baixos necessários).
Afetados: 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.
Ferramenta de validação sem escalada de privilégios, apenas para o dispositivo de teste autorizado.
Pacote reproduzível: test_package/ (build, hashes, etapas do ADB, divulgação).
Pré-requisitos: Android NDK r27+, adb. No 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
Sucesso de --dry-run: EDEADLK=1 + DRY_RUN_STOP_BEFORE_CORRUPTION=1.
Pacote de prova (o que é / não é demonstrado neste telefone): evidence/PROOF.md
Pacote do fornecedor (transcrições do dry-run + pacote de divulgação): evidence/vendor_package_20260726/
Divulgação ao fornecedor: test_package/docs/VENDOR_DISCLOSURE.md.
Repositórios públicos de outros dispositivos (apenas referência, não aplicáveis ao amber): evidence/OTHER_DEVICE_REPOS.md
Nenhuma etapa de credencial / SELinux / CFI / root é implementada.
Relatado por:
Correção escrita por: Keenan Dong
Commit da correção por: Thomas Gleixner
Commit: 3bfdc63 — rtmutex: Usar waiter::task em vez de current em remove_waiter()