CVE-2026-93107
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
RDMA/rxe: Unikaj ponownego przetwarzania bieżącego pakietu po wejściu QP w stan błędu
Kiedy do_complete() znajdzie QP w stanie błędu, zwraca
RESPST_CHK_RESOURCE. Przed zatwierdzeniem 49dc9c1f0c7e („RDMA/rxe: Cleanup
zresetuj obsługę stanu w rxe_resp.c”), to była pętla opróżniania:
check_resource() miała gałąź stanu błędu, która pobierała każdą pozostałą część
recv WQE i uzupełniłem go IB_WC_WR_FLUSH_ERR, bez dotykania
bieżący pakiet. To zatwierdzenie usunęło gałąź stanu błędu z
check_resource() (opróżnianie odbywa się teraz przy wpisie rxe_receiver()), ale
zachował zwrot stanu błędu do_complete().
W rezultacie, gdy QP przejdzie do stanu błędu, podczas gdy pakiet jest
w trakcie realizacji – np. rozłączenie rdma_cm ściga się z odbiorem
przetwarzanie — maszyna stanu obiektu odpowiadającego wraca do żądania
łańcuch przetwarzania z już ukończonym pakietem wciąż w ręku:
check_resource() pobiera nowy plik WQE, wykonaj()/send_data_in()
kopiuje ponownie ten sam ładunek pakietu, do_complete() wysyła kolejny
IB_WC_SUCCESS CQE (qp->resp.status nadal wynosi 0) i zwroty kontrolne
do sprawdzania stanu błędu. Pętla ponownie wykonuje ten sam pakiet jeden raz
na opublikowaną recv WQE (obserwowane: ~1000 duplikatów IB_WC_SUCCESS
zakończenie jednego SEND, jedno na ~8 nas, odpowiadające obłożeniu RQ)
aż do wyczerpania RQ, po czym qp->resp.wqe ma wartość NULL i
send_data_in() dereferuje to:
BŁĄD: wyłuskiwanie wskaźnika NULL jądra, adres: 0000000000000014
Kolejka robocza: rxe_wq do_work
RIP: kopia_dane+0x29/0x1f0
Zadzwoń do śledzenia:
send_data_in+0x25/0x50
rxe_receiver+0xf36/0x1dd0
Zduplikowane uzupełnienia są nie do odróżnienia od prawdziwych otrzymań
ULP. Podczas testu obciążeniowego RDS wiadomość została zaakceptowana jako nowa i
dostarczał ten sam datagram do przestrzeni użytkownika setki razy, powodując uszkodzenie
strumień; wszelkie ULP, które opierają się na RC dokładnie wtedy, gdy ma to wpływ na dostawę.
Aktywny pakiet osiągający kontrolę stanu błędu w funkcji do_complete() ma
zostało wykonane i ukończone dokładnie raz i nie musi zostać skonsumowane
ponownie przetworzone. Zwróć dla niego RESPST_CLEANUP (usuń z kolejki i za darmo); zachować
zwracanie RESPST_CHK_RESOURCE dla przypadku pkt == NULL.
>_ Referencje
- https://git.kernel.org/stable/c/0d37e2503efd1069a74be740eadf63ea17c96810
- https://git.kernel.org/stable/c/15ae32c4a3551c4c9da457370bdfdd65d171e512
- https://git.kernel.org/stable/c/399713f1f0eac641351c8ceaec0ab8244ddcf78c
- https://git.kernel.org/stable/c/62a4b48767e06fdd64548450fae2b1ffc6ff5d69
- https://git.kernel.org/stable/c/c319b986a88cedf600c4497cd7814a891b2f9e7c
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