CVE-2026-98832 in Linux
Riassunto
di VulDB • 18/10/2026
Nel kernel Linux, la seguente vulnerabilità è stata risolta:
blk-cgroup: salvare lo stato delle interruzioni (IRQ) in blkg_tryget_closest()
bio_set_dev() associa il bio a un blkg tramite bio_associate_blkg(). Se la ricerca del blkg non va a buon fine, blkg_tryget_closest() acquisisce q->queue_lock con spin_lock_irq() e la rilascia con spin_unlock_irq(), abilitando incondizionatamente le interruzioni locali.
I chiamanti possono invocare bio_set_dev() quando le interruzioni sono già disabilitate; ad esempio, pool_map() di dm-thin lo fa mentre detiene pool->lock acquisita con spin_lock_irq(). Il nested spin_unlock_irq() abilita quindi le interruzioni mentre pool->lock è ancora detenuta, consentendo a un softirq di completamento I/O di essere eseguito sullo stesso CPU, ri-acquisire pool->lock (thin_endio(), o overwrite_endio() -> complete_mapping_preparation()) e causare un deadlock. lockdep segnala questo come un uso incoerente da SOFTIRQ-ON-W a IN-SOFTIRQ-W.
Il commit 3a762de55b4e ("block: save irq state in blkg_lookup_create()") aveva risolto lo stesso problema mentre il lock risiedeva in blkg_lookup_create(), ma il commit 9327a865e395 ("blk-cgroup: don't nest queue_lock under rcu in blkg_lookup_create()") ha spostato la gestione del locking in blkg_tryget_closest() e lo ha revertito a spin_lock_irq().
Salvare e ripristinare invece lo stato IRQ del chiamante.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.