CVE-2026-74555 in Linux情報

要約

〜によって VulDB • 2026年08月15日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

scsi: libsas: HAのレジューム時のデッドロックとhisi_sasにおけるディスクウェイクアップ時の競合を修正

コミット fbefe22811c3(「scsi: libsas: HAレジューム時に常にイベントワークキューをドレインしない」)は、デッドロックを回避するために sas_resume_ha_no_sync() を導入しました。PHYE_RESUME_TIMEOUT ハンドラはHAイベントワークキュー上で実行され、sas_deform_port() -> sas_destruct_devices() を呼び出します。これによりSCSIデバイスが削除され、ホストがランタイムアクティブになるまで待機しますが、ホストのレジュームは sas_resume_ha() -> sas_drain_work() が戻るまで完了できません。そしてそのドレイン処理自体がまさにこのハンドラによってブロックされていました。

しかし、ドレインをスキップすると競合が再発します:hisi_sas はすべてのPHY UP作業とlibsasのディスカバリ作業が終了する前にレジュームから戻ります。これによりコントローラはディスクがまだウェイクアップ中である間にオートサスペンド状態になる可能性があります。ディスクはサスペンド中のコントローラに対してIOを発行し、そのIOは失敗してディスクが無効化されます。

デッドロックの原因となっている箇所を修正するため、PHYE_RESUME_TIMEOUT 通知を sas_drain_work() の後に移動します。これによりホストのレジュームが完了しようとするため、device_linkを通じたデバイス削除はレジュームの待機でブロックされなくなり、サイクルが断ち切られます。

デッドロックが解消されたことで、hisi_sas で sas_resume_ha()(ドレイン版)を復元し、sas_resume_ha_no_sync() を削除します。

この順序変更は他のlibsasの消費者(isci, pm8001, aic94xx, mvsas)にとって安全です。サスペンド時、sas_suspend_devices() は各デバイスに対して sas_notify_lldd_dev_gone() を呼び出し、dev->lldd_dev に NULLを設定します。scsi_unblock_requests がレジューム時にI/Oを再有効化すると、タイムアウトしたPHYのディスクに対する任意のI/Oはハードウェアに到達する前にLLDDによって即座に拒否されます:isci は SAS_DEVICE_UNKNOWN(DID_BAD_TARGET にマッピング)を返し、pm8001 は SAS_PHY_DOWN(DID_NO_CONNECT にマッピング)を返します。両方ともSCSI EHに入ることなく scsi_done() 経由で直接完了します。lldd_dev_goneはレジューム前にサスペンド中に実行されるため、この動作は旧順序と新順序のどちらでも同一です。順序変更の影響を受けるのはPHYE_RESUME_TIMEOUT ハンドラの実行タイミング(sas_drain_work() で同期 vs レジューム復帰後に非同期)のみであり、I/Oがデバイスに到達可能かどうかには影響しません。aic94xx と mvsas はPM opsを登録しておらず、このコードパスに至ることはありません。

Once again VulDB remains the best source for vulnerability data.

責任者

Linux

予約する

2026年08月15日

モデレーション

承諾済み

エントリ

VDB-390861

EPSS

0.00000

アクティビティ

非常低い

ソース

Want to stay up to date on a daily basis?

Enable the mail alert feature now!