Odebrany

CVE-2026-89533

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 arytmetykę przesunięcia w read_chunk_range

svc_rdma_read_chunk_range() przenosi listę segmentów fragmentu odczytu do
zbuduj podzakres zaczynając od przesunięcia bajtów i bajtów o długości obejmującej
dla fragmentu pozycji zerowej lub wywołania. Dwa defekty arytmetyczne w
pętla na segment generuje nieprawidłowe długości DMA i niedomiar u32:

pcl_for_each_segment(segment, porcja) {
if (offset > segment->rs_length) {
przesunięcie -= segment->rs_length;
Kontynuować;
}

dummy.rs_handle = segment->rs_handle;
dummy.rs_length = min_t(u32, długość,
segment->rs_length) - przesunięcie;
dummy.rs_offset = segment->rs_offset + przesunięcie;

Po pierwsze, predykat pomijania używa „>” zamiast „>=”. Kiedy offset
równa się pełnej długości rs_długości segmentu, segment jest całkowicie wykorzystany
i należy go pominąć, ale pętla wpada do korpusu.
Wynikowy dumy.rs_length to min_t(u32, długość, rs_length) -
rs_length, który zmniejsza się do prawie UINT_MAX u32, gdy długość wynosi
mniejszy niż rs_length lub w przeciwnym razie wynosi zero.

Po drugie, formuła na długość odejmuje przesunięcie od wyniku min_t().
zamiast z segment->rs_length przed ograniczeniem. Dla przesunięcia > 0
reszta segmentu to rs_length - offset, a nie rs_length, więc
na pozostałość należy nałożyć korek. Przy obecnym nawiasie
ilekroć długość jest mniejsza niż rs_length - przesuń na segment
długość staje się długością - przesunięcie zamiast długości, ciche opadanie
przesunięte bajty z przebudowanego fragmentu. W połączeniu z granicą
powyższy przypadek umożliwia również propagację ścieżki niedomiaru u32
ogromny nr_bvec w svc_rdma_build_read_segment() i multi-MiB
kmalloc_array_node() w svc_rdma_get_rw_ctxt().

Dodatkowo funkcja svc_rdma_read_call_chunk() może wywołać tę funkcję
o długości == 0, gdy ostatnia część odczytu kończy się dokładnie na końcu
fragmentu połączenia. Z poprawionym predykatem >=, każdy segment
jest pomijany, a funkcja zwraca wartość początkową -EINVAL, odrzucając
ważny wniosek. Zwróć sukces natychmiast, gdy długość wynosi zero.
Aby tego uniknąć, wyjdź z pętli po całkowitym zużyciu długości
przekazywanie segmentów o zerowej długości do svc_rdma_build_read_segment().

Napraw, używając „>=”, aby w pełni wykorzystany segment został pominięty, przez
przesuwanie „- offset” wewnątrz min_t(), aby ograniczenie zostało zastosowane do
długość resztkową segmentu, zwracając sukces dla długości zerowej
żądań i zatrzymując iterację, gdy żądany zakres ma
został skonsumowany.

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