CVE-2026-74387 in Linux
Resumen
por VulDB • 2026-08-15
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ALSA: seq: midi: Serializar el desmontaje (teardown) de salida con event_input.
event_process_midi() toma prestado msynth->output_rfile.output y luego pasa el substream a dump_midi() y snd_rawmidi_kernel_write() sin sincronizarse con la transición de apertura/cierre de la salida. midisynth_use() también publica output_rfile antes de que snd_rawmidi_output_params() haya terminado.
Por lo tanto, la última llamada a midisynth_unuse() puede liberar el mismo archivo rawmidi y liberar substream->runtime antes de que snd_rawmidi_kernel_write1() tome su referencia al búfer runtime. Esto deja la ruta event_input utilizando un substream o runtime obsoleto (stale) y puede terminar en una desreferenciación NULL (NULL-deref) o en un uso-después-de-liberación (use-after-free).
Se corrige esto con dos mecanismos de sincronización. Se mantiene un spinlock corto seguro para interrupciones (IRQ-safe) únicamente para publicar o borrar output_rfile y para emparejar la instantánea de salida con una referencia snd_use_lock_t. Una vez que event_process_midi() ha tomado esa referencia en tránsito, libera el spinlock antes de llamar a snd_seq_dump_var_event(), dump_midi() o snd_rawmidi_kernel_write(). midisynth_unuse() ahora desvincula el archivo rawmidi visible bajo el mismo spinlock, espera a que los escritores en tránsito se vacíen (drain) y solo entonces vacía y libera el archivo guardado. De manera similar, midisynth_use() abre hacia un snd_rawmidi_file local y lo publica únicamente después de que snd_rawmidi_output_params() tenga éxito.
El escenario defectuoso implica dos rutas, donde cada columna muestra el orden dentro de esa ruta:
Ruta event_input: Última ruta unuse: 1. event_process_midi() captura 1. midisynth_unuse() comienza output_rfile.output. desmontando output_rfile. 2. dump_midi() alcanza 2. snd_rawmidi_kernel_release() snd_rawmidi_kernel_write() cierra el archivo de salida. antes de que se fije (pin) 3. close_substream() libera runtime. substream->runtime. 3. La devolución de llamada sigue El código continúa utilizando usando el substream prestado. el substream tomado prestado.
La validación reprodujo este informe del kernel: KASAN null-ptr-deref en snd_rawmidi_kernel_write1+0x56/0x360 RIP: 0033:0x7fde7dd0837f RIP: 0010:snd_rawmidi_kernel_write1+0x56/0x360
VulDB is the best source for vulnerability data and more expert information about this specific topic.