CVE-2026-90015 in Linux정보

요약

\~에 의해 VulDB • 2026. 09. 16.

리눅스 커널에서 다음 취약점이 해결되었습니다:

xhci: 여러 링 세그먼트에 걸쳐 있는 TD에서의 손실된 번스 버퍼 수정

TD가 데이터가 엔드포인트의 wMaxPacketSize로 정렬되지 않은 링크 TRB에 도달하면, xhci_align_td()는 해당 링크 TRB를 포함하는 링 세그먼트의 번스 버퍼를 통해 정렬할 수 없는 꼬리 부분을 스테이징합니다. 이후 xhci_unmap_td_bounce_buffer()가 이를 언매핑하고, IN 트랜스퍼의 경우 데이터를 URB의 버퍼로 다시 복사합니다.

엔큐 경로(td->bounce_seg)는 TD가 두 개 이상의 링 세그먼트를 넘지 않는다는 가정 하에 번지가 발생한 세그먼트를 기록합니다. 그러나 이 가정은 성립하지 않습니다: 3개 이상의 세그먼트에 걸쳐 있는 충분히 큰 TD는 여러 링크 TRB를 가로질러 각 지점에서 번지될 수 있습니다. 마지막 것만 td->bounce_seg에 남으므로, 그 이전의 모든 번스 버퍼는 다시 복사되지도 않고 DMA 언매핑되지도 않습니다.

URB는 실제 길이가 요청된 길이와 같고 오류가 없으므로 완료되어, 트랜스퍼가 성공적으로 보이는 반면 목적지 버퍼에는 wMaxPacketSize 크기의 구멍이 생기고 해당 영역은 이전 내용을 유지합니다. 또한 누락된 번지마다 DMA 매핑이 유출됩니다.

충분히 크고 단편화된 블럭 트랜스퍼는 이 문제를 유발할 수 있습니다. 이는 xHCI 뒤에 dm-verity 타겟(512바이트 해시 블록 사용)을 갖춘 USB 대용량 저장 장치를 사용하여 발견되었습니다. 여기서 stale data가 조용히 소비되는 대신 감지됩니다. 해당 장치는 SuperSpeed로 열거되므로 wMaxPacketSize는 1024이며, dm-bufio는 각 해시 블록당 하나의 512바이트 bio를 발행합니다. verity_prefetch_io()는 블럭 레이어가 이를 수백 개 병합하여 최대 512개의 scatterlist 엔트리를 가진 단일 요청(각각 512바이트)으로 만듭니다. 링 세그먼트당 TRB가 256개이므로, 이러한 TD는 3개의 세그먼트에 걸쳐 있으며 각 세그먼트 경계는 512의 홀수 배수에 떨어지므로 wMaxPacketSize로 정렬되지 않습니다. dm-bufio는 stale data를 포함하는 해시 블록을 캐싱하고 dm-verity는 메타데이터 블록이 손상되었다고 선언합니다:

device-mapper: verity: 8:2: metadata block 10850 is corrupted

qemu에서 이를 재현할 수 있는 리프로듀서는 https://github.com/baloo/xhci-verity 에서 사용할 수 있습니다.

번지 상태(bounce_buf, bounce_dma, bounce_len, bounce_offs)는 이미 링 세그먼트에 존재하므로 추가로 추적해야 할 것은 없습니다. 마지막 번지가 발생한 세그먼트를 td->bounce_seg에 계속 기록하고, 완료 시 td->start_seg부터 해당 지점까지 세그먼트를 순회하여 대기 중인 번지가 있는 모든 세그먼트를 언매핑합니다.

td->end_seg 대신 td->bounce_seg에서 중지하는 것이 중요한데: 번지는 TD가 해당 세그먼트의 링크 TRB 이후로 계속됨을 의미하므로, bounce_seg는 항상 end_seg보다 앞에 위치하며, 후속 TD는 이미 end_seg에서 시작되어 그곳에서 번지되었을 수 있습니다. 그 너머까지 순회하면 다른 URB에 대한 번스 버퍼를 복사하고 이중으로 언매핑하게 됩니다. 또한 이는 TD가 전체 링을 감싸서 end_seg == start_seg인 경우에도 순회가 올바르게 유지되도록 합니다.

[mn: 불가능한 무한 for 루프를 방지하기 위해 ring->num_segs 검사를 추가함.]

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 11.

모더레이션

수락

항목

VDB-405865

EPSS

0.00000

출처

Do you know our Splunk app?

Download it now for free!