🇰🇷 한글 설명
Linux 커널의 dwc3 USB 컨트롤러에서 EndXfer 명령 실행 후 완료를 기다리지 않아 발생하는 취약점입니다. 특정 조건에서 명령 완료 전 요청을 해제하면 SMMU 결함이 발생하여 시스템 안정성에 영향을 줄 수 있습니다.
💡 쉬운 설명
USB 장치가 명령을 처리하는 동안 기다려주지 않고 다음 단계로 넘어가버려 시스템에 오류가 발생하는 문제입니다. 이로 인해 컴퓨터의 메모리 관리 시스템에 충돌이 일어날 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
usb: dwc3: Wait unconditionally after issuing EndXfer command
Currently all controller IP/revisions except DWC3_usb3 >= 310a
wait 1ms unconditionally for ENDXFER completion when IOC is not
set. This is because DWC_usb3 controller revisions >= 3.10a
supports GUCTL2[14: Rst_actbitlater] bit which allows polling
CMDACT bit to know whether ENDXFER command is completed.
Consider a case where an IN request was queued, and parallelly
soft_disconnect was called (due to ffs_epfile_release). This
eventually calls stop_active_transfer with IOC cleared, hence
send_gadget_ep_cmd() skips waiting for CMDACT cleared during
EndXfer. For DWC3 controllers with revisions >= 310a, we don't
forcefully wait for 1ms either, and we proceed by unmapping the
requests. If ENDXFER didn't complete by this time, it leads to
SMMU faults since the controller would still be accessing those
requests.
Fix this by ensuring ENDXFER completion by adding 1ms delay in
__dwc3_stop_active_transfer() unconditionally.
📍 영향받는 시스템
DWC3 USB 컨트롤러를 사용하는 Linux 커널 기반 시스템 (DWC3_usb3 >= 310a 버전 포함)
⚔️ 공격 벡터
로컬 공격자가 USB 소프트 연결(soft_disconnect)을 유도하여 시스템 오류 및 SMMU 결함을 유발할 수 있음
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 __dwc3_stop_active_transfer()의 지연 시간을 보장해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인하십시오.