Odebrany

CVE-2026-90181

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

ublk: unikaj pętli ponawiania porzucenia w przypadku niepowodzenia alokacji tablicy x

__ublk_shmem_remove_ranges() usuwa pasujące zakresy drzew klonowych w
partie, ale najpierw przechowuje każdy zakres w tymczasowej tablicy x, dzięki czemu plik
strony można odpiąć po zdjęciu blokady drzewa klonowego.

Ta tymczasowa tablica x jest wypełniana pod zamkiem drzewa klonowego
xa_store(..., GFP_ATOMIC). Jeśli sklep nie powiedzie się przed mas_erase(), plik
bieżący zakres pozostaje w drzewie, a pomocnik zwraca wartość false. The
zewnętrzna pętla ublk_shmem_remove_ranges(), a następnie natychmiast ponawia próbę
zasięg. Podczas gdy alokacja atomowa ciągle zawodzi, ścieżka rozbicia tak
brak postępu w przód.

Problem można odtworzyć po wstrzyknięciu pliku radix_tree_node Failslab
bufor SHMEM_ZC został już zarejestrowany:

# Konfiguracja jądra:
# CONFIG_BLK_DEV_UBLK=y
# CONFIG_DEBUG_FS=y
# CONFIG_FAULT_INJECTION=y
# CONFIG_FAULT_INJECTION_DEBUG_FS=y
# CONFIG_FAILSLAB=y

echo 10 > /proc/sys/vm/nr_hugepages
mkdir -p /tmp/htlb
mount -t hugetlbfs brak /tmp/htlb
fallocate -l 4M /tmp/htlb/ublk_buf

dev_id=$(kublk dodaj -t null --shmem_zc \
--htlb /tmp/htlb/ublk_buf |
awk -F '[ :]' '/dev id/ {wydrukuj 3 $}')

echo 1 > /sys/kernel/slab/radix_tree_node/failslab
echo Y > /sys/kernel/debug/failslab/cache-filter
echo Y > /sys/kernel/debug/failslab/ignore-gfp-wait
echo 1 > /sys/kernel/debug/failslab/interval
echo -1 > /sys/kernel/debug/failslab/times
echo 100 > /sys/kernel/debug/failslab/probability

kublk del -n "$dev_id"

Na nienaprawionym jądrze polecenie usuwania nadal działało po wersji 3
sekundy. Wyłączenie Failslab spowodowało powrót. Stos wstrzykiwania błędów
pokazał:

powinien_failslab
kmem_cache_alloc_lru_noprof
__xas_nomem
__xa_sklep
xa_store
__ublk_shmem_remove_ranges
ublk_cdev_rel
ublk_ctrl_del_dev

Usuń alokację z pętli rozrywania. Zachowaj istniejącą partię
limit, ale zbieraj pary {base_pfn, nr_pages} w tablicy stosów o stałym rozmiarze.
Po znalezieniu pasującego zakresu, jest on usuwany z drzewa klonowego
przed opuszczeniem blokady, aby każde pomyślne skanowanie przebiegało bez niego
w zależności od dowolnej alokacji GFP_ATOMIC.

Przy tych samych ustawieniach FailLab naprawione jądro zostało ukończone
„kublk del -n $dev_id” pomyślnie w ciągu około 45 ms.

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