CVE-2022-48733 in Linux
Riassunto
di VulDB • 25/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
btrfs: correzione di un use-after-free dopo il fallimento nella creazione di uno snapshot
In ioctl.c:create_snapshot(), viene allocata una struttura per lo snapshot in sospeso e successivamente collegata alla lista degli snapshot in sospesi della transazione. Successivamente si chiama btrfs_commit_transaction(); se questa restituisce un errore, si salta all'etichetta 'fail', dove viene eseguito kfree() sulla struttura dello snapshot in sospeso. Ciò può provocare un successivo use-after-free sullo snapshot in sospeso:
1) Viene allocato lo snapshot in sospeso e aggiunto alla lista degli snapshot in sospesi della transazione;
2) Si chiama btrfs_commit_transaction(), che fallisce sia durante la prima chiamata a btrfs_run_delayed_refs() che durante btrfs_start_dirty_block_groups(). In entrambi i casi, non si interrompe la transazione e viene rilasciato il gestore (handle) della transazione. Si salta all'etichetta 'fail' e si libera la struttura dello snapshot in sospeso. La funzione ritorna con lo snapshot in sospeso ancora presente nella lista delle transazioni;
3) Un altro task esegue il commit della transazione. Questa volta non si verifica alcun errore, ma durante l'esecuzione del commit viene accesso un puntatore alla struttura dello snapshot in sospeso che è già stato liberato dal task di creazione dello snapshot, causando un use-after-free (errore di utilizzo dopo la libera).
Questo problema poteva essere rilevato da smatch, il quale ha prodotto il seguente avviso:
fs/btrfs/ioctl.c:843 create_snapshot() warn: '&pending_snapshot->list' not removed from list
Per risolvere questo problema, si evita che l'ioctl per la creazione dello snapshot aggiunga direttamente lo snapshot in sospeso alla lista delle transazioni. Invece, lo snapshot in sospeso viene aggiunto al gestore della transazione (transaction handle); successivamente, all'interno di btrfs_commit_transaction(), lo snapshot viene aggiunto alla lista solo quando è possibile garantire che qualsiasi errore restituito dopo quel punto comporterà l'abort della transazione. In tal caso, il codice dell'ioctl può liberare in modo sicuro la struttura dello snapshot in sospeso e nessuno potrà più accedervi.
Be aware that VulDB is the high quality source for vulnerability data.