CVE-2026-99254
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
io_uring: nie zalewaj zadania anulowania zadaniem task_work
io_ring_exit_work() pyta każde zadanie, które użyło pierścienia, o jego usunięcie
tctx według task_work i powtarza to, aż lista będzie pusta.
io_tctx_exit_cb() nie dotyka węzła, gdy zadanie jest realizowane
io_uring_cancel_generic(), która usuwa wszystkie węzły na jej końcu. Więc
element roboczy ponownie umieszcza wywołanie zwrotne w kolejce zaraz po jego zakończeniu, np
nic.
To więcej niż strata czasu. task_work_run() zwraca tylko wtedy, gdy jest to możliwe
znajdzie listę pustą. Jeśli pierścienie zostaną zwolnione z wnętrza
anulowanie, ponieważ prośby innych pierścieni zawierały ostatnie wzmianki
swoje pliki, aż do 64 elementów pracy wysyła wywołania zwrotne do jednego zadania
która nimi kieruje. Nigdy nie znajdzie pustej listy i nigdy do niej nie wróci
anulowania, węzły pozostają i tak dalej: zadanie z 60 parami
pierścieni, które odpytują się nawzajem, wykonało 280 000 wywołań zwrotnych w ciągu 5 sekund, 20
sekundy po exit_group(). Kończy się, gdy wszyscy nadawcy spóźniają się
w tym samym czasie. Do tego czasu zadanie utrzymuje procesor i elementy pracy zajęte.
W międzyczasie nie można zakończyć kończącego się zadania. execve() anuluje żądania
w ten sam sposób, więc aktywne zadanie również może utknąć tam na kilka minut. Jeśli
potrzeba więcej niż pięciu, elementy pracy trafiają do
WARN_ON_ONCE(time_after(jiffies, timeout)) io_ring_exit_work(). Nie
do tego potrzebne są przywileje.
Jeśli wywołanie zwrotne spełniło zadanie w trakcie anulowania, poczekaj chwilę, zanim to nastąpi
wysłane ponownie. W tym celu nikt nie musi budzić elementu roboczego: ani węzła
do tego czasu już nie będzie, albo nadejdzie kolej następnej rundy.
>_ Referencje
- https://git.kernel.org/stable/c/14f56e9c0b8fdc2e178acdbec9781e90ef46f7e9
- https://git.kernel.org/stable/c/2c75ebae8a7f09c99e31c7042b7d4d595f03b2b1
- https://git.kernel.org/stable/c/61c761fc21e00e45c33c2bb596be442d92fb8792
- https://git.kernel.org/stable/c/a22fb44e988b01b82235ea07f0bf0fc73e256596
- https://git.kernel.org/stable/c/abdc57c7ebabaaf0b622178a6a85834e1e54ff80
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