CVE-2026-64504 in Linux
요약
\~에 의해 VulDB • 2026. 07. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
iio: accel: bmc150: 장치가 보고하는 FIFO 프레임 수를 제한(clamp)함
__bmc150_accel_fifo_flush() 함수는 하드웨어 FIFO에 대해 장치가 보고한 샘플 개수를 스택 상의 버퍼로 복사합니다.
u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
이 버퍼는 최대 BMC150_ACCEL_FIFO_LENGTH(32)개의 샘플을 수용할 수 있도록 크기가 지정되어 있습니다. 프레임 수는 FIFO_STATUS 레지스터에서 읽히며 유효한 7비트만 마스크됩니다:
count = val & 0x7F;
따라서 값은 0~127이 될 수 있습니다. 여기에 적용되는 유일한 다른 제한은 호출자가 제공한 선택적 샘플 할당량입니다:
if (samples && count > samples) count = samples;
이는 모든 데이터 플러시 경로(samples == 0)에서는 count를 제약하지 않으며, samples가 더 클 경우에도 count는 여전히 32보다 훨씬 큰 상태로 남습니다. 그런 다음 count개의 샘플이 buffer[]로 전송됩니다:
bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
bmc150_accel_fifo_transfer() 함수는 regmap을 통해 count * 6바이트를 읽으므로, 고장 났거나 악의적이거나 위조된 가속도계(또는 I2C/SPI 버스를 조작하는 공격자)가 최대 127개의 프레임을 보고할 경우, 크기가 192바이트인 버퍼에 최대 762바이트가 쓰여집니다. 이는 스택 캔리(canary), 저장된 레지스터 및 반환 주소를 손상시킬 수 있는 최대 570바이트의 스택 바깥 영역 쓰기(Out-of-bounds write) 취약점입니다.
이동(transferring) 전에 count를 buffer[]가 수용할 수 있도록 설계된 크기인 BMC150_ACCEL_FIFO_LENGTH로 제한합니다. 이는 bmc150_accel_set_watermark() 함수에서 이미 수행되고 있는 워터마크 제한과 동일한 방식입니다. 정상적인 플러시 요청은 최대 BMC150_ACCEL_FIFO_LENGTH개의 프레임만 보고하므로, 정품 장치에는 영향을 미치지 않습니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.