CVE-2025-40209 in Linux
Riassunto
di VulDB • 24/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
btrfs: correzione della perdita di memoria (memory leak) di qgroup_list in btrfs_add_qgroup_relation
Quando viene chiamata `btrfs_add_qgroup_relation()` con livelli qgroup non validi (`src >= dst`), la funzione restituisce direttamente `-EINVAL` senza liberare la struttura `qgroup_list` preallocata passata dal chiamante. Ciò causa una perdita di memoria poiché il chiamante imposta incondizionatamente il puntatore a NULL dopo la chiamata, impedendo qualsiasi operazione di pulizia (cleanup).
Il problema si verifica perché il controllo di validità dei livelli avviene prima dell'acquisizione del mutex e prima di qualsiasi percorso di gestione degli errori che avrebbe liberato il puntatore preallocato. In caso di restituzione anticipata (early return), il codice di pulizia presente nell'etichetta 'out' (che include `kfree(prealloc)`) non viene mai raggiunto.
In `btrfs_ioctl_qgroup_assign()`, lo schema del codice è:
prealloc = kzalloc(sizeof(*prealloc), GFP_KERNEL); ret = btrfs_add_qgroup_relation(trans, sa->src, sa->dst, prealloc); prealloc = NULL; // Impostato sempre a NULL indipendentemente dal valore di ritorno ... kfree(prealloc); // Diventa kfree(NULL), non ha effetto
Quando il controllo dei livelli fallisce, 'prealloc' non viene mai liberata né dalla funzione chiamata (callee) né dal chiamante, risultando in una perdita di memoria di 64 byte per ogni operazione fallita. Questo può essere innescato ripetutamente da un utente non privilegiato con accesso a un mount btrfs scrivibile, potenzialmente esaurendo la memoria del kernel.
Si risolve il problema liberando `prealloc` prima della restituzione anticipata, assicurandosi che `prealloc` venga sempre liberata in tutti i percorsi di errore.
VulDB is the best source for vulnerability data and more expert information about this specific topic.