🇰🇷 한글 설명
Linux 커널의 libertas WiFi 드라이버에서 usb_tx_block() 함수가 이전 USB 전송 완료를 확인하지 않고 URB를 재제출하는 문제입니다. 빠른 펌웨어 로딩 중 활성 상태의 URB에 새 요청을 제출하면 'URB submitted while active' 경고가 발생합니다. 새 요청 제출 전 usb_kill_urb()를 호출하여 URB 완료를 강제하면 해결됩니다.
💡 쉬운 설명
WiFi 칩의 통신 채널이 정리되지 않은 상태에서 새로운 작업을 시작하려 할 때 발생하는 문제입니다. 펌웨어 업데이트 중 이전 작업이 완료될 때까지 대기해야 합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
wifi: libertas: fix WARNING in usb_tx_block
The function usb_tx_block() submits cardp->tx_urb without ensuring that
any previous transmission on this URB has completed. If a second call
occurs while the URB is still active (e.g. during rapid firmware loading),
usb_submit_urb() detects the active state and triggers a warning:
'URB submitted while active'.
Fix this by enforcing serialization: call usb_kill_urb() before
submitting the new request. This ensures the URB is idle and safe to reuse.
📍 영향받는 시스템
Linux kernel libertas USB WiFi driver (Marvell 8388, OLPC 무선 칩 등을 사용하는 시스템)
⚔️ 공격 벡터
로컬 사용자가 빠른 펌웨어 로딩 또는 USB 전송을 반복하여 URB 충돌 유발 가능
🛡️ 대응 방법
Linux 커널을 최신 버전으로 업그레이드하거나 libertas 드라이버 패치 적용
🔧 검증 코드
명령어 실행 결과 usb_kill_urb가 libertas 드라이버에 존재하면 패치된 버전, 없으면 취약한 버전입니다
grep -n 'usb_kill_urb' /lib/modules/$(uname -r)/kernel/drivers/net/wireless/libertas/usb8xxx.ko.* 2>/dev/null || strings /lib/modules/$(uname -r)/kernel/drivers/net/wireless/libertas/*.ko 2>/dev/null | grep -q usb_kill_urb && echo Found