CVE-2025-39791
Açıklama
Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: dm: dm-crypt: Zoned hedeflerde yazma BIO'larının kısmen kabul edilmemesi Bir dm-crypt hedefine gönderilen okuma ve yazma işlemleri, max_read_size ve max_write_size modül parametreleri (varsayılan 128 KB) tarafından tanımlanan dm-crypt dahili sınırlarına göre bölünebilir. Buradaki amaç, büyük BIO'ları farklı CPU'larda paralelleştirilebilen daha küçük işlemlere bölerek işlem süresini iyileştirmektir. Zoned dm-crypt hedefleri için bu BIO bölme işlemi hala yapılmaktadır ancak alt cihazlara yönelik yazma işlemlerinin gönderim sırasının sıralı kalmasını sağlamak için paralel yürütme gerçekleştirilmez. Bununla birlikte, bölme işleminin kendisi başka sorunlara yol açmaktadır: 1) dm-crypt, düzenli yazma işlemlerini kullanarak zone append emülasyonunu yönetmek için blok katmanı zone write plugging mekanizmasına güvendiğinden, bölünmüş bir yazma BIO'sunun geri kalanı her zaman hedef zone write plugged kısmına takılır. Devam eden yazma BIO'su tamamlandığında, bu kalan BIO çözülür ve zone write plug işinden gönderilir. Eğer bu kalan BIO'nun kendisinin de bölünmesi gerekiyorsa, kalan kısım yeniden gönderilir ve tekrar takılır; ancak bu durum blk_queue_enter() çağrısına neden olur ve eğer bir kuyruk dondurma (queue freeze) işlemi başlatılmışsa bu çağrı bloke olabilir. Bu durum, DM gönderiminin hala kuyruk dondurma tarafının beklediği BIO'ları tutması nedeniyle bir deadlock ile sonuçlanır. 2) dm-crypt, zone append işlemlerini işlemek için blok katmanının düzenli yazma işlemlerini kullanarak yaptığı emülasyona güvenir. Bu, yazılan sektörün orijinal BIO'nun BIO sektörü olarak düzgün şekilde döndürülmesini gerektirir. Ancak bu, yalnızca kullanıcı tarafından gönderilen orijinal zone append işlemini işlemek için tek bir klon BIO kullanıldığında doğru şekilde yapılabilir. Bir zone append işleminin boyutu dm-crypt max_write_size değerinden büyükse, orijinal BIO bölünür ve düzenli yazma işlemlerinden oluşan bir zincir olarak işlenir. Böyle bir zincirleme, orijinal BIO sektörünü kullanan zone append göndericisine yanlış bir yazılan sektör döndürülmesiyle sonuçlanır. Bu da xfs veya btrfs kullanırken dosya sistemi veri bozulmalarına yol açar. Bu sorun, crypt_map() içindeki dm_accpet_partial_bio() ile bölünmeyi önlemek için get_max_request_size()'ın her zaman BIO boyutunu döndürmesini sağlayacak şekilde değiştirilmesiyle giderilmiştir. Döndürülen değerin birimini netleştirmek için get_max_request_size(), get_max_request_sectors() olarak yeniden adlandırılmıştır ve arayüzü bir struct dm_target işaretçisi ile işlenen struct bio işaretçisini alacak şekilde değiştirilmiştir. Bu değişikliğe ek olarak, crypt_alloc_buffer()'ın doğru çalışmasını sağlamak için dm-crypt cihazı max_hw_sectors sınırı en fazla BIO_MAX_VECS << PAGE_SECTORS_SHIFT (4KB sayfa mimarisinde 1 MB) olacak şekilde ayarlanmıştır. Bu, DM çekirdeğini yazma BIO'larını crypt_map()'e aktarmadan önce bölmeye zorlar ve böylece dm-crypt'in tüm bir yazma BIO'sunu bölmeye gerek duymadan her zaman kabul edebilmesini garanti eder. Bu değişiklik, dm-crypt'in okuma yolu üzerinde herhangi bir etkiye sahip değildir. Okuma işlemleri hala bölünebilir ve BIO parçaları paralel olarak işlenebilir. Tüm zone write BIO'ları zaten paralel yerine satır içi (inline) olarak işlendiği için yazma yolunun performansı üzerinde de bir etkisi yoktur. Bu değişiklik ayrıca standart dm-crypt blok cihazlarını hiçbir şekilde etkilemez.
Nasıl düzeltilir
- linux linux_kernel6.12.44, 6.16.4 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 | 6.10 ≤ v < 6.12.44, 6.13 ≤ v < 6.16.4 | 6.12.44, 6.16.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.