CVE-2026-74640 in Linuxinfo

Zusammenfassung

von VulDB • 22.08.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

ALSA: FCP: Behebung eines OOB-Write (Out-of-Bounds) in fcp_meter_ctl_get()

fcp_ioctl_set_meter_map() begrenzt die vom Benutzer bereitgestellte Größe der Level-Meter-Zuordnung durch das eigene Limit des Treibers von 255.

if (map.map_size < 1 || map.map_size > 255 || map.meter_slots < 1 || map.meter_slots > 255) return -EINVAL;

und übergibt diesen Wert an fcp_add_new_ctl() als die Kanalanzahl der Steuerung, wo er als elem->channels gespeichert wird.

Jedes Lesen einer Steuerung schreibt in struct snd_ctl_elem_value, dessen Integer-Array mit long value[128] deklariert ist, sodass das Limit 128 und nicht 255 beträgt. fcp_meter_ctl_get() speichert ein 64-Bit-Wort pro Kanal in dieses Array ohne eigene Begrenzung:

for (i = 0; i < elem->channels; i++) {
int idx = private->meter_level_map[i];
int value = idx < 0 ? 0 : le32_to_cpu(resp[idx]);

ucontrol->value.integer.value[i] = value;
}

snd_ctl_elem_read_user() bedient dieses Objekt aus memdup_user(_control, sizeof(*control)), was auf LP64-Architekturen 1224 Bytes aus kmalloc-2048 beträgt. offsetof(struct snd_ctl_elem_value, value) ist 72, daher wird Element i bei Byte 72 + 8 * i geschrieben, und Element 144 landet bereits außerhalb der Zuweisung. Bei map_size = 255 endet die letzte Speicherung bei Byte 2112, also 888 Bytes jenseits des Objekts und 64 Bytes in das benachbarte Slab-Objekt hinein. Die gespeicherten Wörter stammen vom Gerät, und meter_level_map[] wählt aus, welches Wort in welchen Slot gelangt, sodass sowohl Umfang als auch Inhalt kontrolliert werden können.

Der Core fängt dies nicht ab. snd_ctl_check_elem_info() wird nur von __snd_ctl_elem_info() aufgerufen, das unter CONFIG_SND_CTL_DEBUG von snd_ctl_elem_read() verwendet wird; ohne diese Option ist snd_ctl_skip_validation() eine Compile-Zeit-Wahrheit (compile-time true). __snd_ctl_add_replace() validiert kcontrol->count und überprüft niemals elem->channels.

Das Installieren einer übermäßigen Zuordnung erfordert CAP_SYS_RAWIO, aber die Steuerung lebt länger als das hwdep-Deskriptorobjekt, das sie erstellt hat, sodass die Out-of-Bounds-Schreibvorgänge von jedem Prozess ausgeführt werden können, der in der Lage ist, Steuerungen auf /dev/snd/controlC0 zu lesen.

KASAN unter 7.2.0-rc5 (arm64), ausgelöst durch einen nicht privilegierten Steuerungslesezugriff:

BUG: KASAN: slab-out-of-bounds in fcp_meter_ctl_get Write of size 8 at addr ffff000017af04c8 by task fcp_trigger/185 __asan_store8 fcp_meter_ctl_get snd_ctl_elem_read snd_ctl_ioctl Allocated by task 185: memdup_user snd_ctl_ioctl The buggy address is located 0 bytes to the right of allocated 1224-byte region [ffff000017af0000, ffff000017af04c8)

Begrenzen Sie die Zuordnungsgröße durch das ABI-Limit anstelle von 255 und begrenzen Sie die Speicher-Schleife am Zielort (sink), damit sie nicht über das value-Array hinausläuft, unabhängig davon, was elem->channels enthält.

Entdeckt von XBOW, triagiert von Baul Lee <[email protected]>

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Zuständig

Linux

Reservieren

15.08.2026

Veröffentlichung

22.08.2026

Moderieren

akzeptiert

Eintrag

VDB-394407

CPE

bereit

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Want to stay up to date on a daily basis?

Enable the mail alert feature now!