CVE-2026-45985
Təsvir
Linux kernel-də aşağıdakı zəiflik aradan qaldırılıb: ext4: I/O göndərmədən əvvəl bölmə zamanı EXT4_GET_BLOCKS_CONVERT təyin etməyin dioread_nolock aktiv olduqda, within-EOF DIO və writeback zamanı bloklar ayrılarkən, mövcud böyük yazılmamış extent-i bölmək üçün EXT4_GET_BLOCKS_PRE_IO təyin edilirdi. Lakin, ext4_split_convert_extents() çağırılanda EXT4_GET_BLOCKS_CONVERT təyin olunurdu ki, bu da potensial olaraq köhnəlmiş məlumat (stale data) problemlərinə səbəb ola bilərdi. Tutaq ki, bizdə yazılmamış bir extent var və sonra DIO onun ikinci yarısını yazır. [UUUUUUUUUUUUUUUU] on-disk extent U: yazılmamış extent [UUUUUUUUUUUUUUUU] extent status tree |<- ->| ----> dio bu diapazonu yazır İlk növbədə, ext4_iomap_alloc() funksiyası EXT4_GET_BLOCKS_PRE_IO, EXT4_GET_BLOCKS_UNWRIT_EXT və EXT4_GET_BLOCKS_CREATE bayraqları təyin edilmiş halda ext4_map_blocks()-i çağırır. ext4_map_blocks() həmin extent-i tapır və EXT4_GET_BLOCKS_CONVERT ilə yuxarıdakı bayraqlar təyin edilmiş halda ext4_split_convert_extents()-i çağırır. Sonra, ext4_split_convert_extents() funksiyası EXT4_EXT_MAY_ZEROOUT, EXT4_EXT_MARK_UNWRIT2 və EXT4_EXT_DATA_VALID2 bayraqları təyin edilmiş halda ext4_split_extent()-i çağırır və o da ikinci yarını EXT4_EXT_DATA_VALID2, EXT4_EXT_MARK_UNWRIT1, EXT4_EXT_MAY_ZEROOUT və EXT4_EXT_MARK_UNWRIT2 bayraqları ilə bölmək üçün ext4_split_extent_at()-i çağırır. Lakin, müvəqqəti -ENOSPC çatışmazlığı səbəbindən ext4_split_extent_at() extent-i daxil edə bilmir. O, birinci yarını sıfırlayır, lakin EXT4_EXT_DATA_VALID2 bayrağı təyin edildiyi üçün bütün on-disk extent-ini yazılmış kimi çevirir, amma extent status tree-də ikinci yarını yazılmamış kimi saxlayır. [0000000000SSSSSS] data S: köhnəlmiş məlumat, 0: sıfırlanmış [WWWWWWWWWWWWWWWW] on-disk extent W: yazılmış extent [WWWWWWWWWWUUUUUU] extent status tree Nəticə etibarilə, əgər DIO məlumatı diskə yaza bilməsə, keşlənmiş extent girişi silindikdən sonra ikinci yarıdakı köhnəlmiş məlumatlar üzə çıxacaqdır. Bu problem, I/O göndərməzdən əvvəl yazılmamış extent bölünərkən EXT4_GET_BLOCKS_CONVERT ötürülməməsi ilə həll edilmişdir; həmçinin bu hal üçün ext4_split_convert_extents() funksiyasının bütün extent diapazonunu sıfırlaması və ardıcıllığı təmin etmək üçün extent status tree-də extent-i qeyd etməsi təmin edilmişdir.
Necə düzəltmək olar
- linux linux_kernel5.10.253, 5.15.203, 6.6.130, 6.12.77, 6.18.17, 6.19.4 və ya daha yeni versiya
- 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
Təsirlənən məhsullar
| Məhsul | Təsirlənən versiyalar | Düzəldildiyi versiya |
|---|---|---|
| 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 |
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.
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.