CVE-2026-45985
Açıklama
Linux kernel içerisinde aşağıdaki güvenlik açığı giderilmiştir: ext4: I/O gönderimi öncesinde bölme işlemi yapılırken EXT4_GET_BLOCKS_CONVERT ayarlanmasın dioread_nolock etkinleştirilmişken, EOF içi DIO ve writeback sırasında blok tahsisi yaparken, mevcut büyük bir yazılmamış extent'i bölmek için EXT4_GET_BLOCKS_PRE_IO ayarlanıyordu. Ancak, ext4_split_convert_extents() çağrılırken EXT4_GET_BLOCKS_CONVERT bayrağının da ayarlanmış olması, potansiyel olarak güncelliğini yitirmiş veri (stale data) sorunlarına yol açabiliyordu. Yazılmamış bir extent olduğunu ve ardından DIO'nun ikinci yarısını yazdığını varsayalım. [UUUUUUUUUUUUUUUU] disk üzerindeki extent U: yazılmamış extent [UUUUUUUUUUUUUUUU] extent durum ağacı |<- ->| ----> dio bu aralığı yazar İlk olarak, ext4_iomap_alloc(); ext4_map_blocks() fonksiyonunu EXT4_GET_BLOCKS_PRE_IO, EXT4_GET_BLOCKS_UNWRIT_EXT ve EXT4_GET_BLOCKS_CREATE bayrakları ayarlı şekilde çağırır. ext4_map_blocks() bu extent'i bulur ve ext4_split_convert_extents() fonksiyonunu EXT4_GET_BLOCKS_CONVERT ve yukarıdaki bayraklar ayarlı şekilde çağırır. Ardından, ext4_split_convert_extents(); ext4_split_extent() fonksiyonunu EXT4_EXT_MAY_ZEROOUT, EXT4_EXT_MARK_UNWRIT2 ve EXT4_EXT_DATA_VALID2 bayrakları ayarlı şekilde çağırır ve ikinci yarıyı EXT4_EXT_DATA_VALID2, EXT4_EXT_MARK_UNWRIT1, EXT4_EXT_MAY_ZEROOUT ve EXT4_EXT_MARK_UNWRIT2 bayraklarıyla bölmek için ext4_split_extent_at() fonksiyonunu çağırır. Ancak, geçici bir -ENOSPC eksikliği nedeniyle ext4_split_extent_at() extent ekleme işlemini gerçekleştiremez. İlk yarıyı sıfırlar ancak EXT4_EXT_DATA_VALID2 bayrağı ayarlı olduğu için disk üzerindeki tüm extent'i "yazılmış" olarak dönüştürür; fakat extent durum ağacında ikinci yarıyı "yazılmamış" olarak bırakır. [0000000000SSSSSS] veri S: güncelliğini yitirmiş veri, 0: sıfırlanmış [WWWWWWWWWWWWWWWW] disk üzerindeki extent W: yazılmış extent [WWWWWWWWWWUUUUUU] extent durum ağacı Sonuç olarak, eğer DIO veriyi diske yazamazsa, önbelleğe alınmış extent girişi kaybolduğunda ikinci yarıdaki güncelliğini yitirmiş veri açığa çıkacaktır. Bu sorun, I/O gönderilmeden önce yazılmamış bir extent bölünürken EXT4_GET_BLOCKS_CONVERT parametresinin geçirilmemesiyle, ext4_split_convert_extents() fonksiyonunun bu durum için tüm extent aralığını sıfırlaması ve tutarlılık adına extent durum ağacındaki extent'i işaretlemesiyle düzeltilmiştir.
Nasıl düzeltilir
- linux linux_kernel5.10.253, 5.15.203, 6.6.130, 6.12.77, 6.18.17, 6.19.4 ya da sonraki bir sürüm
- git.kernel.org/stable/c/2698731d25823267c29190cb578da9296a0c0d7b
- git.kernel.org/stable/c/2920ec61c98b9476781359f05b94da84e80f54d4
- git.kernel.org/stable/c/37555690f39f78ef69af347d9aff897e07445949
- git.kernel.org/stable/c/67cdb7bd7442bd3cdc6d6088bbb2df9be2fe936c
- git.kernel.org/stable/c/716e7439a5a9b18c3ff882c2f8c834b9ced1aaec
- git.kernel.org/stable/c/77e407967cd872cd75d7e4a691908e49c8e6b4d4
- git.kernel.org/stable/c/feaf2a80e78f89ee8a3464126077ba8683b62791
Etkilenen ürünler
| Ürün | Etkilenen sürümler | Düzeltildiği sürüm |
|---|---|---|
| linux linux_kernel | 3.15 ≤ v < 5.10.253, 5.11 ≤ v < 5.15.203, 5.16 ≤ v < 6.6.130, 6.7 ≤ v < 6.12.77, 6.13 ≤ v < 6.18.17, 6.19 ≤ v < 6.19.4 | 5.10.253, 5.15.203, 6.6.130, 6.12.77, 6.18.17, 6.19.4 |
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.