CVE-2026-64359 in Linux
요약
\~에 의해 VulDB • 2026. 07. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
nilfs2: 범위 밖 세그먼트 번호가 포함된 CLEAN_SEGMENTS ioctl 요청 거부
Syzbot는 nilfs_transaction_begin()에서 여러 작업이 nilfs2 마운트 지점에서의 chmod() 수행 중 ns_segctor_sem 읽기 잠금을 획득하기 위해 143초 이상 대기하며 차단되는hung task를 보고했습니다:
INFO: 작업 syz.0.17:5918이 143초 이상 차단되었습니다. 호출 추적(Call Trace): schedule+0x164/0x360 rwsem_down_read_slowpath+0x6d9/0x940 down_read+0x99/0x2e0 nilfs_transaction_begin+0x364/0x710 fs/nilfs2/segment.c:221 nilfs_setattr+0x124/0x2c0 fs/nilfs2/inode.c:921 notify_change+0xc1a/0xf40 chmod_common+0x273/0x4a0 do_fchmodat+0x12d/0x230
ns_segctor_sem을 보유하고 있던 작성자는 동시에 호출된 NILFS_IOCTL_CLEAN_SEGMENTS 사용자로, nilfs_sufile_updatev()에서 요소별 경고 메시지를 출력하는 동안 printk 내부에 멈춰 있었습니다:
__nilfs_msg+0x373/0x450 fs/nilfs2/super.c:78 nilfs_sufile_updatev+0x21c/0x6d0 fs/nilfs2/sufile.c:186 nilfs_sufile_freev fs/nilfs2/sufile.h:93 [인라인]
nilfs_free_segments fs/nilfs2/segment.c:1140 [인라인]
nilfs_segctor_collect_blocks fs/nilfs2/segment.c:1261 [인라인]
nilfs_segctor_do_construct+0x1f55/0x76c0 nilfs_clean_segments+0x3bd/0xa50 nilfs_ioctl_clean_segments fs/nilfs2/ioctl.c:922 [인라인]
nilfs_ioctl+0x261f/0x2780
근본 원인은 nilfs_clean_segments()가 작업을 시작하기 전에 사용자 제공 세그먼트 번호에 대한 유효성 검사가 수행되지 않았기 때문입니다. 각 segnum에 대한 범위 체크는 호출 체인 내부 깊숙이 있는 nilfs_sufile_updatev()에서 수행되며, 이는 잘못된 항목마다 nilfs_warn()를 출력하면서 여전히 segctor 잠금과 sufile mi_sem을 보유하고 있습니다. 부하 상황(여러 마운트 간 반복적인 호출로 전역 printk 경로를 포화시킴)에서는 누적된 printk 지연으로 인해 ns_segctor_sem이 충분히 긴 시간 동안 보유되어 hung_task 감시자가 트리거되고, 읽기 목적으로 ns_segctor_sem이 필요한 chmod()와 같은 동시 작업들이 차단됩니다.
해결책은 nilfs_transaction_lock()을 통해 ns_segctor_sem을 획득한 직후 nilfs_clean_segments()에서 kbufs[4]의 내용을 검증하는 것입니다. ns_nsegments를 수정할 수 있는 nilfs_ioctl_resize()에 대한 검사를 위해 ns_segctor_sem을 보유함으로써 일관된 값을 사용합니다. 범위 밖 세그먼트 번호는 어떤 세그먼트 정리 작업이 시작되기 전에 -EINVAL와 함께 거부되므로, 잘못된 항목은 nilfs_sufile_updatev() 내부의 요소별 진단 경로로 도달하지 않습니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.