CVE-2025-39738
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: btrfs: qismən silinmiş subvolume-ların yerini dəyişməyə (relocation) icazə verməyin [SƏHV] Balance əməliyyatının aşağıdakı çağırış izi ilə tranzaksiyanın ləğvinə səbəb olduğu barədə daxili hesabat mövcuddur: item 85 key (594509824 169 0) itemoff 12599 itemsize 33 extent refs 1 gen 197740 flags 2 ref#0: tree block backref root 7 item 86 key (594558976 169 0) itemoff 12566 itemsize 33 extent refs 1 gen 197522 flags 2 ref#0: tree block backref root 7 ... BTRFS error (device loop0): extent item not found for insert, bytenr 594526208 num_bytes 16384 parent 449921024 root_objectid 934 owner 1 offset 0 BTRFS error (device loop0): failed to run delayed ref for logical 594526208 num_bytes 16384 type 182 action 1 ref_mod 1: -117 ------------[ cut here ]------------ BTRFS: Transaction aborted (error -117) WARNING: CPU: 1 PID: 6963 at ../fs/btrfs/extent-tree.c:2168 btrfs_run_delayed_refs+0xfa/0x110 [btrfs] Və btrfs check extent tree ilə bağlı heç bir xəta bildirmir. [SƏBƏB] Səbəb bir qədər mürəkkəbdir, ilk növbədə, extent tree həqiqətən 594526208 üçün backref-ə malik deyil. Extent tree disklə bağlı həmin bytenr ətrafında yalnız aşağıdakı iki backref-ə malikdir: item 65 key (594509824 METADATA_ITEM 0) itemoff 13880 itemsize 33 refs 1 gen 197740 flags TREE_BLOCK tree block skinny level 0 (176 0x7) tree block backref root CSUM_TREE item 66 key (594558976 METADATA_ITEM 0) itemoff 13847 itemsize 33 refs 1 gen 197522 flags TREE_BLOCK tree block skinny level 0 (176 0x7) tree block backref root CSUM_TREE Lakin belə çatışmayan backref elementi disklə bağlı korlanma deyil, çünki problemli gecikmiş ref (delayed ref) 934 nömrəli subvolume-a məxsusdur və həmin subvolume silinməkdədir: item 0 key (934 ROOT_ITEM 198229) itemoff 15844 itemsize 439 generation 198229 root_dirid 256 bytenr 10741039104 byte_limit 0 bytes_used 345571328 last_snapshot 198229 flags 0x1000000000001(RDONLY) refs 0 drop_progress key (206324 EXTENT_DATA 2711650304) drop_level 2 level 2 generation_v2 198229 Və həmin problemli tree block 594526208 bu subvolume-un silinmiş diapazonunun daxilindədir. Bu, həmin bytenr üçün niyə backref elementinin olmadığını və btrfs check-in niyə heç bir xəta bildirmədiyini izah edir. Lakin bu həm də başqa bir problemi göstərir, çünki btrfs bütün yetim (orphan) subvolume təmizlənməsini oxu-yazma (read-write) mount zamanı həyata keçirir. Beləliklə, RW mount-dan sonra yarıda qalmış silinmə prosesində olan subvolume mövcud olmamalıdır və balance əməliyyatı özü də subvolume təmizlənməsinə qarşı eksklüzivdir, yəni relocate zamanı yarıda qalmış silinmə prosesində olan subvolume ile rastlaşmamalıyıq. Kök səbəb odur ki, bu subvolume üçün heç bir orphan elementi yoxdur. Əslində, təxminən 2021-ci ildən bəri eyni problemə malik 5 subvolume mövcuddur. Görünür ki, orijinal hesabatda bəzi köhnə kernellər işləyib və bu "zombi" subvolume-lara səbəb olub. Xoşbəxtlikdən, upstream commit 8d488a8c7ba2 ("btrfs: fix subvolume/snapshot deletion not triggered on mount") bu xətanı çoxdan düzəltmişdir. [TƏKMİLLƏŞDİRMƏ] Belə köhnə fayl sistemlərini təmir etmək üçün btrfs-progs təkmilləşdiriləcək. Problemin nə vaxt üzə çıxacağını (gecikmiş ref icra ediləndə) və həmin vaxt artıq tranzaksiyanı ləğv etməli olduğumuzu nəzərə alsaq, artıq çox gecdir. Bunun əvəzinə, biz burada relokasiya ağacı üçün istənilən yarıda qalmış silinmə prosesində olan subvolume-u ən erkən mərhələdə rədd edirik, beləliklə çaşaqlıqların qarşısını alırıq və oxşar xətaların debug-una sərf olunan əlavə vaxtın qarşısını alırıq.
Necə düzəltmək olar
- linux linux_kernel5.15.190, 6.1.149, 6.6.103, 6.12.43, 6.15.11, 6.16.2 və ya daha yeni versiya
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| linux linux_kernel | 5.11.1 ≤ v < 5.15.190, 5.16 ≤ v < 6.1.149, 6.2 ≤ v < 6.6.103, 6.7 ≤ v < 6.12.43, 6.13 ≤ v < 6.15.11, 6.16 ≤ v < 6.16.2, 5.11, 6.17 | 5.15.190, 6.1.149, 6.6.103, 6.12.43, 6.15.11, 6.16.2 |
| debian debian_linux | 11.0 | — |
Versiyanızı yoxlayın
Məhsulu seçin və istifadə etdiyiniz versiyanı yazın; versiyanın təsirlənən aralıqda olub-olmadığını görün.
Attack Surface Management
Domenlərinizə bağlı aktivləri, onlarda işləyən texnologiyaları və məlum zəiflikləri bir siyahıda görün.