CVE-2026-89974

Yüksek

Açıklama

Linux çekirdeğinde aşağıdaki güvenlik açığı giderilmiştir: nvme-fc: nvme_add_ctrl() başarısız olduğunda fabric seçeneklerinin iki kez serbest bırakılması hatası düzeltildi nvmf_create_ctrl() fabric seçeneklerinin sahipliğine sahiptir ve ->create_ctrl() bir hata döndürdüğünde bunları serbest bırakır; bu nedenle bir taşıma katmanı kendi hata yollarında bunları serbest bırakmamalıdır. nvme-fc bunu, nvme_fc_ctrl_free() içinde ctrl->ctrl.opts'yi test ederek takip eder; bu da nvme_fc_init_ctrl()'nin her hata çıkışında söz konusu işaretçiyi temizlemesini gerektirir. Bu bağlama örtüktür ve 1a9e218195a5 numaralı commit ("nvme: split device add from initialization"), ikinci bir hata çıkışı ekleyerek bunu bozmuştur. nvme_add_ctrl() başarısız olduğunda, nvme_fc_init_ctrl() yalnızca fail_ctrl: yolunda bulunan "ctrl->ctrl.opts = NULL" ifadesini atlayarak out_put_ctrl: kısmına atlar; böylece nvme_fc_ctrl_free() seçenekleri serbest bırakır ve ardından nvmf_create_ctrl() bunları ikinci kez serbest bırakır: BUG: KASAN: slab-use-after-free in nvmf_free_options+0x30/0x190 nvmf_free_options+0x30/0x190 drivers/nvme/host/fabrics.c:1284 nvmf_create_ctrl drivers/nvme/host/fabrics.c:1374 [inline] Freed by task 5534: nvme_fc_ctrl_free drivers/nvme/host/fc.c:2374 [inline] nvme_fc_init_ctrl+0xe17/0x1450 drivers/nvme/host/fc.c:3605 dev_set_name() tahsis yapamadığında nvme_add_ctrl() başarısız olur, dolayısıyla bu durum bellek baskısı veya hata enjeksiyonu altında erişilebilirdir. KASAN olmadan seçenekler iki kez serbest bırakılır. İşaretçiyi ikinci çıkışta da temizlemek yerine, sahiplik durumu nvme-tcp, nvme-rdma ve nvme-loop'un yaptığı gibi liste üyeliğinden türetilir: bunların free_ctrl fonksiyonları, denetleyici taşıma listesine girmediği sürece seçeneklere dokunmaz. Liste, mevcut durumda olduğu gibi sadece başarı yolunda doldurulamaz. nvme-fc ilk bağlantıyı flush_delayed_work() aracılığıyla senkron olarak çalıştırır ve denetleyicinin tüm süreç boyunca rport->ctrl_list üzerinden erişilebilir olması gerekir: nvme_fc_unregister_remoteport() bağlantı kaybını bildirmek için onu bulmalıdır, nvme_fc_match_disconn_ls() gelen bir Disconnect Association LS'sini yalnızca o pencerede atanan ctrl->association_id ile eşleştirir, nvme_fc_resume_controller() uzak port yeniden kaydı sırasında ona ihtiyaç duyar ve nvme_fc_existing_controller() devam eden bağlantıyla yarışan yinelenen bir bağlantıyı reddetmek için onu kullanır. Ekleme işlemi mevcut yerinde tutulur ve sonrasında çalışan hata yolları için fail_ctrl: kısmına yönlenen bir fail_unlist: etiketi eklenir. Daha önceki hata yolları ekleme işlemine asla ulaşmaz ve doğrudan fail_ctrl: kullanmaya devam eder, böylece listeye yalnızca denetleyicinin gerçekten listede olduğu durumlarda müdahale edilir. nvme_fc_ctrl_free(), diğer taşımaların kullandığı basit "goto free_ctrl" ifadesini kullanamaz çünkü hala ekleme öncesi alınan kaynaklar için put_device() yapmalı, rport referansını serbest bırakmalı ve ida girişini boşaltmalıdır. Bunun yerine rport->lock altında list_empty() örneği kullanılır. Artık ctrl->ctrl.opts tüm kapatma işlemi boyunca geçerli kalır. Bu, düzeltilen hata değildir ancak eski yöntem etrafındaki bazı hassasiyetleri ortadan kaldırır: nvme_free_ctrl(), ->free_ctrl() öncesinde nvme_auth_free() çağrısını yapar ve ctrl_max_dhchaps(), ctrl->dhchap_ctxs ayarlı olduğunda ctrl->opts'yi NULL kontrolü yapmadan çözümler; nvme-fc buna izin verir çünkü NVMF_ALLOWED_OPTS dhchap seçeneklerine izin verir. hostnqn ve address gibi ctrl->opts'yi çözümleyen nvme sysfs öznitelikleri, is_visible() testlerini device_add() sırasında bir kez değerlendirir ve cdev_device_del()'e kadar okunabilir kalırlar.

ÖnemYüksek
CVSS7.5
İstismar olasılığı—
ÜrünLinux
Yayın16 Eyl 2026
İlk görülme16 Eyl 2026

Nasıl düzeltilir

Güncelleyin
  • Linux Linux8bd14aa065112b4d523bea690027c7527a6224f6, 7df913a7ced5d7349f0b23bdcf25ad54fe83a1c1, 5f89d68c00ccd1b25151da0bf660012380c2bad9, 56e6279266f6962bb2d38a54397e3c605165b0c5 ya da sonraki bir sürüm

Etkilenen ürünler

ÜrünEtkilenen sürümlerDüzeltildiği sürüm
Linux Linux1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 8bd14aa065112b4d523bea690027c7527a6224f6, 1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 7df913a7ced5d7349f0b23bdcf25ad54fe83a1c1, 1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 5f89d68c00ccd1b25151da0bf660012380c2bad9, 1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 56e6279266f6962bb2d38a54397e3c605165b0c5, 6.118bd14aa065112b4d523bea690027c7527a6224f6, 7df913a7ced5d7349f0b23bdcf25ad54fe83a1c1, 5f89d68c00ccd1b25151da0bf660012380c2bad9, 56e6279266f6962bb2d38a54397e3c605165b0c5

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.

CVE-2026-89974 · Linux · Dark Radar