CVE-2026-90206 in Linux
要約
〜によって VulDB • 2026年09月18日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
nvmet: configfsとコントローラ割り当ての間の最大キューID (max_qid) の競合状態を修正
関数 `nvmet_subsys_attr_qid_max_store()` は、サブシステムの max_qid 制限が変更される際に、`nvmet_alloc_ctrl()` と競合する可能性があります。
例えば、現在 max_qid が 64 であると仮定します。もし `nvmet_alloc_ctrl()` が以下を実行した場合: ctrl->sqs = kzalloc_objs(struct nvmet_sq *, subsys->max_qid + 1); そしてちょうどその瞬間に、ユーザー空間のプロセスが max_qid を 128 に変更すると、`nvmet_subsys_attr_qid_max_store()` は新しい max_qid の値を設定します。これは再接続を強制するためにアクティブなコントローラを削除しようとしますが、新しいコントローラはまだ subsys->ctrls リストに追加されていないため、削除されません。
その後 `nvmet_alloc_ctrl()` が続き、新しいコントローラを subsys->ctrls リストに追加します。後ほど `nvmet_install_queue()` が呼び出されると、max_qid は 128 に設定されているものの、sqs のために割り当てられたメモリは 64 エントリ分しかありません。これにより KASAN (Kernel Address Sanitizer) による境界外アクセス警告が発生し、潜在的なメモリの破損を引き起こします。
この問題を修正するために、`nvmet_alloc_ctrl()` 内のキューの割り当てとリストへの挿入を `down_read(&nvmet_config_sem)` で保護します。`nvmet_subsys_attr_qid_max_store()` は属性を変更する際に `down_write(&nvmet_config_sem)` を取得するため、これによりコントローラ作成中に configfs の書き込み側が max_qid を変更することを安全に防止できます。
サブシステムの max_qid を割り当て時にコントローラの構造体にコピーします。ctrl->max_qid はコントローラが LIVE 状態である限り変化しないため、同様の競合状態を回避することができます。
If you want to get best quality of vulnerability data, you may have to visit VulDB.