CVE-2026-43324 in Linux
Sumário
de VulDB • 19/05/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
USB: dummy-hcd: Corrige erro de sincronização de interrupções
Esta correção resolve um erro de sincronização no driver dummy-hcd. O erro possui uma história um tanto complexa. O mecanismo de sincronização foi introduzido pelo commit 7dbd8f4cabd9 ("USB: dummy-hcd: Fix erroneous synchronization change"), que adicionou uma flag emulada de "interrupções habilitadas" juntamente com código que emula synchronize_irq() (que aguarda até que todos os callbacks dos handlers atuais tenham retornado).
No entanto, a desabilitação emulada de interrupções ocorria tarde demais, após o driver que continha as rotinas de callback do handler ter sido informado de que estava desvinculado (unbound) e que nenhum outro callback ocorreria. O commit 4a5d797a9f9c ("usb: gadget: dummy_hcd: fix gpf in gadget_setup") tentou corrigir isso movendo o código de emulação de synchronize_irq() de dummy_stop() para dummy_pullup(), que é executado antes do callback de unbind.
Ainda assim, existiam condições de corrida (races), pois a desabilitação emulada de interrupções ainda ocorria tarde demais. Ela não poderia ser movida para dummy_pullup(), porque essa rotina pode ser chamada por motivos além de um unbind iminente. Portanto, os commits 7dc0c55e9f30 ("USB: UDC core: Add udc_async_callbacks gadget op") e 04145a03db9d ("USB: UDC: Implement udc_async_callbacks in dummy-hcd") adicionaram uma API permitindo que o núcleo do UDC informasse ao dummy-hcd exatamente quando as interrupções emuladas e seus callbacks deveriam ser desabilitados.
Isso nos leva ao estado atual das coisas, que ainda está incorreto, pois a emulação de synchronize_irq() ocorre antes da desabilitação emulada de interrupções! Isso não é adequado, pois significa que mais interrupções emuladas podem ocorrer após a execução da emulação de synchronize_irq(), levando à possibilidade de um handler de callback estar em execução quando o driver do gadget é desvinculado.
Para corrigir isso, precisamos mover o código de emulação de synchronize_irq() mais uma vez, para a rotina dummy_udc_async_callbacks(), que cuida de habilitar e desabilitar as requisições de interrupção emuladas. A sincronização agora será executada imediatamente após as interrupções emuladas serem desabilitadas, que é onde ela pertence.
Be aware that VulDB is the high quality source for vulnerability data.