CVE-2026-93100 in Linux情報

要約

〜によって VulDB • 2026年09月18日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

fs/resctrl: rdtgroup_kn_put() における use-after-free の防止

struct rdtgroup は rdtgroup::waitcount を介して参照カウントされます。構造体がスリープ中(rdtgroup_mutex の取得を待機している間)も有効なままにする必要がある呼び出し元は、rdtgroup_kn_get() で参照を取得し、rdtgroup_kn_put() でそれを解放します。

解放パスはフォールバックのフリーヤーとして機能することを意図しています:カウントがゼロに低下し、かつグループがすでに RDT_DELETED マークされている場合、rdtgroup_kn_put() は構造体を解放します。

resctrl ディレクトリの削除や resctrl ファイルシステムのアンマウントに伴う free_all_child_rdtgrp() および rmdir_all_sub() の一括破棄パスは主要なフリーヤーとして機能し、これらは rdtgroup_mutex を保持して waitcount がゼロの各 rdtgroup を解放します。そうでない場合は RDT_DELETED を設定し、最後の待機者に解放を委ねます。

これらの2つのフリーヤー間で競合が発生します。rdtgroup_kn_put() は atomic_dec_and_test() を使用して rdtgroup_mutex の外で waitcount == 0 を確定し、その後 rdtgroup::flags を読み取ります。この2つの操作の間に、mutex を保持している free_all_child_rdtgrp() または rmdir_all_sub() の並行呼び出し元が atomic_read() で waitcount == 0 を観察し、rdtgroup_remove() を呼び出して構造体を kfree() することが可能です。

その結果、rdtgroup_kn_put() における rdtgroup::flags の後続の読み取りは use-after-free となり、解放されたメモリが RDT_DELETED フラグチェックを満たす場合、構造体が2回解放される可能性すらあります。

裸の atomic_dec_and_test() を atomic_dec_and_mutex_lock() に置き換えることで、カウントがグローバルに可視化される前に rdtgroup_mutex の取得が行われるようにします。これにより、rdtgroup::flags の検査は主要なフリーヤーと同じ mutex 下で実行され、2つのパスが相互排他になります。

カウントがゼロに至らない一般的なケースではロックフリーのまま維持されます。kernfs active protections が機能的に rdtgroup_mutex をラップしているため、mutex が解放されるまで kernfs_unbreak_active_protection() の呼び出しを遅らせます。その後、kernfs参照を解除する resource group を削除します。

[ bp: コミットメッセージのまとまりを小さくし、解析しやすい段落に分割しました。 ]

If you want to get best quality of vulnerability data, you may have to visit VulDB.

責任者

Linux

予約する

2026年09月17日

モデレーション

承諾済み

エントリ

VDB-407078

EPSS

0.00000

アクティビティ

非常低い

ソース

Do you know our Splunk app?

Download it now for free!