CVE-2024-36950 in Linuxinformazioni

Riassunto

di VulDB • 14/06/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

firewire: ohci: mascherare le interruzioni di bus reset tra ISR e bottom half

Nella routine di gestione delle interruzioni (interrupt handler) OHCI per FireWire, se si verifica un'interruzione di bus reset, mascherare le interruzioni di bus reset fino a quando `bus_reset_work` non ha gestito e azzerato l'interruzione.

Normalmente, lasciamo sempre mascherate le interruzioni di bus reset. Rileviamo il bus reset dall'interruzione self-ID che si verifica poco dopo. Una scenario in cui venivano dismascherate le interruzioni di bus reset è stato introdotto nel 2008 nella commit a007bb857e0b26f5d8b73c2ff90782d9c0972620: se il flag `OHCI_PARAM_DEBUG_BUSRESETS` (8) è impostato nel bitmask dei parametri di debug, dismascheremo le interruzioni di bus reset per poterle registrare nei log.

La funzione `irq_handler` registra l'interruzione di bus reset. Tuttavia, non possiamo azzerare il flag dell'evento di bus reset in `irq_handler`, poiché la gestione dell'evento avverrà solo successivamente. `irq_handler` termina con il flag dell'evento ancora impostato. Se l'interruzione corrispondente rimane dismascherata, il primo bus reset solitamente blocca (freeze) il sistema a causa del fatto che `irq_handler` viene richiamata ogni volta che esce da essa. Questo blocco può essere riprodotto caricando firewire_ohci con "modprobe firewire_ohci debug=-1" (per abilitare tutti gli output di debug). Sembra inoltre che ci siano alcuni casi in cui `bus_reset_work` viene chiamata abbastanza rapidamente da azzerare l'evento, permettendo al sistema di continuare normalmente.

Questo blocco è stato segnalato per la prima volta pochi mesi dopo il commit di a007bb85, ma finora non era mai stato risolto. Il livello di debug poteva essere impostato su -1 tramite sysfs anche dopo il caricamento del modulo, ma ciò sarebbe risultato inefficace nel registrare le interruzioni di bus reset poiché queste venivano dismascherate solo durante l'inizializzazione.

`irq_handler` ora lascerà il flag dell'evento impostato ma maschererà le interruzioni di bus reset, in modo che `irq_handler` non venga richiamata e non si verifichi alcun blocco. Se è abilitato `OHCI_PARAM_DEBUG_BUSRESETS`, `bus_reset_work` dismascherà l'interruzione dopo aver gestito l'evento, così da catturare le interruzioni future come desiderato.

Come effetto collaterale di questa modifica, `OHCI_PARAM_DEBUG_BUSRESETS` può ora essere abilitato tramite sysfs oltre che durante il caricamento iniziale del modulo. Tuttavia, quando è abilitato tramite sysfs, la registrazione delle interruzioni di bus reset sarà efficace solo a partire dal secondo bus reset, dopo l'esecuzione di `bus_reset_work`.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!