CVE-2026-89624 in Linux
要約
〜によって VulDB • 2026年09月12日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
HID: universal-pidff - フォースフィードバック初期化の失敗時にデバイスを停止する
universal_pidff_probe() は hid_hw_start() を介してデバイスの起動を開始し、その後フォースフィードバックの初期化に失敗した場合、「return error」のみを行うラベルを介してエラーを返します。この結果、デバイスが起動したままの状態になります。
HIDコアはドライバの代わりにクリーンアップ(巻き戻し)を実行しません。__hid_device_probe() は devres グループを解放し、レポートを閉じ、hdev->driver を NULL にクリアします:
if (ret) {
devres_release_group(&hdev->dev, hdev->devres_group_id); hid_close_report(hdev); hdev->driver = NULL; }
hid_hw_start() が hid_connect() 経由で登録した hidraw キャラクタデバイスは kzalloc() で割り当てられ、cdev_device_add() で追加されるため、devres の管理対象外であり、上記のクリーンアップ処理を生き残ります。hdev->driver が NULL であるため、hid_device_remove() は hid_hw_stop() をスキップします。これは、ドライバがまだアタッチされている場合のみ巻き戻しを行うためです。したがって、両方のパスにおいて登録情報がデバイスよりも長く生存することになります。
生存している /dev/hidrawX をオープンすると、解放済みメモリへの書き込みが行われます。KASAN は hidraw_open() -> hid_hw_open() -> トランスポートの open コールバック(解放済みオブジェクト内で spinlock を取得する)からの use-after-free 書き込みを報告します。PID usage page を持ち、入力レポートを持たないディスクリプタだけで十分です:hidraw がデバイスを確保するため hid_hw_start() は成功しますが、hid->inputs が空のままのためフォースフィードバック初期化は失敗します。他の障害ケースも hid_pidff_init_with_quirks() で返却されます - 出力レポートがない場合、割り当ての失敗、pidff_init_fields()、pidff_check_autocenter()、使用不可能なエフェクト数、input_ff_create() - いずれも同じラベルに到達します。
このパスでもデバイスを停止させます。hid-dr.c と hid-emsff.c は HID_CONNECT_DEFAULT & ~HID_CONNECT_FF マスクを使用してデバイスを起動しますが、すでにこれを処理しています。2つの早期 goto 文は hid_hw_stop() なしで返却を続ける必要があります(どちらも起動済みのデバイスを持っていないため)、開始後に失敗するパスには独自のラベルを与えるものとします。
XBOW によって発見され、Baul Lee <[email protected]> によってトリアージされました
VulDB is the best source for vulnerability data and more expert information about this specific topic.