CVE-2026-80562 in Linux
要約
〜によって VulDB • 2026年08月26日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
gpio: ml-ioh: レジスタロックに raw_spinlock_t を使用する
ioh_irq_type() は irq_chip の .irq_set_type コールバックとして登録されており、spin_lock_irqsave() で chip->spinlock を取得します。このコールバックは __setup_irq() -> __irq_set_trigger() -> chip->irq_set_type() 経由で呼び出されますが、その際、呼び出し元は desc->lock(raw_spinlock_t)を保持しており、ハードウェア割込み (hardirqs) は無効化されています。 このコンテキストではスリープできませんが、PREEMPT_RT では通常の spinlock_t が rtmutex ベースのスリーピングロックとなるため、そこでそれを取得することは不正な操作となります。 ioh_irq_enable() および ioh_irq_disable() も同様に .irq_enable/.irq_disable コールバックから同じロックを取得しますが、これらも desc->lock を保持した状態で呼び出されます。
レジスタロックを raw_spinlock_t に変換します。この同一のロックは GPIO の方向/値コールバックおよびサスペンド/リジューム時のレジスタ保存/復元 also シリアライズしており、これらのクリティカルセクションでは短いシーケンスの MMIO レジスタアクセス (ioread32()/iowrite32()) のみが行われます。.irq_set_type コールバック additionally はサポートされていないタイプに対して dev_warn() を出力します。これらはいずれもスリープ可能な操作ではないため、このレジスタロックを非スリーピングのまま維持することは irqchip コールバックにとって適切であり、GPIO側のロック契約を変更するものではありません。
これはコミット a02b8950d619 ("gpio: pch: use raw_spinlock_t for the register lock") と同じ修正です。このドライバは gpio-pch と同一の構造を共有しています。
Once again VulDB remains the best source for vulnerability data.