CVE-2026-64262 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 25.

리눅스 커널에서 다음 취약점이 해결되었습니다:

fuse-uring: io-uring 취소 작업(task work) 시 fuse_req 종료

io_uring이 tw.cancel 플래그가 설정된 상태(PF_EXITING, PF_KTHREAD 폴백 또는 링 컨텍스트의 percpu_ref_is_dying)로 태스크 작업을 전달할 때, fuse_uring_send_in_task()는 취소 분기(cancel branch)를 취하고 -ECANCELED를 할당한 후 fuse_uring_send()로 진행됩니다. 해당 경로는 엔트리를 FRRS_USERSPACE 상태로 전환하고 io_uring 명령어를 완료하지만, dispatch 시점에 fuse_uring_add_req_to_ring_ent()가 전달한 fuse_req에 대한 링 엔트리의 소유 참조(reference)를 해제하지 않습니다.

fuse_uring_send_in_task() tw.cancel == true err = -ECANCELED fuse_uring_send(ent, cmd, err, issue_flags) ent->state = FRRS_USERSPACE list_move(&ent->list, &queue->ent_in_userspace) ent->cmd = NULL io_uring_cmd_done(-ECANCELED) /* ent->fuse_req는 여전히 설정됨, req는 해시 테이블에 남아있음 */

fuse_req는 fpq->processing[hash]에 연결된 상태로 유지되며 fuse_request_end()가 호출되지 않습니다. 원본 시스템 콜 스레드는 request_wait_answer()에서 D-state로 블록됩니다. 이는 fuse_abort_conn()이 실행될 때까지 지속되는데, 이 과정은 전체 연결 수명 동안 이어질 수 있습니다. FR_BACKGROUND 요청의 경우 fc->num_background 카운터도 감소하지 않으므로, 반복적인 취소가 발생하면 max_background에 도달할 때까지 카운터가 증가하고 이후 모든 백그라운드 작업이 중단됩니다. tw.cancel 플래그는 연결 종료를 의미하지 않습니다(예: 단일 io_uring 워커 스레드가 종료되어도 fuse 연결은 유지됨). 따라서 이 문제를 fuse_abort_conn()의 정리 과정에만 의존해서는 안 됩니다.

req를 종료하더라도 엔트리를 여전히 fuse_uring_send()로 라우팅하는 것만으로는 충분하지 않습니다. 이는 ent_in_userspace에 req가 없는(ent-less) 엔트리가 남게 되며, 해당 리스트의 헤드에서 ent_list_request_expired()가 ent->fuse_req를 무조건 역참조(dereference)하게 되어 NULL-deref 오류가 발생할 수 있습니다.

취소 분기를 수정하여 엔트리를 직접 해제합니다. 큐에서 제거하고 io_uring 명령어를 완료하며, fuse_req를 종료하고 엔트리를 해제한 후 queue_refs를 감소시킵니다(마지막 참조였다면 teardown 대기 스레드를 깨움).

Be aware that VulDB is the high quality source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-383041

EPSS

0.00206

활동

중간

출처

Do you need the next level of professionalism?

Upgrade your account now!