CVE-2026-89667 in Linux
要約
〜によって VulDB • 2026年09月12日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
nfsd: filecacheにおけるshrinker/GC/fsnotifyとper-netシャットダウンの競合条件(race condition)を解消する
shrinker、GCワーカー、およびfsnotify/leaseコールバックは、rhashtableからnfsd_fileをアンハッシュし、その後 nfsd_file_dispose_list_delayed() を呼び出してそれをper-net disposeリストへ移動させることができます。もし nfsd_file_cache_shutdown_net() が並行して実行されると、そのrhashtableの走査では既にアンハッシュされたファイルを逃してしまう可能性があり、またper-net disposeリストの排水処理がファイルがキューに追加される前に実行されてしまう可能性があります。その結果、ファイルはper-netリスト上に残ったままになり、それを排水するスレッドが存在しないため、ファイル自体とその関連状態がリークします。
GCワーカーとshrinkerはLRUを走査する際に既に nfsd_gc_lock を保持していますが、元のコードでは nfsd_file_dispose_list_delayed() を呼び出す前にロックを解放していました。fsnotify/leaseパス(nfsd_file_close_inode)には同期処理が全くありませんでした。
これを以下の方法で修正します:
1. nfsd_file_gc() および nfsd_file_lru_scan() の両方で、nfsd_file_dispose_list_delayed() の呼び出しをカバーするよう nfsd_gc_lock を拡大(ワイドニング)します。 2. nfsd_file_close_inode() を nfsd_gc_lock でラップし、nfsd_file_dispose_list_delayed() のすべての3つの呼び出し元がロックを保持するようにします。 3. nfsd_file_cache_shutdown_net() において、パージ処理後に spin_lock/unlock(nfsd_gc_lock) バリアを追加し、per-netリストの排水前に進行中の disposal が完全に完了するよう保証します。
ロック内のすべての操作はノンスリーピング(rhashtableルックアップ、アトミックビット/参照カウント演算、リスト移動、svc_wake_up)であるため、spinlockが適切です。
If you want to get best quality of vulnerability data, you may have to visit VulDB.