🇰🇷 한글 설명
Linux 커널의 FUSE 구성 요소에서 io-uring 기능 활성화 조건에 오류가 있어 데드락(Deadlock) 상태가 발생할 수 있는 취약점입니다. FUSE 서버가 FUSE_OVER_IO_URING 플래그를 설정하지 않은 상태에서 io-uring 명령이 실행될 경우 시스템이 멈출 수 있습니다.
💡 쉬운 설명
컴퓨터의 파일 시스템을 다루는 기능 중 하나에서 설정이 제대로 확인되지 않아 시스템이 멈춰버릴 수 있는 문제입니다. 특정 조건에서 명령이 잘못 전달되면 컴퓨터가 응답하지 않는 상태가 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
fuse: Fix the condition to enable over-io-uring
The existing condition in fuse_uring_cmd() is there only to avoid
disabling io-uring for connections that already run with it, missing
was a condition to refuse any IORING_OP_URING_CMD if the
connection/channel didn't get enabled because of missing FUSE_INIT
reply flag FUSE_OVER_IO_URING. Without the reply flag the barrier in
fuse_uring_ready() doesn't work and IO could already be going on and
cause deadlock states (at a minimum one between fch->bg_lock and
queue->lock).
The change itself is trivial, but brings behavior change,
FUSE_OVER_IO_URING has to be set in the FUSE_INIT_REPLY by fuse servers
to accept any IORING_OP_URING_CMD. Libfuse does that and the only
non-libfuse implementation I found (fractal-fuse) also does it.
Qemu patches for fuse-io-uring are not merged yet, as far as I know.
Moved up is the smp_load_acquire(&fch->initialized) check, as a
fuse-server implementation might try to setup io-uring before FUSE_INIT
is processed and might have gotten -EOPNOTSUPP instead of -EAGAIN.
Also fixed is a stale comment that explains the handling of the
FUSE_OVER_IO_URING flag in early RFC versions.
If there should be a report from any library or application we
probably need to revert this commit.
📍 영향받는 시스템
Linux Kernel (FUSE 모듈 사용 시스템)
⚔️ 공격 벡터
FUSE 서버 구현체가 FUSE_OVER_IO_URING 플래그를 지원하지 않는 상태에서 특수하게 조작된 io-uring 명령을 전달하여 데드락 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.