CVE-2024-26726
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: yazma hatası durumunda boş alan inode'u için extent_map'i bırakmayın İlgisiz bir değişiklik için CI çalıştırırken, btrfs_holes_spacecache üzerinde generic/648 ile aşağıdaki panikle karşılaşıldı. assertion failed: block_start != EXTENT_MAP_HOLE, in fs/btrfs/extent_io.c:1385 ------------[ cut here ]------------ kernel BUG at fs/btrfs/extent_io.c:1385! invalid opcode: 0000 [#1] PREEMPT SMP NOPTI CPU: 1 PID: 2695096 Comm: fsstress Kdump: loaded Tainted: G W 6.8.0-rc2+ #1 RIP: 0010:__extent_writepage_io.constprop.0+0x4c1/0x5c0 Call Trace: <TASK> extent_write_cache_pages+0x2ac/0x8f0 extent_writepages+0x87/0x110 do_writepages+0xd5/0x1f0 filemap_fdatawrite_wbc+0x63/0x90 __filemap_fdatawrite_range+0x5c/0x80 btrfs_fdatawrite_range+0x1f/0x50 btrfs_write_out_cache+0x507/0x560 btrfs_write_dirty_block_groups+0x32a/0x420 commit_cowonly_roots+0x21b/0x290 btrfs_commit_transaction+0x813/0x1360 btrfs_sync_file+0x51a/0x640 __x64_sys_fdatasync+0x52/0x90 do_syscall_64+0x9c/0x190 entry_SYSCALL_64_after_hwframe+0x6e/0x76 Bu durum, bir örnekte boş alan önbelleğini dışarı yazmayı başaramadığımızda ve tekrar dönüp yeniden yazmaya çalıştığımızda meydana gelir. Ancak ikinci geçişte, extent eşlemesini almak için inode üzerinde btrfs_get_extent() fonksiyonunu çağırmaya gideriz. Bu yeni bir blok grubu olduğu için ve boş alan inode'u ile ağaçla kilitlenmeyi (deadlock) önlemek adına her zaman commit kökünü aradığımızdan, hiçbir şey bulamayız ve istenen aralık için EXTENT_MAP_HOLE döndürürüz. Bunun nedeni, alan önbelleğini ilk kez dışarı yazmaya çalıştığımızda bir hata almamız ve hata durumunda extent eşlemesinin bırakılmasıdır. Normal dosyalar için bu durum normaldir ancak boş alan önbelleği inode'u özeldir. Extent haritasının her zaman doğru olmasını bekleriz. Bu nedenle, ikinci geçişte hatalı bir extent haritasıyla karşılaşırız. Bu özellik kullanımdan kaldırıldığı için bunu düzeltmenin en basit yolu, başarısız olan bu aralık için extent harita aralığının bırakılmasını basitçe atlamaktır. Yeniden üretilmesini kolaylaştırmak için hata enjeksiyonu kullanarak ilgili alanı zorlayan testi kısalttım. Bu yama uygulandığında, hata enjeksiyonu testimde artık panik oluşmamaktadır.
Nasıl düzeltilir
- linux linux_kernel6.1.79, 6.6.18, 6.7.6 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | v < 6.1.79, 6.2 ≤ v < 6.6.18, 6.7 ≤ v < 6.7.6, 6.8 | 6.1.79, 6.6.18, 6.7.6 |
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.
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.