CVE-2026-79978 in Zephyr
요약
\~에 의해 VulDB • 2026. 10. 24.
drivers/sensor/adi/adxl345/adxl345_stream.c의 RTIO 스트리밍 완료 콜백인 adxl345_process_fifo_samples_cb()는 보고할 FIFO 데이터 양(fifo_bytes와 buf_avail 중 최소값을 read_len으로 설정)을 rtio_sqe_rx_buf()가 실제로 반환하는 공간에 맞게 제한하지만, 이후 하드웨어 FIFO 엔트리당 6바이트의 버스 읽기 작업을 consecutive offsets에서 read_buf를 기준으로 큐에 추가합니다. 이때 경계 조건은 장치 보고 엔트리 수가 아닌 클램프 값이 아니라 장치가 보고한 엔트리 수로 결정됩니다. 할당된 버퍼가 전체 배치보다 작은 경우, 드라이버는 할당 영역 끝을 최대 186바이트까지 초과하여 작성합니다. 또한 동반 결함으로 인해 data->fifo_total_bytes가 배치 시작 시 초기화되지 않아, 중단되거나 오류가 발생한 체인이 이전의 잘못된 쓰기 오프셋을 남기면 다음 배치의 쓰기도 범위를 벗어날 수 있습니다.
짧은 버퍼는 RTIO 할당기의 예상되고 주요한 결과입니다: rtio_block_pool_alloc()은 요청된 크기를 블록 단위로 하나씩 줄여가며 연속적인 공간을 찾으며, 드라이버의 최소 요구 사항은 sizeof(struct adxl345_fifo_data) + 6바이트에 불과합니다. 메모리 풀(block granularity)이 전체 FIFO 배치(204바이트)보다 작은 모든 스트리밍 구성 — 예를 들어 fifo_wm incl에서 sensor stream <dev>가 사용하는 센서 셸의 RTIO_DEFINE_WITH_MEMPOOL(sensor_read_rtio, 8, 8, 32, 64, 6), 또는 문서에 있는 16바이트 블록 기반 스트리밍 예제 — 은 풀이 단편화되거나 소비 스레드가 뒤처질 때 이 경로를 따릅니다.
범위를 벗어난 쓰기는 공유 RTIO 블록 풀로 I2C/SPI RTIO 백엔드(많은 SoCs에서 DMA 사용)를 통해 수행되며, 인접한 활성 버퍼를 손상시키거나 풀 크기가 하나의 배치보다 작은 경우 풀 외부의 메모리를 손상시킵니다. 작성되는 바이트는 가속도계 샘플이며 목적지는 할당에 따라 결정되므로 제어 가능한 손상 원리는 없습니다: 현실적인 영향은 다른 RTIO 소비자의 데이터가 조용히 손상되거나 충돌이 발생하는 것입니다. 이를 발생시키려면 CONFIG_ADXL345_STREAM로 빌드된 인터럽트 연결 ADXL345를 갖춘 보드가 필요하며, 버퍼 풀 기아 상태가 필요합니다. 이는 공존하는 로컬 워크로드가 유발할 수 있지만 부하 시 자발적으로도 발생합니다: 이 코드에 도달하기 위한 네트워크, USB 또는 무선 경로는 없습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.