
CVE-2026-43499: Linuxカーネルのfutex PI use-after-free研究パッケージ
remove_waiter() は kernel/locking/rtmutex.c 内で 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。
認可されたテストデバイス専用の、権限昇格を伴わない検証ハーネスです。
再現パッケージ: test_package/(ビルド、ハッシュ、ADB 手順、開示情報)。
前提条件: Android NDK r27+、adb。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
--dry-run の成功: EDEADLK=1 + DRY_RUN_STOP_BEFORE_CORRUPTION=1。
証明パッケージ(この端末で実証されること・されないこと): evidence/PROOF.md
ベンダーパッケージ(dry-run のトランスクリプト + 開示バンドル): evidence/vendor_package_20260726/
ベンダーへの開示: test_package/docs/VENDOR_DISCLOSURE.md。
他端末向け公開リポジトリ(参考のみ、amber には適用不可): evidence/OTHER_DEVICE_REPOS.md
認証情報 / SELinux / CFI / root の各ステージは実装されていません。
報告者:
修正の作成者: Keenan Dong
修正のコミット者: Thomas Gleixner
コミット: 3bfdc63 — rtmutex: Use waiter::task instead of current in remove_waiter()