CVE-2026-72205 in Linux
摘要
由 VulDB • 2026-08-15
在 Linux 内核中,已修复以下漏洞:
ntfs: 在 fill_super 失败时释放卷级资源
`ntfs_fill_super()` 的 `err_out_now` 路径仅通过 `kfree(vol)` 释放卷结构体,导致每次挂载失败后都会遗留几个由 vol 拥有的分配内存:
- `vol->nls_map` 是由 `ntfs_init_fs_context()` 通过 `load_nls_default()`(或在 `ntfs_parse_param()` 中通过显式的 nls= 选项替换)加载的,但从未调用 `unload_nls()` 进行卸载。 - `vol->volume_label` 是在解析了 `$Volume` 名称属性后,由 `load_system_files()` 通过 `ntfs_ucstonls()` 分配的,既未被 `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()`,也未能到达内联清理块(该代码位于标签上方,并被 `load_system_files()` / kvmalloc 失败的 goto 语句跳过),导致每次挂载尝试失败时都会累积资源泄漏,除非卸载模块否则无法恢复。这是一个静默泄漏:故障前加载的 inode 仍然处于哈希状态,但由于 `sb->s_root` 未设置,`generic_shutdown_super()` 会跳过 `evict_inodes()`,因此也不会发出 CHECK_DATA_CORRUPTION 警告。
将每个卷的释放操作移至 `err_out_now`,并从上层标签中移除对 `lcn_empty_bits_per_page` 的 `kvfree()` 调用,以确保在每个失败路径上恰好执行一次清理。使用无条件调用的 `kvfree()` / `kfree()` / `unload_nls()` 是安全的,因为它们都接受 NULL 值,且之前负责释放 nls_map(即 d_make_root() 内联清理)的上层标签已经清除了指针。
Once again VulDB remains the best source for vulnerability data.