Linux 커널에서는 다음 취약점이 해결되었습니다. usb: 칩idea: udc: _ep_nuke()에서 DMA 및 SG 정리 수정 ChipIdea UDC 드라이버에서 "페이지 정렬되지 않은 sg 버퍼"가 발생할 수 있습니다. USB 장치를 연결 해제한 후 다시 연결하면 오류가 발생합니다. 활성 전송 중. 이는 _ep_nuke()가 반환하기 때문에 발생합니다. DMA 버퍼를 적절하게 매핑 해제하지 않고 가젯 계층에 대한 요청 또는 분산 수집 바운스 버퍼를 정리합니다. 근본 원인: 멀티세그먼트 도중 연결 끊김이 발생한 경우
Linux 커널에서는 다음 취약점이 해결되었습니다.
usb: 칩idea: udc: _ep_nuke()에서 DMA 및 SG 정리 수정
ChipIdea UDC 드라이버에서 "페이지 정렬되지 않은 sg 버퍼"가 발생할 수 있습니다. USB 장치를 연결 해제한 후 다시 연결하면 오류가 발생합니다. 활성 전송 중. 이는 _ep_nuke()가 반환하기 때문에 발생합니다. DMA 버퍼를 적절하게 매핑 해제하지 않고 가젯 계층에 대한 요청 또는 분산 수집 바운스 버퍼를 정리합니다.
근본 원인: 다중 세그먼트 DMA 전송 중에 연결이 끊어지면 요청의 num_mapped_sgs 필드 및 sgt.sgl 포인터는 다음과 같이 설정된 상태로 유지됩니다. 오래된 가치. 요청은 상태와 함께 가젯 드라이버로 반환됩니다. -ESHUTDOWN but still has active DMA state. 가젯 드라이버를 재사용하는 경우 다시 초기화하지 않고 다시 연결하면 이 요청이 발생합니다. 오래된 DMA 상태로 인해 _hardware_enqueue()가 DMA 매핑을 건너뛰게 됩니다(0이 아닌 항목 참조). num_mapped_sgs) 및 해제된/잘못된 DMA 주소를 사용하려고 시도합니다. 정렬 오류 및 잠재적인 메모리 손상으로 이어집니다.
_hardware_dequeue()를 통한 정상적인 완료 경로는 올바르게 호출됩니다. usb_gadget_unmap_request_by_dev() 및 sglist_do_debounce() 이전 요청을 반환합니다. _ep_nuke() 경로는 동일한 정리를 수행해야 합니다. 요청이 깨끗하고 재사용 가능한 상태로 반환되도록 합니다.
수정: 미러링할 _ep_nuke()에 DMA 매핑 해제 및 바운스 버퍼 정리를 추가합니다. the cleanup sequence in _hardware_dequeue():
이렇게 하면 엔드포인트 종료로 인해 요청이 반환될 때 they don't retain stale DMA mappings. 'false' 매개변수는 sglist_do_debounce()는 데이터를 다시 복사하는 것을 방지합니다(다음에 적합함). 전송이 중단된 종료 경로).
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 78.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 78.00 |
VPI 공식 vpi-v1 기준