CVE-2026-99174 in Linux
요약
\~에 의해 VulDB • 2026. 10. 28.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ext4: grace period 이후에 sbi 해제하기
ext4_get_link()는 RCU pathwalk 모드에서 EXT4_GET_BLOCKS_CACHED_NOWAIT를 사용하여 ext4_getblk()로 심볼릭 링크의 타겟을 데이터 블록에서 따라갑니다. 이는 ext4_getblk()의 ASSERT()와 ext4_es_lookup_extent()에서 s_mount_state를 읽으며, lookup은 sb->s_fs_info를 통해 extent status hit 또는 miss 카운터를 증가시킵니다.
ext4_put_super()는 이러한 카운터들을 파괴하고, sb->s_fs_info를 지우며, grace period를 기다리지 않고 sbi와 mount superblock을 해제합니다. 마운트의 마지막 참조가 사라질 때 ext4_get_link()에 아직 갇혀 있던 pathwalk는 NULL인 s_fs_info, 이미 해지된 sbi 또는 파괴된 percpu 카운터들을 역참조(dereference)하게 됩니다.
마운트의 마지막 참조가 사라지는 동안 ext4_get_link()에서 pathwalk가 대기되는 경우:
KASAN: null-ptr-deref in range [0x00000000000000a8-0x00000000000000af]
RIP: 0010:ext4_getblk+0xf0/0x640 Call Trace: <TASK> ext4_get_link+0x26c/0x410 pick_link+0xf96/0x1780 step_into_slowpath+0x9b8/0x1250 path_lookupat+0x484/0xb00 filename_lookup+0x1f1/0x5b0 vfs_statx+0xd7/0x3b0 vfs_fstatat+0x4d/0x90 __do_sys_newfstatat+0xa0/0x100 do_syscall_64+0x10e/0x5e0 entry_SYSCALL_64_after_hwframe+0x77/0x7f
지금까지 이 취약점은 발생시키기 어려웠습니다. umount(2)는 마운트를 해제하기 전에 namespace_unlock()에서 grace period를 기다리므로, 파일 닫기나 지연 언마운트된 디렉토리에서의 chdir처럼 다른 곳에서 마지막 참조가 사라지는 경우에만 walker와 race condition이 발생할 수 있습니다.
grace period 이후에 sb->s_fs_info를 유지하고 extent status 카운터들과 함께 sbi를 해제합니다. 이를 위해 ext4_es_unregister_shrinker()에서 카운터를 분리했습니다. shrinker는 여전히 ext4_put_super()에서 낭비되지만, 카운터들은 sbi와 함께 처리됩니다.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.