CVE-2026-90264
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: btrfs: OE yarışmalarını önlemek için her zaman sıralı extent'lerin beklenmesi [HATA] Syzbot, aynı aralık için çakışan OE'lerin olabileceğine dair bir hata bildirmiştir: BTRFS critical (device loop4): panic in insert_ordered_extent:264: overlapping ordered extents, existing oe file_offset 16384 num_bytes 430080 flags 0x1089, new oe file_offset 16384 num_bytes 430080 flags 0x80 (errno=-17 Object alrea[ 179.162726][ T6897] BTRFS critical (device loop4): panic in insert_ordered_extent:264: overlapping ordered extents, existing oe file_offset 16384 num_bytes 430080 flags 0x1089, new oe file_offset 16384 num_bytes 430080 flags 0x80 (errno=-17 Object already exists) ------------[ cut here ]------------ kernel BUG at fs/btrfs/ordered-data.c:264! Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/09/2026 RIP: 0010:btrfs_alloc_ordered_extent+0x943/0xad0 Call Trace: <TASK> cow_file_range+0x744/0x12a0 fallback_to_cow+0x5ea/0xa00 run_delalloc_nocow+0x110c/0x17a0 btrfs_run_delalloc_range+0xbe4/0x1c20 writepage_delalloc+0x104d/0x1ba0 btrfs_writepages+0x1667/0x28b0 do_writepages+0x338/0x560 filemap_fdatawrite_range+0x1f2/0x300 btrfs_fdatawrite_range+0x54/0xf0 btrfs_direct_write+0x6a0/0xc30 btrfs_do_write_iter+0x329/0x790 do_iter_readv_writev+0x624/0x8d0 vfs_writev+0x34c/0x990 __se_sys_pwritev2+0x17a/0x2a0 do_syscall_64+0x174/0x580 entry_SYSCALL_64_after_hwframe+0x77/0x7f </TASK> ---[ end trace 0000000000000000 ]--- [NEDEN] ff66fe666233 ("btrfs: fix incorrect buffered IO fallback for append direct writes") commit'inden itibaren, eğer doğrudan IO kısa sürede tamamlanırsa, tamponlu geri dönüş sırasında ekleme yazımlarına uyulabilmesi için isize değerini orijinal haline döndürüyoruz. Normalde, mevcut herhangi bir sıralı extent'yi beklemek için tamponlu geri yazma sırasında lock_and_cleanup_extent_if_need() fonksiyonuna güveniyoruz. Ancak bu sıralı extent bekleme işlemi yalnızca start_pos değeri isize içerisindeyse gerçekleşir. Başarısız olan doğrudan IO sırasında isize değerini geri döndürdüğümüz için herhangi bir sıralı extent beklenmeyecektir. Bu durum, doğrudan IO OE'sinin hala ağaçta olduğu, tamamlandığı ancak henüz kaldırılmadığı ve ardından tamponlu yazım için OE eklediğimiz bir yarış durumuna yol açarak yukarıdaki çökmeye neden olabilir. [ÇÖZÜM] Geri döndürülen isize durumunu yönetmek için OE bekleme işlemini koşulsuz hale getirin. Ayrıca lock_and_cleanup_extent_if_need() artık ya extent'leri kilitliyor ya da -EAGAIN döndürdüğü için, extent kilitleme yapılmayan durumları yöneten dalları kaldırın ve "_if_need" son ekini kaldırmak için yeniden adlandırın. Aşağıdaki mikro karşılaştırma, `xfs_io -f -c "pwrite 0 1m"` iş yükü ile btrfs_buffered_write() için çalışma süresi farkını göstermektedir; tüm değerler nanosaniye cinsinden ortalama çalışma süreleridir. function runtime | before | after -----------------------------------+-------------+--------------- lock_and_cleanup_extent_if_need() | 58.2 | 183.0 btrfs_buffered_write() | 2115.6 | 2973.3 btrfs_buffered_write()'ın genel çalışma süresi hala oldukça düşüktür (hala 3 mikrosaniyenin altında), ek maliyetin kabul edilebilir olduğunu söyleyebilirim. Bu sorunu çözmenin alternatif bir yolu, isize geri döndürme işleminin yapıldığı iomap_end() sırasında sıralı extent'leri beklemektir. Ancak bu çözüm, nowait gereksinimini bozacaktır; çünkü eğer bir nowait doğrudan IO kısa sürede tamamlanırsa, OE'leri koşulsuz olarak beklemek zorundayız, aksi takdirde bir sonraki ekleme tamponlu IO yine aynı sorunla karşılaşabilir. Bu nedenle bekleme maliyetini tamponlu yazmaya taşımamız gerekiyor, ancak en azından kod biraz daha düzenli hale gelmiş oldu.
Nasıl düzeltilir
- Linux Linuxfa9f6e1958bb05b8a660d9cf2b6f51dee0077290, 043b6fd9706e4335851f317352d2717ad40e6d83, de8f5cb3cb611f96909797b4b017831f5141cbbe, 58ce50b1802a446d3b26df1b9c58be1ab8913d0e, aaac9b352f7f53f5d2f7e58e612d67d2a2bf7094, ec78575dde998c21be7e0cb2503b5620f34b6255, 6.1.191, 6.6.160, 6.12.114, 6.18.52, 5.16, 7.2 ya da sonraki bir sürüm
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| Linux Linux | 10b1abc1d0c8ae25c2b9ac465515717c68ffff05 ≤ v < fa9f6e1958bb05b8a660d9cf2b6f51dee0077290, 097b159d43407b4ea0e5d14ae58a3bbfa5865a24 ≤ v < 043b6fd9706e4335851f317352d2717ad40e6d83, ccd5c23122b01de646c80485e2fadac82d1aab62 ≤ v < de8f5cb3cb611f96909797b4b017831f5141cbbe, c3a3d3986719026c85950bfa6f41a251fc46e16f ≤ v < 58ce50b1802a446d3b26df1b9c58be1ab8913d0e, ff66fe6662330226b3f486014c375538d91c44aa ≤ v < aaac9b352f7f53f5d2f7e58e612d67d2a2bf7094, ff66fe6662330226b3f486014c375538d91c44aa ≤ v < ec78575dde998c21be7e0cb2503b5620f34b6255, 4b5875cbb85dbf4d11385eb0a7a589c086d76d42, b8df7f486a4617d3096b8fa27148cfa54b1d6a8d, 6.1.178 ≤ v < 6.1.191, 6.6.145 ≤ v < 6.6.160, 6.12.97 ≤ v < 6.12.114, 6.18.40 ≤ v < 6.18.52, 5.15.212 ≤ v < 5.16, 7.1.4 ≤ v < 7.2, 7.2 | fa9f6e1958bb05b8a660d9cf2b6f51dee0077290, 043b6fd9706e4335851f317352d2717ad40e6d83, de8f5cb3cb611f96909797b4b017831f5141cbbe, 58ce50b1802a446d3b26df1b9c58be1ab8913d0e, aaac9b352f7f53f5d2f7e58e612d67d2a2bf7094, ec78575dde998c21be7e0cb2503b5620f34b6255, 6.1.191, 6.6.160, 6.12.114, 6.18.52, 5.16, 7.2 |
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.