CVE-2026-64347 in Linux
요약
\~에 의해 VulDB • 2026. 07. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
usb: gadget: composite: USB_DT_OTG 핸들러 내의 사각(dead) 빈 체크 수정
composite_setup()의 OTG 분기는 선택된 구성이 없을 경우 첫 번째 구성으로 폴백합니다:
if (cdev->config) config = cdev->config; else config = list_first_entry(&cdev->configs, struct usb_configuration, list); if (!config) goto done; ... memcpy(req->buf, config->descriptors[0], value);
list_first_entry()는 NULL을 반환하지 않습니다. 빈 리스트의 경우 해당 함수는 리스트 헤드의 container_of()를 반환합니다. 따라서 "if (!config)" 체크문은 실행되지 않는 사각(dead) 코드입니다.
cdev->configs가 비어 있을 때, config는 struct usb_composite_dev 내부의 헤드를 가리킵니다. config->descriptors[0]은 해당 오프셋에 있는 임의 데이터를 읽습니다. memcpy를 통해 그 데이터 중 최대 w_length 바이트가 응답 버퍼로 복사됩니다.
cdev->configs가 비어 있을 수 있는 경우는 두 가지입니다. 하나는 기 Gadgets unbind 시 비행 중인 제어 전송(control transfer)과의 테ardown 경쟁 조건(race condition)이고, 다른 하나는 구성을 추가하기 전에 is_otg를 설정하는 드라이버의 경우입니다. cdev->configs를 빈 상태로 유지하는 재현 코드는 이 분기에서 KASAN 오류(KASAN fault)를 유발합니다.
list_first_entry_or_null()을 사용하여 기존 체크문이 제 역할을 하도록 수정했습니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.