Odebrany

CVE-2026-98284

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ę:

netlink: nie zwalniaj grup nlk->, dopóki mogą z nich korzystać czytelnicy bez blokady

netlink_realloc_groups() używa krealloc() w ramach netlink_table_grab().
Ilekroć NLGRPSZ(grupy) wyląduje w innym segmencie kmalloc, stary
bitmapa jest natychmiast zwalniana.

Dwóch czytelników nlk->groups / nlk->ngroups nie posiada łącza sieciowego
blokada stołu:

1) sk_diag_dump_groups(). Zaszyfrowane (związane) gniazda są zrzucane z pliku
rhashtable w __netlink_diag_dump(), która przechowuje tylko RCU.
Tylko część zrzutu mc_list zajmuje nl_table_lock.

2) netlink_native_seq_show() (/proc/net/netlink), którego przejście zostało
lockless od zatwierdzenia 21e4902aea80 („netlink: wyszukiwanie bez blokady za pomocą
Okres karencji RCU w wydaniu gniazda”).

Obydwa mogą czytać zwolniony bufor, a sk_diag_dump_groups() również może czytać
poza koniec starego (mniejszego) bufora, jeśli zdarzy się, że załaduje stary
Wskaźnik @groups wraz z nową wartością @ngroups, kopiując plik
wynik do atrybutu NETLINK_DIAG_GROUPS.

Jest to błąd tej samej klasy, który popełnia f773608026ee („netlink:
uzyskaj bezpieczny dostęp do grup nlk w netlink bind i getname”) naprawiono dla bind()
i getname(); pominięto tych dwóch czytelników. Po prostu chwyć się stołu
lock w sk_diag_dump_groups() nie jest opcją, ponieważ również jest
wywołany z nl_table_lock już wstrzymanym z sekcji mc_list pliku
zrzut.

Zamiast tego zabezpiecz czytniki bez zamków:

- Przydziel nową bitmapę i zwolnij starą po okresie karencji RCU,
zamiast polegać na ukrytej funkcji kfree() wykonanej przez krealloc().

- Publikuj @groups przed @ngroups, zarówno z semantyką wydania, jak i
czytniki bez blokady najpierw ładują @ngroups. Czytelnik nie może wówczas nigdy sparować
nowy (większy) rozmiar ze starym (mniejszym) buforem i czytnikiem
podniesienie nowego wskaźnika, jednocześnie widząc stary rozmiar
gwarantujemy zobaczenie zainicjowanej bitmapy.

netlink_realloc_groups() jest wywoływana z kontekstu procesu (bind() i
setsockopt()), więc można użyć kfree_rcu_mightsleep(), gdy tabela
został wydany.

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