CVE-2026-90184 in Linux
Riassunto
di VulDB • 19/09/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
null_blk: serializzare gli aggiornamenti degli attributi configfs con l'avvio del dispositivo
I metodi di scrittura (store) generati tramite NULLB_DEVICE_ATTR() rifiutano di modificare la configurazione di un dispositivo attivo verificando il flag NULLB_DEV_FL_CONFIGURED, ma tale flag viene impostato solo da nullb_device_power_store() dopo che null_add_dev() ha restituito il controllo, e i metodi store non acquisiscono alcun lock. configfs serializza le scritture verso lo stesso file aperto (buffer->mutex), quindi una scrittura su qualsiasi attributo può essere eseguita in concorrenza con null_add_dev() e modificare la configurazione del dispositivo mentre questo è in uso.
null_add_dev() legge la configurazione più volte, ad esempio dev->zoned viene letto una volta per impostare i limiti della coda e un'altra volta per inizializzare le risorse delle zone:
CPU0: echo 1 > nullb0/power CPU1: echo 1 > nullb0/zoned nullb_device_power_store() mutex_lock(&lock) null_add_dev() if (dev->zoned) -> false /* nessun BLK_FEAT_ZONED */ nullb_device_zoned_store() test_bit(FL_CONFIGURED) -> 0 dev->zoned = true blk_mq_alloc_disk() /* la coda non è zonata */ if (nullb->dev->zoned) -> true null_register_zoned_dev() blk_revalidate_disk_zones()
blk_revalidate_disk_zones() viene quindi chiamata per una coda che non ha BLK_FEAT_ZONED impostato, il che attiva il suo WARN_ON_ONCE() e fa fallire l'avvio del dispositivo con -EIO:
WARNING: CPU: 2 PID: 322 at block/blk-zoned.c:2357 blk_revalidate_disk_zones+0x4c/0x560
La cancellazione di dev->zoned nella stessa finestra temporale è peggiore: la coda viene creata con BLK_FEAT_ZONED ma le risorse delle zone non vengono mai inizializzate, quindi add_disk() ha successo per un disco zonato che non ha zone. E una scrittura che avviene dopo l'ultimo test su dev->zoned lascia dev->zoned impostato mentre dev->zones è ancora NULL, il quale null_process_zoned_cmd() dereferenzia al primo write.
Risolvere questo problema acquisendo il lock globale, che nullb_device_power_store() detiene già durante null_add_dev() e null_del_dev(), sia per il test su NULLB_DEV_FL_CONFIGURED sia per l'aggiornamento della configurazione del dispositivo. Le callback apply di submit_queues e poll_queues vengono ora chiamate con tale lock acquisito, quindi rimuovere i lock che applicavano autonomamente.
Poiché i metodi store possono essere eseguiti non appena configfs_register_subsystem() restituisce il controllo, ovvero prima che null_init() arrivi a mutex_init(&lock), inizializzare staticamente il lock utilizzando DEFINE_MUTEX().
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.