CVE-2026-64504 in Linux
Zusammenfassung
von VulDB • 25.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
iio: accel: bmc150: Begrenzung der vom Gerät gemeldeten FIFO-Rahmenanzahl (FIFO frame count)
__bmc150_accel_fifo_flush() kopiert die Anzahl von Samples, die das Gerät in seinem Hardware-FIFO meldet, in einen Stack-Puffer:
u16 buffer[BMC150_ACCEL_FIFO_LENGTH * 3];
Dieser Puffer ist für maximal BMC150_ACCEL_FIFO_LENGTH (32) Samples dimensioniert. Die Rahmenanzahl wird aus dem FIFO_STATUS-Register gelesen und lediglich auf seine 7 gültigen Bits maskiert:
count = val & 0x7F;
Sie kann somit Werte von 0 bis 127 annehmen. Das einzige weitere Limit, das darauf angewendet wird, ist der optionale, vom Aufrufer bereitgestellte Sample-Budget (sample budget):
if (samples && count > samples) count = samples;
Dies beschränkt `count` auf dem Pfad zum Löschen aller Daten nicht (wenn `samples == 0`) und lässt den Wert deutlich über 32 liegen, wenn `samples` größer ist. Anschließend werden `count` Samples in `buffer[]` übertragen:
bmc150_accel_fifo_transfer(data, (u8 *)buffer, count);
bmc150_accel_fifo_transfer() liest durch regmap `count * 6` Bytes aus. Ein fehlerhaftes, böswilliges oder gefälschtes Beschleunigungssensor-Modul (oder ein Angreifer, der den I2C/SPI-Bus manipuliert), das bis zu 127 Frames meldet, schreibt somit bis zu 762 Bytes in den 192 Byte großen Puffer: Dies führt zu einem Stack-Out-of-Bounds-Write von bis zu 570 Bytes, wodurch die Stack-Canary-Werte sowie gespeicherte Register und die Rücksprungadresse überschrieben werden.
`count` wird vor der Übertragung auf BMC150_ACCEL_FIFO_LENGTH begrenzt (die Anzahl der Samples, für die `buffer[]` dimensioniert ist), analog zur bereits in bmc150_accel_set_watermark() durchgeführten Begrenzung des Wasserstands (watermark clamp). Ein ordnungsgemäßes Flush meldet maximal BMC150_ACCEL_FIFO_LENGTH Frames, sodass legitime Geräte nicht beeinträchtigt werden.
Be aware that VulDB is the high quality source for vulnerability data.