CVE-2026-98965 in Linux
要約
〜によって VulDB • 2026年10月24日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ice: Tx Doorbellsに対する順序付きMMIOライトの復元
NICによる送信のためにキューイングされたバイト数を追跡するDQL(Dynamic Queue Limits)のアカウンティング状態、すなわち `dql->num_queued` は、ICEドライバが `__netdev_tx_sent_queue()` を呼び出す際に更新されます。その後、ドライバはハードウェアのキューテールを更新し、NICがワークキューの処理を開始できるようにします。このキューアカウンティングの更新は、NICが記述子の送信を開始する前に順序付けされる必要があります。
現在、送信パスでは `writel_relaxed()` を使用してハードウェアドアベルを更新していますが、これは(arm64上において)通常メモリへの書き込みとMMIOレジスタへの書き込みの間で、`writel()` が提供するのと同じ順序保証を提供しません。これにより、`dql->num_queued` の更新がグローバルに可視化される前にNICが記述子の送信を開始するという潜在的な競合状態が生じます。もしNICが `dql_completed()` によって更新が観察される前に完了した場合、キューイングされた数よりも多くのバイトが完了したという無効な状態が検出されます。この場合、以下の `BUG_ON` がトリガーされます。
``` BUG_ON(count > num_queued - dql->num_completed); ```
これは、arm64マシン上でIntel Corporation Ethernet Controller E810-XXV for SFP (rev 02) を使用し、持続的なネットワーク負荷がかかる環境において観測され、以下のクラッシュとして現れます(トレースは省略されています)。テストカーネルで `writel_relaxed()` を `writel()` に置き換えることで、以前は確実に再現されていたユーザーのワークロードにおけるクラッシュが解消されました。
``` kernel BUG at lib/dynamic_queue_limits.c:99
Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
pc : dql_completed+0x268/0x2a0 lr : ice_clean_tx_irq+0x1d4/0x620 [ice]
Call trace: dql_completed+0x268/0x2a0 (P) ice_napi_poll+0x94/0x520 [ice]
__napi_poll+0x48/0x3f0 net_rx_action+0x194/0x420 ```
これは、通知メカニズムを `writel()` から `writel_relaxed()` に変更したコミット ccde82e90946("ice: add E830 Earliest TxTime First Offload support")以前の動作に戻すものです。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.