CVE-2026-89974

Yüksək

Təsvir

Linux nüvəsində aşağıdakı zəiflik aradan qaldırılmışdır: nvme-fc: nvme_add_ctrl() uğursuz olduqda fabric seçimlərinin iki dəfə azad edilməsi (double free) düzəldildi nvmf_create_ctrl() fabric seçimləri üzərində mülkiyyət hüququna malikdir və ->create_ctrl() xəta qaytardıqda onları azad edir, buna görə də nəqliyyat (transport) öz xəta yollarında onları azad etməməlidir. nvme-fc bunu nvme_fc_ctrl_free() funksiyasında ctrl->ctrl.opts göstəricisini yoxlayaraq izləyir ki, bu da nvme_fc_init_ctrl()-dən hər bir xəta çıxışında həmin göstəricini təmizləməyi tələb edir. Bu əlaqə implicitdir və 1a9e218195a5 ("nvme: split device add from initialization") commit-i ikinci bir xəta çıxışı əlavə etməklə onu pozmuşdur. nvme_add_ctrl() uğursuz olduqda, nvme_fc_init_ctrl() yalnız fail_ctrl: yolunda yerləşən "ctrl->ctrl.opts = NULL" hissəsini ötürərək out_put_ctrl: bölməsinə tullanır, beləliklə nvme_fc_ctrl_free() seçimləri azad edir və nvmf_create_ctrl() onları ikinci dəfə azad edir: 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() ayırmanı (allocate) edə bilmədikdə nvme_add_ctrl() uğursuz olur, buna görə də bu vəziyyət yaddaş təzyiqi və ya xətanın süni stimullaşdırılması (fault injection) zamanı baş verə bilər. KASAN olmadan seçimlər iki dəfə azad edilir. Göstəricini ikinci çıxışda da təmizləmək əvəzinə, mülkiyyət hüququnu nvme-tcp, nvme-rdma və nvme-loop kimi siyahı üzvlüyündən törədin: onların free_ctrl funksiyaları, kontroller nəqliyyat siyahısına daxil olmayıbsa, seçimlərə toxunmur. Siyahı sadəcə orada olduğu kimi uğurlu yolda doldurula bilməz. nvme-fc ilkin qoşulmanı flush_delayed_work() vasitəsilə sinxron şəkildə icra edir və kontroller bütün proses boyunca rport->ctrl_list üzərindən əlçatan olmalıdır: nvme_fc_unregister_remoteport() bağlantının itməsini siqnal vermək üçün onu tapmalı, nvme_fc_match_disconn_ls() gələn Disconnect Association LS-ni yalnız həmin pəncərə ərzində təyin edilən ctrl->association_id ilə uyğunlaşdırmalı, nvme_fc_resume_controller() remoteport yenidən qeydiyyatı zamanı ona ehtiyac duymalı və nvme_fc_existing_controller() davam edən qoşulma ilə yarışan dublikat qoşulmanı rədd etmək üçün ondan istifadə etməlidir. Yerləşdirməni olduğu kimi saxlayın və ondan sonra işləyən xəta yolları üçün fail_ctrl:-ə yönələn fail_unlist: etiketi əlavə edin. Əvvəlki xəta yolları heç vaxt yerləşdirmə mərhələsinə çatmır və birbaşa fail_ctrl:-dən istifadə etməyə davam edir, beləliklə siyahıya yalnız kontroller həqiqətən orada olduqda toxunulur. nvme_fc_ctrl_free() digər nəqliyyatların istifadə etdiyi adi "goto free_ctrl" ifadəsindən istifadə edə bilməz, çünki o, hələ də yerləşdirmədən əvvəl götürülmüş resurslar üçün put_device() etməli, rport istinadını azad etməli və ida girişini təmizləməlidir. Bunun əvəzinə rport->lock altında list_empty() nümunəsindən istifadə edin. İndi ctrl->ctrl.opts bütün sökülmə (teardown) prosesi boyunca etibarlı qalır. Bu, düzəldilən xəta deyil, lakin köhnə idion ətrafındakı bəzi kövrəklikləri aradan qaldırır: nvme_free_ctrl() ->free_ctrl()-dən əvvəl nvme_auth_free() çağırır və ctrl_max_dhchaps() ctrl->dhchap_ctxs təyin edildikdə NULL yoxlaması olmadan ctrl->opts-ə müraciət edir ki, buna nvme-fc icazə verir, çünki NVMF_ALLOWED_OPTS dhchap seçimlərinə icazə verir. hostnqn və address kimi ctrl->opts-ə müraciət edən nvme sysfs atributları, öz is_visible() testlərini bir dəfə device_add() zamanı qiymətləndirir və cdev_device_del() anına qədər oxunaqlı qalırlar.

CiddilikYüksək
CVSS7.5
İstismar ehtimalı—
MəhsulLinux
Dərc16 sen 2026
İlk görülmə16 sen 2026

Necə düzəltmək olar

Yeniləyin
  • Linux Linux8bd14aa065112b4d523bea690027c7527a6224f6, 7df913a7ced5d7349f0b23bdcf25ad54fe83a1c1, 5f89d68c00ccd1b25151da0bf660012380c2bad9, 56e6279266f6962bb2d38a54397e3c605165b0c5 və ya daha yeni versiya

Təsirlənən məhsullar

MəhsulTəsirlənən versiyalarDüzəldildiyi versiya
Linux Linux1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 8bd14aa065112b4d523bea690027c7527a6224f6, 1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 7df913a7ced5d7349f0b23bdcf25ad54fe83a1c1, 1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 5f89d68c00ccd1b25151da0bf660012380c2bad9, 1a9e218195a55d0a31e8cbe263aa2f618580ef1d ≤ v < 56e6279266f6962bb2d38a54397e3c605165b0c5, 6.118bd14aa065112b4d523bea690027c7527a6224f6, 7df913a7ced5d7349f0b23bdcf25ad54fe83a1c1, 5f89d68c00ccd1b25151da0bf660012380c2bad9, 56e6279266f6962bb2d38a54397e3c605165b0c5

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.

Intelligence 360 paketində

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.