CVE-2024-55642
Açıklama
Linux kernel'da aşağıdaki güvenlik açığı giderilmiştir: block: zone write plug hata kurtarmadaki potansiyel kilitlenmelerin önlenmesi Zoned block device bölgelerine yapılan yazma işlemlerini yöneten Zone write plugging, bir bölgeye yönelik yazma BIO işlemi başarısız olduğunda her zaman bir zone report yürütür. Bunun amacı, bir bölgenin yazma imlecinin takibinin her zaman doğru olmasını sağlayarak, gönderim sırasında yazma BIO'larının bölge yazma imleciyle hizalamasının kontrol edilebilmesini ve düzenli yazma BIO'ları kullanılarak zone append operasyonlarının her zaman doğru şekilde emüle edilebilmesini sağlamaktır. Ancak bu hata kurtarma şeması, BIO'lar hala bir zone write plug içinde takılıyken bir device queue freeze başlatılırsa ve bu yazma işlemlerinden biri başarısız olursa potansiyel bir kilitlenme (deadlock) riskine yol açar. Böyle bir durumda, disk zone write plug hata kurtarma işi planlanır ve bir report zone yürütür. Bu da cihazla report zones komutunu iletmek için temel sürücüde bir istek tahsisine (request allocation) neden olabilir. Ancak device queue freeze zaten başlamış olduğu için bu tahsis işlemi bloklanacak, report zone yürütülmesini ve takılı BIO'ların işleme alınmasının devam etmesini engelleyecektir. Takılı BIO'lar bir kuyruk kullanım referansı tuttuğu için, queue freeze işleminin kendisi asla tamamlanmayacak ve bu durum bir kilitlenmeye yol açacaktır. Bu sorun, başarısız bir yazma işleminden sonra report zones operasyonlarının kullanımı zone write plugging kodundan tamamen kaldırılarak önlenmiştir; bunun yerine cihaz kullanıcısının ya bir report zones yürütmesine, bölgeyi sıfırlamasına (reset), bölgeyi bitirmesine (finish) veya cihaza yazmaktan vazgeçmesine (bu, yazma hataları sonrası salt okunur moda geçen dosya sistemleri için oldukça yaygın bir kalıptır) güvenilmektedir. Tüm düzgün çalışan uygulamalar, FS'ler ve device mapper, mevcut bölge yazma imleci konumunu kendi varsayımlarıyla karşılaştırarak mümkün olduğunca yazma hatalarından kurtulmak için zaten report zones kullandığından, bu makul olmayan bir gereksinim değildir. Otomatik hata kurtarmayı kaldıran değişiklikler şunlardır: - Hata kurtarma işi ve ilgili kaynaklar (zone write plug list head, disk error list ve disk zone_wplugs_work work struct) tamamen kaldırılmıştır. Bu aynı zamanda disk_zone_wplug_set_error() ve disk_zone_wplug_clear_error() fonksiyonlarını da kaldırır. - BLK_ZONE_WPLUG_ERROR zone write plug bayrağı, BLK_ZONE_WPLUG_NEED_WP_UPDATE olarak değiştirilmiştir. Bu yeni bayrak, bir zone write plug'ın hedeflediği bölgeye yönelik bir yazma işlemi başarısız olduğunda ayarlanır. Bu bayrak, bölge yazma imleci ofsetinin güvenilir olmadığını ve bir sonraki report zone, reset zone, finish zone veya disk revalidation yürütüldüğünde güncellenmesi gerektiğini belirtir. - Başarısız bir yazma BIO'sunun hedef bölgesi için BLK_ZONE_WPLUG_NEED_WP_UPDATE bayrağını ayarlamak üzere blk_zone_write_plug_bio_endio() fonksiyonu değiştirilmiştir. - Bu yeni bayrağı temizlemek için disk_zone_wplug_set_wp_offset() fonksiyonu değiştirilmiş, böylece reset (all) zone ve finish zone operasyonlarıyla doğru bir yazma imleci ofsetinin kurtarılması sağlanmıştır. - BLK_ZONE_WPLUG_NEED_WP_UPDATE bayrağıyla işaretlenen herhangi bir bölge için disk_zone_wplug_sync_wp_offset() çağrılabilsin diye blkdev_report_zones() fonksiyonu her zaman disk_report_zones_cb() geri çağırmasını (callback) kullanacak şekilde değiştirilmiştir. Bu, BLK_ZONE_WPLUG_NEED_WP_UPDATE ile işaretlenmiş olan ve kullanıcı tarafından yürütülen report zones operasyonu kapsamında kalan zone write plug'lar için doğru bir yazma imleci ofsetinin kurtarılmasını sağlar. - Bir zoned block device yeniden doğrulandığında (revalidated), tüm sıralı yazma gerektiren bölgeler için disk_zone_wplug_sync_wp_offset() fonksiyonunu çağıracak şekilde blk_revalidate_seq_zone() değiştirilmiştir; böylece zone write plug'ların yazma imleci ofseti ile sıralı bölgelerin gerçek yazma imleci konumu arasındaki herhangi bir tutarsızlık her zaman çözüme kavuşturulmuştur.
Nasıl düzeltilir
- linux linux_kernel6.12.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 | 6.10 ≤ v < 6.12.6, 6.13 | 6.12.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.