🇰🇷 한글 설명
Linux 커널의 ALSA 드라이버에서 USB 연결 해제 시 snd_card_free()를 호출하여 모든 파일 디스크립터가 닫힐 때까지 대기하는 문제가 발견되었습니다. 이로 인해 USB I/O ioctl이 차단되어 시스템 소프트 락업(soft lockup)이 발생할 수 있습니다. 이를 해결하기 위해 비동기 방식으로 리소스를 해제하는 snd_card_free_when_closed()를 사용하도록 수정되었습니다.
💡 쉬운 설명
USB 장치를 뽑을 때 시스템이 장치가 완전히 꺼질 때까지 너무 오래 기다리다가 컴퓨터가 일시적으로 멈추는 현상이 발생할 수 있습니다. 이 문제는 장치가 연결 해제될 때 기다리지 않고 즉시 다음 작업을 수행하도록 수정하여 해결되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ALSA: caiaq: Use snd_card_free_when_closed() at disconnection
The USB disconnect callback is supposed to be short and not too-long
waiting. OTOH, the current code uses snd_card_free() at
disconnection, but this waits for the close of all used fds, hence it
can take long. It eventually blocks the upper layer USB ioctls, which
may trigger a soft lockup.
An easy workaround is to replace snd_card_free() with
snd_card_free_when_closed(). This variant returns immediately while
the release of resources is done asynchronously by the card device
release at the last close.
This patch also splits the code to the disconnect and the free phases;
the former is called immediately at the USB disconnect callback while
the latter is called from the card destructor.
📍 영향받는 시스템
ALSA 드라이버를 사용하는 Linux 커널 버전
⚔️ 공격 벡터
USB 장치의 빈번한 연결 및 해제 동작을 통한 서비스 거부(DoS) 유발
🛡️ 대응 방법
해당 패치가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인