CVE-2025-38358

Orta

Açıklama

Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: async reclaim worker ile close_ctree() arasındaki yarış durumu düzeltildi Syzbot, fs_info durumunda BTRFS_FS_STATE_NO_DELAYED_IPUT ayarlandıktan sonra gecikmeli bir iput ekleme girişimi nedeniyle bir assertion hatası bildirmiştir: WARNING: CPU: 0 PID: 65 at fs/btrfs/inode.c:3420 btrfs_add_delayed_iput+0x2f8/0x370 fs/btrfs/inode.c:3420 Modules linked in: CPU: 0 UID: 0 PID: 65 Comm: kworker/u8:4 Not tainted 6.15.0-next-20250530-syzkaller #0 PREEMPT(full) Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025 Workqueue: btrfs-endio-write btrfs_work_helper RIP: 0010:btrfs_add_delayed_iput+0x2f8/0x370 fs/btrfs/inode.c:3420 Code: 4e ad 5d (...) RSP: 0018:ffffc9000213f780 EFLAGS: 00010293 RAX: ffffffff83c635b7 RBX: ffff888058920000 RCX: ffff88801c769e00 RDX: 0000000000000000 RSI: 0000000000000100 RDI: 0000000000000000 RBP: 0000000000000001 R08: ffff888058921b67 R09: 1ffff1100b12436c R10: dffffc0000000000 R11: ffffed100b12436d R12: 0000000000000001 R13: dffffc0000000000 R14: ffff88807d748000 R15: 0000000000000100 FS: 0000000000000000(0000) GS:ffff888125c53000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00002000000bd038 CR3: 000000006a142000 CR4: 00000000003526f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: <TASK> btrfs_put_ordered_extent+0x19f/0x470 fs/btrfs/ordered-data.c:635 btrfs_finish_one_ordered+0x11d8/0x1b10 fs/btrfs/inode.c:3312 btrfs_work_helper+0x399/0xc20 fs/btrfs/async-thread.c:312 process_one_work kernel/workqueue.c:3238 [inline] process_scheduled_works+0xae1/0x17b0 kernel/workqueue.c:3321 worker_thread+0x8a0/0xda0 kernel/workqueue.c:3402 kthread+0x70e/0x8a0 kernel/kthread.c:464 ret_from_fork+0x3fc/0x770 arch/x86/kernel/process.c:148 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245 </TASK> Bu durum, async reclaim worker ile şu şekilde gerçekleşen bir yarış durumu nedeniyle oluşabilir: 1) Async metadata reclaim worker, LONG_MAX değerinden küçük bir nr_pages argümanı ile btrfs_start_delalloc_roots() fonksiyonunu çağıran shrink_delalloc() fonksiyonuna girer ve bu da wbc->nr_to_write değeri LONG_MAX'ten küçük olduğu için yerel değişken olan 'full_flush' değerini false olarak ayarlayan start_delalloc_inodes() fonksiyonuna girer; 2) Burada, bir kökün delalloc listesinde inode X bulunur, inode X için bir referans alınır (igrab() ile) ve filemap_fdatawrite_wbc() ile bunun için writeback tetiklenir, bu da inode X için sıralı bir extent oluşturur; 3) Başka bir görevden ayırma (unmount) dizisi başlar, close_ctree() fonksiyonuna girilir ve inode X için sıralı extent'in tamamlanmasını bekleyen fs_info->endio_write_workers iş kuyruğu boşaltılır; sıralı extent'in son referansı btrfs_put_ordered_extent() ile düşürülürken, btrfs_add_delayed_iput() çağrıldığında inode'un refcount değeri 2 olduğu için inode gecikmeli iput listesine eklenmez, böylece değer 1'e düşürülür ve geri dönülür; 4) Kısa bir süre sonra close_ctree() içinde tüm gecikmeli iput'ları çalıştıran btrfs_run_delayed_iputs() çağrılır ve ardından fs_info durumunda BTRFS_FS_STATE_NO_DELAYED_IPUT ayarlanır; 5) Async reclaim worker, filemap_fdatawrite_wbc() çağrısından sonra şimdi inode X için btrfs_add_delayed_iput() çağrısı yapar ve burada fs_info durumundaki BTRFS_FS_STATE_NO_DELAYED_IPUT bayrağı ayarlı olduğu için bir assertion hatası tetiklenir. Bu sorun, BTRFS_FS_STATE_NO_DELAYED_IPUT değerinin ancak async reclaim worker'ların bitmesi beklendikten sonra, yani close_ctree() sırasında onlar için cancel_work_sync() çağrıldıktan sonra ayarlanmasıyla ve gecikmeli iput'ların, reclaim worker'lar beklendikten sonra ve bit ayarlanmadan önce çalıştırılmasıyla düzeltilmiştir. Bu yarış durumu yakın zamanda 19e60b2a95f5 ("btrfs: add extra warning if delayed iput is added when it's not allowed") commit'i ile eklenmiştir. btrfs_add_delayed_iput() üzerindeki yeni doğrulama olmasaydı...

ÖnemOrta
CVSS4.7
İstismar olasılığı—
ÜrünLinux Kernel
Yayın25 Tem 2025
İlk görülme25 Tem 2025

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.15.5 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel6.15 ≤ v < 6.15.5, 6.166.15.5

Sürümünüzü kontrol edin

Ürünü seçin ve kullandığınız sürümü yazın; sürümün etkilenen aralıkta olup olmadığını görün.

Intelligence 360 paketinde

Attack Surface Management

Alan adlarınıza bağlı varlıkları, bu varlıklarda çalışan teknolojileri ve bilinen zafiyetleri tek listede görün.

CVE-2025-38358 · Linux Kernel · Dark Radar