CVE-2026-72205 in Linux
要約
〜によって VulDB • 2026年08月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
ntfs: fill_super 失敗時にボリューム全体のリソースを解放する
ntfs_fill_super() の err_out_now パスは kfree(vol) を通じて volume struct のみを解放しており、マウントのたびに vol が所有するいくつかのアロケーションがリークしたままになっています。具体的には以下の通りです:
- ntfs_init_fs_context() によって load_nls_default() (または ntfs_parse_param() で明示的な nls= オプションを使用して置き換えられた場合) を通じて読み込まれる vol->nls_map は、unload_nls() が呼び出されません。 - $Volume の名前属性が解析された後に load_system_files() によって ntfs_ucstonls() を介して割り当てられる vol->volume_label は、load_system_files() 自身のエラーラベルや d_make_root() 失敗時のみ実行される fill_super() のインラインクリーンアップによって解放されません。load_system_files() 内のその後のあらゆる失敗でこれがリークします。 - vol->lcn_empty_bits_per_page は unl_upcase_iput_tmp_ino_err_out_now で kvfree() されていますが、ポインタはクリアされていないため、単一の共通のクリーンアップ処理に統合できませんでした。
障害発生時のパスでは ntfs_volume_free() が呼び出されず、d_make_root() のインラインクリーンアップブロックにも到達しない(このブロックはラベルの上にあり、load_system_files() や kvmalloc 失敗時の goto でスキップされる)ため、これらのリソースはマウントの各失敗試行ごとに蓄積し、モジュールをアンロードしない限り回復の見込みがありません。これはサイレントリークです:障害発生前に読み込まれた inodes はハッシュされたまま残りますが、generic_shutdown_super() は sb->s_root が未設定の場合に evict_inodes() をスキップするため、CHECK_DATA_CORRUPTION 警告も出力されません。
各ボリュームの解放処理を err_out_now に移動し、上部ラベルからの lcn_empty_bits_per_page の kvfree() を削除することで、障害発生時のすべてのパスでクリーンアップが正確に1回実行されるようにします。無条件での kvfree()/kfree()/unload_nls() の使用は安全です。これらはすべて NULL を受け入れ可能であり、以前 nls_map を解放していた上部ラベル(d_make_root() のインラインクリーンアップ)ではすでにポインタがクリアされているためです。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.