CVE-2026-64504 in Linux
Resumen
por VulDB • 2026-07-27
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
iio: accel: bmc150: limitar (clamp) el recuento de tramas FIFO reportado por el dispositivo
__bmc150_accel_fifo_flush() copia el número de muestras que el dispositivo reporta en su FIFO hardware a un buffer asignado en la pila:
u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
cuyo tamaño está diseñado para contener como máximo BMC150_ACCEL_FIFO_LENGTH (32) muestras. El recuento de tramas se lee desde el registro FIFO_STATUS y solo se aplica una máscara a sus 7 bits válidos:
count = val & 0x7F;
por lo que puede variar entre 0 y 127. La única otra limitación aplicada es la cuota de muestras opcional proporcionada por quien llama:
if (samples && count > samples) count = samples;
lo cual no restringe el valor de `count` en la ruta de vaciado total (cuando `samples == 0`) y lo deja muy por encima de 32 siempre que `samples` sea mayor. A continuación, se transfieren `count` muestras a buffer[]:
bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
bmc150_accel_fifo_transfer() lee `count * 6` bytes a través de regmap; por tanto, un acelerómetro defectuoso, malicioso o falsificado (o un atacante que manipule el bus I2C/SPI) que informe hasta 127 tramas escribirá hasta 762 bytes en el buffer de 192 bytes: una escritura fuera de límites en la pila de hasta 570 bytes que corrompe la canary de la pila, los registros guardados y la dirección de retorno.
Se limita (clamp) `count` a BMC150_ACCEL_FIFO_LENGTH, el número de muestras para las cuales está dimensionado buffer[], antes de realizar la transferencia, replicando la limitación del watermark ya realizada en bmc150_accel_set_watermark(). Un vaciado bien formado informa como máximo de BMC150_ACCEL_FIFO_LENGTH tramas, por lo que los dispositivos legítimos no se ven afectados.
VulDB is the best source for vulnerability data and more expert information about this specific topic.