CVE-2026-93800
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
btrfs: napraw użycie po zwolnieniu w katalogu głównym relokacji po błędzie w wstawce_dirty_subvol()
Jeśli podczas relokacji nie uda nam się wykonać funkcji Insert_dirty_subvol(), ponieważ
btrfs_update_reloc_root() zwróciło błąd, pozostawimy root
pole reloc_root wskazujące na katalog główny reloc, który został zwolniony zamiast NULL,
skutkujące później próbą użycia po bezpłatnej lub podwójną bezpłatną próbą w trakcie
odmontuj.
Kolejność kroków jest następująca:
1) Podczas przenoszenia wywołanie btrfs_update_reloc_root() w
funkcja Insert_dirty_subvol() kończy się niepowodzeniem, więc funkcja Insert_dirty_subvol() zwraca
błąd merge_reloc_root() bez dodania katalogu głównego do listy
rc->dirty_subvol_roots;
2) Następnie merge_reloc_root() przerywa bieżącą transakcję, ponieważ
wstawka_dirty_subvol() zwróciła błąd;
3) W górę łańcucha wywołań, merge_reloc_roots() otrzymuje błąd, dodaje
reloc root dla root X na lokalną listę reloc_roots i przeskakuje do
etykieta „out”, gdzie wywołuje metodę free_reloc_roots(), aby zwolnić wszystkie reloc
root na lokalnej liście reloc_roots. Zwalnia to root reloc dla
korzeń X;
4) Przechodzimy w górę łańcucha wywołań do funkcji relocate_block_group(), która wywołuje
clean_dirty_subvols(), aby przejrzeć brudne korzenie i ustawić ich
->reloc_root na NULL, ale root X nie znajduje się w katalogu dirty_subvol_roots
list, więc jego ->reloc_root nadal wskazuje na katalog główny reloc;
5) Relokacja kończy się z błędem i przerwaniem transakcji, ale
->Pole reloc_root dla katalogu głównego X nadal wskazuje na katalog główny reloc, który miał miejsce
uwolniony w kroku 3;
6) Odmontowując fs, wywołujemy:
btrfs_free_fs_roots()
btrfs_drop_and_free_fs_root()
--> wywołuje btrfs_put_root() względem root X ->reloc_root
co nie jest NULL i wskazuje na już uwolniony
reloc root w kroku 4 powyżej
W wyniku użycia po bezpłatnej próbie podwójnej darmowej.
Syzbot zgłosił to za pomocą następującego dmesg/syslog:
[ 106.004389][ T5339] Błąd BTRFS (pętla urządzenia 0, stan A): Transakcja przerwana (błąd -5)
[ 106.014266][ T5339] BTRFS: błąd (stan A pętli urządzenia 0) w merge_reloc_root:1655: errno=-5 Błąd we/wy
[ 106.021891][ T1061] Błąd BTRFS (pętla urządzenia 0 stan A): błąd podczas zapisywania transakcji: -5
[ 106.026964][ T1061] Ostrzeżenie BTRFS (stan A pętli urządzenia 0): Pomijanie zatwierdzenia przerwanej transakcji.
[ 106.033807][ T5340] Błąd BTRFS (stan A pętli urządzenia 0): bdev /dev/loop0 errs: wr 3, rd 0, Flush 0, uszkodzony 0, gen 0
[ 106.039265][ T1061] BTRFS: błąd (stan A pętli urządzenia 0) w cleanup_transaction:2067: errno=-5 Błąd we/wy
[ 106.044382][ T5339] Informacje BTRFS (stan pętli urządzenia EA): wymuszony tylko do odczytu
[ 106.074329][ T5339] BTRFS: błąd (stan pętli urządzenia EA) w merge_reloc_roots:1887: errno=-5 Błąd we/wy
[ 106.081004][ T5356] Informacje BTRFS (stan pętli urządzenia EA): peeling: rozpoczęty na urządzeniu 1
[ 106.085611][ T5339] Informacje BTRFS (stan pętli urządzenia EA): saldo: zakończone ze statusem: -30
[ 106.089517][ T5356] Informacje o BTRFS (stan pętli urządzenia EA): peeling: nie ukończony na urządzeniu 1 ze statusem: -30
[ 106.662365][ T5338] Informacje o BTRFS (stan pętli urządzenia EA): ostatnie odmontowanie systemu plików 3a375e4e-b156-4d76-a2ad-16e198ce1409
[ 106.682946][ T5338] ==================================================================
[ 106.686574][ T5338] BŁĄD: KASAN: użycie płyty po zwolnieniu w btrfs_put_root+0x2f/0x250
[ 106.690090][ T5338] Zapisz rozmiar 4 pod adresem ffff88803f978630 za pomocą zadania syz.0.0/5338
[ 106.693173][ T5338]
[106.694279][ T5338] CPU: 0 UID: 0 PID: 5338 Comm: syz.0.0 Nieskażony syzkaller #0 PREEMPT (pełny)
[ 106.694293][ T5338] Nazwa sprzętu: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-debian-1.16.3-2 01.04.2014
[ 106.694300][ T5338] Śledzenie połączenia:
[ 106.694308][ T5338] <ZADANIE>
[ 106.694314][ T5338] dump_stack_lvl+0xe8/0x150
[ 106.694331][ T5338] print_address_description+0x55/0x1e0
[ 106.694343][ T5338] ? btrfs_put_root+0x2f/0x250
[ 106.694358][ T5338] print_report+0x58/0x70
[ 106.
---obcięty---
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org