CVE-2026-99224 in Linux
要約
〜によって VulDB • 2026年11月03日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
keys: キーの説明中に型名を保護する
keyctl_describe_key()は、kasprintf()がその名前を使用し終えるまで、キー型の名前が生きている状態(参照カウントを保つ)にする必要があります。保持されたキーの参照によりキーとその説明は生存しますが、その型を提供しているモジュールはピン留めされません。名前は key->sem を保持せずに kasprintf() に渡されます。
kvasprintf() は2回のフォーマット処理で保存された名前ポインタを使用し、その間に GFP_KERNEL による割り当てが行われます。AF_RXRPC=m の場合、型が廃止される前に View アクセス権限を付与するタスクは、以下の順序で特権モジュールのアンロードと重なる可能性があります:
1. KEYCTL_DESCRIBE がキーを検索し、kasprintf() の引数に key->type->name を保存して、最初のフォーマット処理を完了します。 2. フォーマッターが2回目の処理の前に遅延している間、af_rxrpc_exit() は unregister_key_type() を呼び出し、型をレジストリから削除して key_gc_keytype() の待機に入ります。 3. コレクターは書き込み用に key->sem を取得し、保持されたキーの型を key_type_dead に再設定して廃止処理を完了します。登録解除とモジュール終了が戻り、free_module() によって型と名前が解放されます。 4. フォーマッターは2回目の処理を再開し、解放されたモジュールストレージから保存された名前を読み取りますが、これにより string() でフォールトが発生する可能性があります。
kasprintf() の間中、読み込み用に key->sem を保持します。こうすることで、両方のフォーマット処理が完了するまで、コレクターはキーの型を変更したり廃止を完了させたりできなくなります。もし廃止側が先にロックを獲得した場合、フォーマッターはコアの key_type_dead 名を使用します。kasprintf() の直後(割り当て失敗時を含む)、ユーザー空間へのコピーの前にセマフォを解放してください。
以下のような Oopsレポートが発生しました:
BUG: unable to handle page fault for address: fffffbfff8054794 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page RIP: 0010:string+0x23f/0x470 Call Trace: vsnprintf+0x330/0x1110
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.