CVE-2025-39779

Yüksək

Təsvir

Linux kernel-də aşağıdakı zəiflik aradan qaldırılmışdır: btrfs: subpage: folio təmizlənənə qədər TOWRITE teqi saxlanılmalıdır btrfs_subpage_set_writeback() funksiyası folio ilk dəfə geri yazıldıqda folio_start_writeback() funksiyasını çağırır və folio-da hələ də çirkli bloklar olsa belə, PAGECACHE_TAG_TOWRITE teqini silir. Bu, btrfs_wait_ordered_extents() tərəfindən tələb olunanlar kimi sıralama zəmanətlərini poza bilər. Sıralamanın pozulması real xətaya səbəb olur. Məsələn, zonalı quruluşda generic/464 testinin işlədilməsi aşağıdakı ASSERT xətasına yol açacaq. Bu, pozulmuş sıralama fayl ölçüsü kəsilməzdən əvvəl mövcud çirkli səhifələrin boşaldılmasına (flush) nail ola bilmədiyi üçün baş verir. assertion failed: !list_empty(&ordered->list) :: 0, in fs/btrfs/zoned.c:1899 ------------[ cut here ]------------ kernel BUG at fs/btrfs/zoned.c:1899! Oops: invalid opcode: 0000 [#1] SMP NOPTI CPU: 2 UID: 0 PID: 1906169 Comm: kworker/u130:2 Kdump: loaded Not tainted 6.16.0-rc6-BTRFS-ZNS+ #554 PREEMPT(voluntary) Hardware name: Supermicro Super Server/H12SSL-NT, BIOS 2.0 02/22/2021 Workqueue: btrfs-endio-write btrfs_work_helper [btrfs] RIP: 0010:btrfs_finish_ordered_zoned.cold+0x50/0x52 [btrfs] RSP: 0018:ffffc9002efdbd60 EFLAGS: 00010246 RAX: 000000000000004c RBX: ffff88811923c4e0 RCX: 0000000000000000 RDX: 0000000000000000 RSI: ffffffff827e38b1 RDI: 00000000ffffffff RBP: ffff88810005d000 R08: 00000000ffffdfff R09: ffffffff831051c8 R10: ffffffff83055220 R11: 0000000000000000 R12: ffff8881c2458c00 R13: ffff88811923c540 R14: ffff88811923c5e8 R15: ffff8881c1bd9680 FS: 0000000000000000(0000) GS:ffff88a04acd0000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f907c7a918c CR3: 0000000004024000 CR4: 0000000000350ef0 Call Trace: <TASK> ? srso_return_thunk+0x5/0x5f btrfs_finish_ordered_io+0x4a/0x60 [btrfs] btrfs_work_helper+0xf9/0x490 [btrfs] process_one_work+0x204/0x590 ? srso_return_thunk+0x5/0x5f worker_thread+0x1d6/0x3d0 ? __pfx_worker_thread+0x10/0x10 kthread+0x118/0x230 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x205/0x260 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1a/0x30 </TASK> WB_SYNC_NONE ilə writepages() funksiyasını çağıran A prosesini nəzərdən keçirin. Zonalı rejimdə və ya sıxılmış yazmalar üçün o, delalloc üçün bir neçə folio-nu kilidləyir və onları yazmağa başlayır. Sonuncu kilidlənmiş folio-nu X folio adlandıraq. Tutaq ki, yazı diapazonu yalnız qismən X folio-nu əhatə edir və bəzi səhifələri çirkli saxlayır. A prosesi bio qurarkən btrfs_subpage_set_writeback() funksiyasını çağırır. Bu funksiya çağırışı, ölçüsü 8K və blok ölçüsü 4K olan X folio-nun TOWRITE teqini silir. Vəziyyət belədir: 0 4K 8K |/////|/////| (bayraq: DIRTY, teq: DIRTY) <-----> A prosesi bu diapazonu yazacaq. İndi tutaq ki, B prosesi eyni zamanda WB_SYNC_ALL ilə writepages() funksiyasını çağırır. O, çirkli folio-ları PAGECACHE_TAG_TOWRITE ilə etiketləmək üçün tag_pages_for_writeback() funksiyasını çağırır. X folio hələ də çirkli olduğu üçün etiketlənir. Daha sonra B prosesi filemap_get_folios_tag() vasitəsilə etiketlənmiş folio-ları toplayır və writepages()-dən geri dönməzdən əvvəl X folio-nun yazılmasını gözləməlidir. 0 4K 8K |/////|/////| (bayraq: DIRTY, teq: DIRTY|TOWRITE) Lakin, etiketləmə və toplama arasında A prosesi btrfs_subpage_set_writeback() funksiyasını çağıra və X folio-nun TOWRITE teqini silə bilər. 0 4K 8K | |/////| (bayraq: DIRTY|WRITEBACK, teq: DIRTY) Nəticədə, B prosesi öz paketində X folio-nu görmür və onu gözləmədən geri dönür. Bu, WB_SYNC_ALL sıralama tələbinə ziddir. Bu problem, TOWRITE teqini saxlayan btrfs_subpage_set_writeback_keepwrite() funksiyasından istifadə edilərək həll edilmişdir. Artıq biz teqi yalnız folio təmizləndikdən sonra, xas əməliyyatı vasitəsilə əllə silirik.

CiddilikYüksək
CVSS7.8
İstismar ehtimalı—
MəhsulLinux Kernel
Dərc11 sen 2025
İlk görülmə11 sen 2025

Necə düzəltmək olar

Yeniləyin
  • linux linux_kernel6.12.44, 6.16.4 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
linux linux_kernel5.13 ≤ v < 6.12.44, 6.13 ≤ v < 6.16.4, 6.176.12.44, 6.16.4

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.

Intelligence 360 paketində

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.