CVE-2026-31778

In the Linux kernel, the following vulnerability has been resolved: ALSA: caiaq: fix stack out-of-bounds read in init_card The loop creates a whitespace-stripped copy of the card shortname where `len < sizeof(card->id)` is used for the bounds check. Since sizeof(card->id) is 16 and the local id buffer is also 16 bytes, writing 16 non-space characters fills the entire buffer, overwriting the terminating nullbyte. When this non-null-terminated string is later passed to snd_card_set_id() -> copy_valid_id_string(), the function scans forward with `while (*nid && ...)` and reads past the end of the stack buffer, reading the contents of the stack. A USB device with a product name containing many non-ASCII, non-space characters (e.g. multibyte UTF-8) will reliably trigger this as follows: BUG: KASAN: stack-out-of-bounds in copy_valid_id_string sound/core/init.c:696 [inline] BUG: KASAN: stack-out-of-bounds in snd_card_set_id_no_lock+0x698/0x74c sound/core/init.c:718 The off-by-one has been present since commit bafeee5b1f8d ("ALSA: snd_usb_caiaq: give better shortname") from June 2009 (v2.6.31-rc1), which first introduced this whitespace-stripping loop. The original code never accounted for the null terminator when bounding the copy. Fix this by changing the loop bound to `sizeof(card->id) - 1`, ensuring at least one byte remains as the null terminator.
Configurations

Configuration 1 (hide)

OR cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:*

History

11 Nov 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta: ALSA: caiaq: corrección de lectura fuera de límites de la pila en init_card El bucle crea una copia del nombre corto de la tarjeta sin espacios en blanco donde se utiliza ’len < sizeof(card -> id)’ para la comprobación de límites. Dado que sizeof(card -> id) es 16 y el búfer de ID local también es de 16 bytes, escribir 16 caracteres que no son espacios llena todo el búfer, sobrescribiendo el byte nulo de terminación. Cuando esta cadena no terminada en nulo se pasa más tarde a snd_card_set_id() -> copy_valid_id_string(), la función escanea hacia adelante con ’while (nid && ...)’ y lee más allá del final del búfer de la pila, leyendo el contenido de la pila. Un dispositivo USB con un nombre de producto que contenga muchos caracteres no ASCII y no espaciales (por ejemplo, UTF-8 multibyte) activará esto de forma fiable de la siguiente manera: BUG: KASAN: stack-out-of-bounds in copy_valid_id_string sound/core/init.c:696 [inline] BUG: KASAN: stack-out-of-bounds in snd_card_set_id_no_lock+0x698/0x74c sound/core/init.c:718 El error de uno ha estado presente desde el commit bafeee5b1f8d (’ALSA: snd_usb_caiaq: give better shortname’) de junio de 2009 (v2.6.31-rc1), que introdujo por primera vez este bucle de eliminación de espacios en blanco. El código original nunca tuvo en cuenta el terminador nulo al limitar la copia. Solucione esto cambiando el límite del bucle a ’sizeof(card -> id) - 1’, asegurando que al menos un byte permanezca como el terminador nulo.

Information

Published : 2026-05-01 15:16

Updated : 2026-11-11 21:10


NVD link : CVE-2026-31778

Mitre link : CVE-2026-31778

CVE.ORG link : CVE-2026-31778


JSON object : View

Products Affected

linux

  • linux_kernel
CWE
CWE-125

Out-of-bounds Read