CVE-2026-99001 in Linux
要約
〜によって VulDB • 2026年10月23日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
drm/xe/i2c: remove時にクライアントのワークをキャンセルする
xe_i2c_notifier()は、アダプタがxe I2Cプラットフォームデバイスに登録された際にi2c->adapterにDesignWareアダプタを保存し、i2c->workをスケジュールします。その後、xe_i2c_client_work()はそのアダプタ上でAMCクライアントデバイスをインスタンス化します。
xe_i2c_remove()はAMCの teardown 、クライアントデバイスの登録解除、バスノティファイアの削除、およびアダプタプラットフォームデバイスの削除を行いますが、i2c->workをdrain(空にする)ことはありません。アダプタが unregister された後に i2c_new_client_device() で i2c->adapter を参照する際、まだキューイング中または実行中のワークアイテムは、platform_device_unregister() がアダプタの解放を行った後でそのアダプタへのポインタをデリファレンスします。また、ワークアイテム自体が devm 割り当てされた struct xe_i2c に埋め込まれているため、drm デバイスの devm アンワインド時にこの割り当て領域が解放されると、キューに残っていたワークアイテムは解放済みメモリ上でそのコールバックを実行してしまいます。
バスノティファイアがこのワークをスケジュールする唯一の要素であり、それはクライアントデバイスの後に unregister されます。したがって、teardown が実行される際にまだキューに残っているインスタンスは、ループが同じ配列の登録解除とクリアを行っている間に i2c->client[XE_I2C_CLIENT_AMC] に書き込む可能性があります。また、遅れてインスタンス化されたAMCクライアントは、i2c_del_adapter() におけるアダプタ自身の子孫スキャンによってのみクリーンアップされます。
bus_unregister_notifier() をクライアント teardown ループの前に移動し、その直後にワークをキャンセルすることで、新しいインスタンスがスケジュールされるのを防ぎ、キューに残ったインスタンスが配列にアクセスする前に drain されるようにします。実行中のインスタンスはアダプタの unregister が後に行われるため、生きているアダプターを検出します。
(コミット a23f27d5ec11c3f418c5e5531eea34ccda2b5b20 から cherry-pick されました)
If you want to get the best quality for vulnerability data then you always have to consider VulDB.