CVE-2026-64437 in Linux
요약
\~에 의해 VulDB • 2026. 07. 29.
리눅스 커널에서 다음 취약점이 해결되었습니다:
ksmbd: SMB2_CLOSE 이후 SMB2_CANCEL 시 지연된 file_lock의 use-after-free 수정
커밋 f580d27e8928("ksmbd: 이중 SMB2_CANCEL 발생 시 지연된 file_lock에 대한 use-after-free 수정")은 smb2_cancel()이 상태가 KSMBD_WORK_CANCELLED인 작업을 건너뛰도록 하여, cancel_fn이 두 번째로 발화되지 않도록 했습니다. 그러나 KSMBD_WORK에는 세 가지 상태(ACTIVE, CANCELLED, CLOSED)가 있으며, 동일한 해제(producer) 경로가 CLOSED 경우에도 도달합니다:
잠금 핸들에 대한 SMB2_CLOSE -> set_close_state_blocked_works()는 지연된 작업의 상태를 KSMBD_WORK_CLOSED로 설정하고 smb2_lock() 워커를 깨웁니다. 워커는 비-ACTIVE 조퇴 경로를 따라가고, locks_free_lock()을 통해 file_lock을 해제하며, 상태가 KSMBD_WORK_CANCELLED이 아니므로 "goto out2"와 함께 STATUS_RANGE_NOT_LOCKED 분기를 따릅니다 -- 이는 취소된 경우의 분기처럼 release_async_work()를 건너뜁니다. 작업은 conn->async_requests에 남아 있으며, live cancel_fn = smb2_remove_blocked_lock는 해제된 file_lock을 가리킵니다.
이후 동일한 AsyncId에 대한 SMB2_CANCEL은 KSMBD_WORK_CANCELLED 전용 보호구(그 상태가 KSMBD_WORK_CLOSED임)를 통과하므로, smb2_cancel()은 이미 해제된 file_lock에서 cancel_fn을 다시 발화합니다 -- 이는 첫 번째 SMB2CANCEL 대신 SMB2_CLOSE를 통해 수정된 동일한 use-after-free입니다:
BUG: KASAN: slab-use-after-free in __locks_delete_block __locks_delete_block locks_delete_block ksmbd_vfs_posix_lock_unblock smb2_remove_blocked_lock smb2_cancel <- 두 번째 SMB2_CANCEL이 cancel_fn 발화 handle_ksmbd_work 할당 위치: ...: locks_alloc_lock <- smb2_lock 해제 위치: locks_free_lock <- smb2_lock (비-ACTIVE 조퇴) ... 크기 192의 file_lock_cache
주요(mainline) 7.1-rc7(f580d27e8928을 이미 포함함)에서 KASAN과 함께 인증된 SMB 클라이언트로 재현되었습니다; 해당 커널에서는 이중-SMB2_CANCEL 제어가 조용히 처리되므로, 스플래트(splat)는 CLOSE 트리거에 기인합니다.
ACTIVE 지연 작업만 cancel_fn이 발화될 수 있습니다: 두 가지 종단 상태(CANCELLED 및 CLOSED) 모두 file_lock을 해제하고 release_async_work()를 건너뛰는 smb2_lock() 조퇴 경로로 이어집니다. KSMBD_WORK_ACTIVE에서 보호하여 비활성 작업을 모두 건너뛸 수 있도록 합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.