CVE-2026-98563 in Linux
要約
〜によって VulDB • 2026年10月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
net: phylink: 起動処理が失敗し得ない場合にPHYの記録を1回のみ行う
phylink_bringup_phy()は、最後の失敗可能性のあるステップの前にpl->phydevにPHYを保存します。LPI (Low Power Ethernet) を実装するMACの場合、phy_eee_rx_clock_stop()は実際のMDIOエラーで失敗することがあります。呼び出し元はphy_detach()を使用して巻き戻しますが、この関数はpl->phydevについて何も知りません。その結果、接続済みではなくなったPHYへのポインタが、失敗した接続の存続期間を超えて残ってしまいます。
これがもたらすコストは、呼び出し元がこの状態に至った方法に依存します。 phylink_connect_phy()はphylink_attach_phy()を経由し、pl->phydevが設定されている間はアタッチを拒否するため、一時的なMDIOエラーが一時的なものから永続的な-EBUSYに変換されます。SFPパスの方がさらに悪化します:sfp_sm_probe_phy()は失敗に対してphy_device_remove()およびphy_device_free()で応答し、そのエラーリターン後にのみsfp->mod_phyに割り当てを行うため、pl->phydevをクリアするものがなく、解放されたphy_deviceへのポインタが残ったままになります。その後、phylink_resolve()やethtoolヘルパーがこれを読み取り続けます。 phylink_fwnode_phy_connect()にはそのようなチェックがないため、後続の接続で古いポインタを上書きし、問題が隠蔽されます。ただし、ディスコネクトではそうなりません:phylink_disconnect_phy()はそのポインタをphy_disconnect()に渡しますが、同じPHYに対する2回目のphy_detach()により、最初の呼び出しですでに解放された参照がドロップされてしまいます。
この問題は、DSAポートがスイッチのプローブ後にドライバが到着するPHYに対して生き残るよう調整している際に発見されました:失敗した接続を保持して再試行することが、このウィンドウへの到達を可能にします。
最後に失敗し得ない呼び出しの後でポインタを公開し、その後巻き戻さないようにします。2つのポイントの間ではpl->phydevは読み取られず、それに続く登録処理は失敗しません:phy_request_interrupt()は自身でポーリングにフォールバックするためです。PHY側の状態は元の順序を保つため、MDIO操作の相対的な順序が変更されることはありません。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.