
CVE-2026-43499 PoC
remove_waiter() in kernel/locking/rtmutex.c는 slowlock 경로에서 사용되지만 futex_requeue()에서 호출될 때 rt_mutex_start_proxy_lock()의 프록시 잠금 롤백에도 사용됩니다.
프록시 잠금의 경우 waiter::task는 current가 아니지만 remove_waiter()는 잘못해서 current에 대해 동작합니다. 이로 인해 세 가지 문제가 발생합니다:
waiter::task::pi_lock을 잡지 않은 상태에서 발생합니다.pi_blocked_on이 해제되지 않아, 사용 후 해제에 취약한 매달린 포인터가 남습니다.rt_mutex_adjust_prio_chain()이 잘못된 태스크에 대해 동작합니다.CWE-416 (사용 후 해제). CVSS 3.1: 7.8 HIGH (로컬, 낮은 복잡성, 낮은 권한 필요).
영향을 받는 버전: Linux 2.6.39 ~ 6.18.x; 6.1.175, 6.6.140, 6.12.86, 6.18.27, 7.0.4에서 패치됨.
전제 조건: 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
취약한 장치에서 예상되는 출력은 커널 패닉으로 끝납니다:
Unable to handle kernel write to read-only memory
보고자:
수정 작성자: Keenan Dong
수정 커미터: Thomas Gleixner
커밋: 3bfdc63 — rtmutex: remove_waiter()에서 current 대신 waiter::task 사용