CVE-2026-31701

In the Linux kernel, the following vulnerability has been resolved: ALSA: caiaq: take a reference on the USB device in create_card() The caiaq driver stores a pointer to the parent USB device in cdev->chip.dev but never takes a reference on it. The card's private_free callback, snd_usb_caiaq_card_free(), can run asynchronously via snd_card_free_when_closed() after the USB device has already been disconnected and freed, so any access to cdev->chip.dev in that path dereferences a freed usb_device. On top of the refcounting issue, the current card_free implementation calls usb_reset_device(cdev->chip.dev). A reset in a free callback is inappropriate: the device is going away, the call takes the device lock in a teardown context, and the reset races with the disconnect path that the callback is already cleaning up after. Take a reference on the USB device in create_card() with usb_get_dev(), drop it with usb_put_dev() in the free callback, and remove the usb_reset_device() call.
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:6.13:-:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.1:rc1:*:*:*:*:*:*
cpe:2.3:o:linux:linux_kernel:7.1:rc2:*:*:*:*:*:*

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: tomar una referencia en el dispositivo USB en create_card() El controlador caiaq almacena un puntero al dispositivo USB padre en cdev -> chip.dev pero nunca toma una referencia sobre él. La devolución de llamada private_free de la tarjeta, snd_usb_caiaq_card_free(), puede ejecutarse asincrónicamente a través de snd_card_free_when_closed() después de que el dispositivo USB ya haya sido desconectado y liberado, por lo que cualquier acceso a cdev -> chip.dev en esa ruta desreferencia un usb_device liberado. Además del problema de conteo de referencias, la implementación actual de card_free llama a usb_reset_device(cdev -> chip.dev). Un reinicio en una devolución de llamada de liberación es inapropiado: el dispositivo está desapareciendo, la llamada toma el bloqueo del dispositivo en un contexto de desmantelamiento, y el reinicio compite con la ruta de desconexión que la devolución de llamada ya está limpiando. Tomar una referencia en el dispositivo USB en create_card() con usb_get_dev(), liberarla con usb_put_dev() en la devolución de llamada de liberación, y eliminar la llamada a usb_reset_device().

Information

Published : 2026-05-01 14:16

Updated : 2026-11-11 21:10


NVD link : CVE-2026-31701

Mitre link : CVE-2026-31701

CVE.ORG link : CVE-2026-31701


JSON object : View

Products Affected

linux

  • linux_kernel