
CVE-2026-43499 PoC
kernel/locking/rtmutex.c の remove_waiter() は、slowlock パスだけでなく、futex_requeue() から呼び出された際の rt_mutex_start_proxy_lock() におけるプロキシロックのロールバックにも使用されます。
プロキシロックの場合、waiter::task は current ではありませんが、remove_waiter() は誤って current に対して操作を行います。これにより、次の3つの問題が発生します:
waiter::task::pi_lock を保持しないまま rbtree のデキューが行われます。pi_blocked_on がクリアされず、use-after-free につながるダングリングポインタが残ります。rt_mutex_adjust_prio_chain() が誤ったタスクに対して操作を行います。CWE-416(Use After Free)。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: Use waiter::task instead of current in remove_waiter()