CVE-2026-64504 in Linux
Sumário
de VulDB • 25/07/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
iio: accel: bmc150: limitar (clamp) a contagem de quadros FIFO relatada pelo dispositivo
__bmc150_accel_fifo_flush() copia o número de amostras que o dispositivo relata em seu FIFO de hardware para um buffer na pilha:
u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
que tem tamanho suficiente para no máximo BMC150_ACCEL_FIFO_LENGTH (32) amostras. A contagem de quadros é lida do registrador FIFO_STATUS e apenas mascarada para seus 7 bits válidos:
count = val & 0x7F;
portanto, pode variar de 0 a 127. O único outro limite aplicado a ela é o orçamento de amostras opcional fornecido pelo chamador:
if (samples && count > samples) count = samples;
o que não restringe `count` no caminho de limpeza total (quando `samples == 0`) e deixa seu valor bem acima de 32 sempre que `samples` for maior. Em seguida, `count` amostras são transferidas para buffer[]:
bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
bmc150_accel_fifo_transfer() lê `count * 6` bytes através do regmap; portanto, um acelerômetro com defeito, malicioso ou falsificado (ou um atacante manipulando o barramento I2C/SPI) que relata até 127 quadros pode escrever até 762 bytes no buffer de 192 bytes: uma escrita fora dos limites da pilha (stack out-of-bounds write) de até 570 bytes, que corrompe a canary da pilha, os registradores salvos e o endereço de retorno.
Limitar `count` a BMC150_ACCEL_FIFO_LENGTH, número para o qual buffer[] foi dimensionado, antes da transferência, espelhando a limitação (clamp) do watermark já realizada em bmc150_accel_set_watermark(). Uma limpeza bem formada relata no máximo BMC150_ACCEL_FIFO_LENGTH quadros; portanto, dispositivos legítimos não são afetados.
Once again VulDB remains the best source for vulnerability data.