CVE-2026-89974
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
nvme-fc: napraw opcje double free of Fabric, gdy nvme_add_ctrl() nie powiedzie się
nvmf_create_ctrl() jest właścicielem opcji Fabrics i zwalnia je w dowolnym momencie
->create_ctrl() zwraca błąd, więc transport nie może ich zwolnić
własne ścieżki błędów. nvme-fc śledzi to, testując ctrl->ctrl.opts
nvme_fc_ctrl_free(), która wymaga nvme_fc_init_ctrl() do wyczyszczenia tego
wskaźnik na każdym wyjściu błędu.
Sprzężenie jest niejawne i zatwierdzi 1a9e218195a5 („nvme: podzielone urządzenie
dodaj z inicjalizacji”) zepsuł to, dodając drugie wyjście błędu. Kiedy
nvme_add_ctrl() kończy się niepowodzeniem, nvme_fc_init_ctrl() przeskakuje do out_put_ctrl:, przeszłość
„ctrl->ctrl.opts = NULL”, który znajduje się tylko na ścieżce fall_ctrl:, więc
nvme_fc_ctrl_free() zwalnia opcje, a nvmf_create_ctrl() je zwalnia
drugi raz:
BŁĄD: KASAN: użycie płyty po zwolnieniu w nvmf_free_options+0x30/0x190
nvmf_free_options+0x30/0x190 sterowniki/nvme/host/fabrics.c:1284
nvmf_create_ctrl sterowniki/nvme/host/fabrics.c:1374 [wbudowane]
Uwolniony przez zadanie 5534:
nvme_fc_ctrl_free sterowniki/nvme/host/fc.c:2374 [wbudowane]
nvme_fc_init_ctrl+0xe17/0x1450 sterowniki/nvme/host/fc.c:3605
nvme_add_ctrl() kończy się niepowodzeniem, gdy dev_set_name() nie może dokonać alokacji, więc jest to
osiągalne pod presją pamięci lub wstrzykiwaniem błędów. Bez KASANA
opcje są zwalniane dwukrotnie.
Zamiast czyścić wskaźnik również na drugim wyjściu, wykonaj wyprowadzanie
własność w sposób, w jaki robią to nvme-tcp, nvme-rdma i nvme-loop, z listy
członkostwo: ich free_ctrl pozostawia same opcje, chyba że
kontroler znalazł się na liście transportowej.
Listy nie można po prostu zapełnić ścieżką sukcesu, ponieważ ona tam jest.
nvme-fc uruchamia początkowe połączenie synchronicznie za pomocą funkcji Flush_delayed_work(),
a kontroler musi być osiągalny przez rport->ctrl_list dla całości
z tego: nvme_fc_unregister_remoteport() musi go znaleźć, aby zasygnalizować
utrata łączności, nvme_fc_match_disconn_ls() dopasowuje sygnał przychodzący
Odłącz skojarzenie LS z ctrl->association_id, które jest tylko
przypisany w tym oknie, nvme_fc_resume_controller() potrzebuje go włączonego
ponowna rejestracja portu zdalnego, a nvme_fc_existing_controller() używa tego
odrzuć duplikat połączenia, który ściga się z tym w locie.
Zachowaj wstawkę tam, gdzie jest i dodaj awarię_unlist: etykieta, opadająca
do Fail_ctrl:, dla ścieżek błędów, które po nim działają. Im wcześniej
ścieżki błędów nigdy nie docierają do wstawienia i nadal używają Fail_ctrl:
bezpośrednio, więc lista jest dotykana tylko tam, gdzie faktycznie znajduje się kontroler
na tym.
nvme_fc_ctrl_free() nie może użyć zwykłego „goto free_ctrl” drugiego
transports używa, ponieważ nadal musi wykonać put_device(), zwolnić raport
odwołanie i zwolnij wpis ida dla zasobów pobranych przed
wstawienie. Zamiast tego przykładowa list_empty() w rport->lock.
ctrl->ctrl.opts również pozostaje teraz ważne przez cały okres porzucania. To znaczy
nie jest to naprawianie błędu, ale usuwanie pewnych niestabilności wokół starego
idiom: nvme_free_ctrl() wywołuje nvme_auth_free() przed ->free_ctrl() i
ctrl_max_dhchaps() usuwa referencje ctrl->opts bez sprawdzania wartości NULL, gdy
ctrl->dhchap_ctxs jest ustawione, na co pozwala nvme-fc od NVMF_ALLOWED_OPTS
umożliwia korzystanie z opcji dhchap. Nvme sysfs przypisuje to odwołanie
ctrl->opts, takie jak hostnqn i adres, oceniają ich funkcję is_visible()
przetestuj raz w czasie Device_add() i pozostań czytelny do
cdev_device_del().
>_ Referencje
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org