Odebrany

CVE-2026-93224

opublikowano:
modyfikacja:
Ocena CVSS
n/a
Brak oceny

>_ Opis

Tłumaczenie automatyczne – może zawierać nieścisłości.

W jądrze Linuksa usunięto następującą lukę:

svcrdma: Napraw niedopasowany rn_unregister w przypadku nieudanej akceptacji

Kiedy svc_rdma_accept() przyjmuje wcześniej ścieżkę błędu
rpcrdma_rn_register() powiodła się, istniejący blok czyszczący
wywołuje bezwarunkowo rpcrdma_rn_unregister(dev, &newxprt->sc_rn).
svcxprt_rdma ma wartość kzalloc, więc na tej ścieżce sc_rn.rn_index wynosi 0 i
sc_rn.rn_done ma wartość NULL; wyrejestrowanie jest zatem kolejną funkcją xa_erase().
miejsce wywołującego 0 i wykonuje niedopasowaną funkcję kref_put() na
rd_kref rpcrdma_device.

Ten sam błąd obejmuje również czyszczenie w nawiasie za pomocą svc_xprt_get()/
svc_xprt_put() wokół odniesienia do urodzenia kref_init(). Kref
przechodzi 1 -> 2 -> 1 i nigdy nie osiąga 0, więc svcxprt_rdma (i
net/ns_tracker, który jest przypięty) wycieka przy każdym nieudanym zaakceptowaniu.

rpcrdma_rn_register() zapisuje rn->rn_done jako ostatnie, dopiero po xa_alloc()
i kref_get() powiodły się, więc rn_done == NULL jest wartością naturalną
„nigdy zarejestrowany” wartownik. Strzeż rpcrdma_rn_unregister() za pomocą an
wcześniejszy powrót, gdy rn_done ma wartość NULL i wyczyszczenie rn_done przed
dopasowanie xa_erase(), więc wielokrotne wyrejestrowanie również nie daje efektu.

Gdy ta osłona jest na miejscu, błąd akceptacji powoduje usunięcie kref_init()
odniesienie do urodzenia poprzez svc_xprt_put(), która wywołuje svc_rdma_free().
Porzucenie sc_qp, sc_sq_cq, sc_rq_cq i sc_pd działa w ramach istniejących
Strażnicy IS_ERR/NULL w svc_rdma_free(); sc_rn jest objęty nowym
rn_done wartownik; sc_cm_id nie ma wartości NULL na każdej ścieżce błędu, ponieważ
svc_rdma_accept() usuwa referencje powyżej pierwszego błędu goto.

svc_xprt_free() usuwa odwołanie do modułu powiązane ze zwolnionym
transport, a svc_handle_xprt() usuwa wcześniej nabyte odniesienie
kiedy ->xpo_accept() zwraca NULL. Zapoznaj się z referencją modułu zamiennego
przed svc_xprt_put(), więc dwa moduły() pozostają zrównoważone.

Strażnik rn_done obejmuje także wywołanie svc_rdma_free() niebędące słuchaczem
do rpcrdma_rn_unregister() dla transportów, których próba rejestracji
nie powiodło się lub nigdy nie działało.

>_ 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