CVE-2024-50226

Yüksek

Açıklama

Linux kernel'de aşağıdaki güvenlik açığı giderilmiştir: cxl/port: Serbest bırakıldıktan sonra kullanım (use-after-free) hatası düzeltildi, sırasız decoder kapatılmasına izin verildi Bir başlatma hatası raporunun [1] incelenmesi kapsamında, cxl_test, mock root-port/bus aygıtı kaydedildikten sonra mock bellek aygıtlarını kaydedecek şekilde güncellenmiştir. Bu durum, cxl_test'in aşağıdaki imzaya sahip bir serbest bırakıldıktan sonra kullanım (use-after-free) hatasıyla çökmesine neden olmuştur: cxl_port_attach_region: cxl region3: cxl_host_bridge.0:port3 decoder3.0 add: mem0:decoder7.0 @ 0 next: cxl_switch_uport.0 nr_eps: 1 nr_targets: 1 cxl_port_attach_region: cxl region3: cxl_host_bridge.0:port3 decoder3.0 add: mem4:decoder14.0 @ 1 next: cxl_switch_uport.0 nr_eps: 2 nr_targets: 1 cxl_port_setup_targets: cxl region3: cxl_switch_uport.0:port6 target[0] = cxl_switch_dport.0 for mem0:decoder7.0 @ 0 1) cxl_port_setup_targets: cxl region3: cxl_switch_uport.0:port6 target[1] = cxl_switch_dport.4 for mem4:decoder14.0 @ 1 [..] cxld_unregister: cxl decoder14.0: cxl_region_decode_reset: cxl_region region3: mock_decoder_reset: cxl_port port3: decoder3.0 reset 2) mock_decoder_reset: cxl_port port3: decoder3.0: out of order reset, expected decoder3.1 cxl_endpoint_decoder_release: cxl decoder14.0: [..] cxld_unregister: cxl decoder7.0: 3) cxl_region_decode_reset: cxl_region region3: Oops: general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6bc3: 0000 [#1] PREEMPT SMP PTI [..] RIP: 0010:to_cxl_port+0x8/0x60 [cxl_core] [..] Call Trace: <TASK> cxl_region_decode_reset+0x69/0x190 [cxl_core] cxl_region_detach+0xe8/0x210 [cxl_core] cxl_decoder_kill_region+0x27/0x40 [cxl_core] cxld_unregister+0x5d/0x60 [cxl_core] 1) noktasında, 2 uç nokta decoder'ı (7.0 ve 14.0) ile bir bölge oluşturulmuştur. Bu uç noktalar topolojide ortak bir switch-decoder (3.0) paylaşmaktadır. Kapatma sırasında 2) noktasında, ilk olarak decoder14.0 kaldırılır ve switch decoder'daki "sırasız sıfırlama durumu" (out of order reset case) tetiklenir. Ancak bunun etkisi, region3 temizliğinin iptal edilmesiyle sonuçlanarak bölgenin bozulmadan kalmasına ve decoder14.0'a referans vermeye devam etmesine yol açar. 3) noktasında, region3'ü kapatmaya yönelik ikinci girişim, çoktan silinmiş olan bayat decoder14.0 nesnesi nedeniyle hata verir. Buradaki çözüm, CXL spesifikasyonunun switch-decoder'ların sıralı kapatılması konusunda herhangi bir zorunluluk getirmediğini kabul etmektir; sürücü sıralı tahsisi, donanım ise sıralı onaylamayı (commit) uygular. Bu nedenle, başarısız olup nesneleri askıda bırakmak yerine, bunları her zaman kaldırmak gerekir. cxl_region_decode_reset() fonksiyonunun her zaman başarılı olması için, cxl_region_invalidate_memregion() hataları uyarıya dönüştürülmüştür. CXL bölge imhası gibi fiziksel adres mutasyon olayları sırasında önbellekler yönetilemezse sistem bütünlüğü riske gireceği için burada çekirdeğin çökmesi kabul edilebilir bir durumdur. Tüm bağımlı decoder'lar devre dışı bırakıldıktan sonra port->commit_end kısmını temizlemek için yeni bir device_for_each_child_reverse_from() eklenmiştir. Diğer bir ifadeyle, eğer decoder'lar 0->1->2 şeklinde tahsis edilip 1->2->0 şeklinde devre dışı bırakılmışsa, port->commit_end yalnızca 2 devre dışı bırakıldıktan sonra 2'den itibaren azalır ve 1 daha önce devre dışı bırakıldığı için sıfıra kadar iner.

ÖnemYüksek
CVSS7.8
İstismar olasılığı—
ÜrünLinux Kernel
Yayın9 Kas 2024
İlk görülme9 Kas 2024

Nasıl düzeltilir

Güncelleyin
  • linux linux_kernel6.6.60, 6.11.7 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
linux linux_kernel6.0 ≤ v < 6.6.60, 6.7 ≤ v < 6.11.7, 6.126.6.60, 6.11.7

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.

Intelligence 360 paketinde

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.