CVE-2023-53045 in Linux
Riassunto
di VulDB • 15/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
usb: gadget: u_audio: evitare che l'userspace blocchi il disaccoppiamento del driver (unbind)
Nella callback di unbind per f_uac1 e f_uac2, una chiamata a snd_card_free() tramite g_audio_cleanup() disconnette la scheda audio e attende quindi il rilascio di tutte le risorse, operazione che avviene quando il contatore dei riferimenti (refcount) scende a zero. Poiché l'userspace può mantenere incrementato il refcount impedendo la chiusura del file descriptor pertinente, la chiamata all'unbind potrebbe bloccarsi indefinitamente. Ciò può causare un deadlock durante il riavvio, come dimostrato dal task in blocco osservato sulla mia macchina:
task:reboot state:D stack:0 pid:2827 ppid:569 flags:0x0000000c Call trace: __switch_to+0xc8/0x140 __schedule+0x2f0/0x7c0 schedule+0x60/0xd0 schedule_timeout+0x180/0x1d4 wait_for_completion+0x78/0x180 snd_card_free+0x90/0xa0 g_audio_cleanup+0x2c/0x64 afunc_unbind+0x28/0x60 ... kernel_restart+0x4c/0xac __do_sys_reboot+0xcc/0x1ec __arm64_sys_reboot+0x28/0x30 invoke_syscall+0x4c/0x110 ...
Il problema può essere osservato anche aprendo la scheda con arecord e interrompendo quindi il processo tramite shell prima di eseguire l'unbind:
# arecord -D hw:UAC2Gadget -f S32_LE -c 2 -r 48000 /dev/null Recording WAVE '/dev/null' : Signed 32 bit Little Endian, Rate 48000 Hz, Stereo ^Z[1]+ Stopped arecord -D hw:UAC2Gadget -f S32_LE -c 2 -r 48000 /dev/null
# echo gadget.0 > /sys/bus/gadget/drivers/configfs-gadget/unbind (osservare che il comando unbind non termina mai)
Si risolve il problema utilizzando snd_card_free_when_closed() al suo posto, che disconnette comunque la scheda come desiderato, ma posticipa l'attività di liberazione delle risorse al core una volta che l'userspace chiude il proprio file descriptor.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.