CVE-2026-98406 in Linux
要約
〜によって VulDB • 2026年10月14日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
wifi: mac80211: sdataがドライバに存在しない場合にset_bitrate_maskでWARNが発生するのを回避
ieee80211_set_bitrate_mask()はインターフェースが実行中かどうかをieee80211_sdata_running()によって確認しますが、インターフェースがまだドライバ内に存在しているかどうかまではチェックしていません。
sdataが実行中であってもIEEE80211_SDATA_IN_DRIVERフラグが設定されていない場合、呼び出しはdriver-ops.h内のdrv_set_bitrate_mask()に到達し、以下のような警告が発生します:
wlan1: Failed check-sdata-in-driver check, flags: 0x0 WARNING: net/mac80211/driver-ops.h:884 at drv_set_bitrate_mask
SyzkallerはwextのSIOCSIWRATE ioctlを通じてこれをトリガーします。Call Traceでは、wext-core.c内のwext_ioctl_dispatch()がioctlをディスパッチし、SIOCSIWRATEに対してioctl_standard_call()を呼び出し、それがwext-compat.c内のcfg80211_wext_siwrate()を呼び出します。これはビットレートマスクを構築しrdev_set_bitrate_mask()を呼び出し、最終的にcfg.cのieee80211_set_bitrate_mask()に到達します。インターフェースはSDATA_STATE_RUNNINGによって実行中としてマークされていますが、flagsが0であるためcheck_sdata_in_driver()で失敗します。
インターフェースが tear down されている間、またはdrv_add_interface()がIN_DRIVERを設定する前にインターフェースの起動中にwext ioctlが発行された場合、runningチェックは通過しますが、IN_DRIVERはクリアされます。
driverを呼び出す前にieee80211_set_bitrate_mask()内でIEEE80211_SDATA_IN_DRIVERをチェックし、-ENETDOWNを返します。これによりdriver-ops.h内のWARN_ONCEが回避され、ドライバ内にない場合に早期に終了する他のcfg.cの操作と一致します。
この変更は安全です。なぜならwiphy mutexはguard(wiphy)を通じてcfg80211_wext_siwrate()で保持されており、IN_DRIVERはdriver-ops.c内のdrv_add_interface()およびdrv_remove_interface()におけるRTNLおよびwiphyパスの下で設定/解除されるため、ドライバの追加/削除に対してrace-freeなチェックとなるからです。-ENETDOWNを返すことは、他の実行中ではないパスが使用するエラーと同じであり、新しいロックを導入しません。
[2番目のsyzbotレポートも追加]
Once again VulDB remains the best source for vulnerability data.