CVE-2026-80962
NieznaneStreszczenie
W jądrze Linux moduł dm-pcache nie waliduje pól geometrii (n_segs i id segmentu) pochodzących z metadanych cache_info na dysku. Funkcja cache_segs_init() iteruje n_segs razy, indeksując tablicę cache->segments[], która ma rozmiar wynikający z geometrii urządzenia. Ponieważ metadane są chronione jedynie CRC z publicznym ziarnem, osoba dostarczająca urządzenie cache (CAP_SYS_ADMIN) może podać zbyt duże n_segs lub identyfikator spoza zakresu, powodując odczyt i zapis poza zakresem. Poprawka odrzuca nieprawidłowe wartości przed użyciem.
Ocena ryzyka
Podatność umożliwia osobie z uprawnieniami CAP_SYS_ADMIN (dostarczającej urządzenie cache) odczyt i zapis poza zakresem pamięci jądra, co może prowadzić do eskalacji uprawnień lub uszkodzenia systemu. Wymaga jednak wysokich uprawnień.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę dla modułu dm-pcache. Ogranicz możliwość ładowania tabel dm-pcache do zaufanych administratorów.
Inne podatności w Linux kernel (dm-pcache)
Zobacz wszystkie- CVE-2026-80961Nieznane
W jądrze Linux moduł dm-pcache nie ogranicza pola key_num w ksecie ani granic wewnątrz segmentu. key_num steruje funkcją cache_kset_crc() i pętlą odtwarzania w cache_replay(), a ponieważ sprawdzane są tylko magic i CRC z publicznym ziarnem, nieprawidłowy key_num może spowodować odczyt poza buforem PCACHE_KSET_KEYS_MAX. Dodatkowo przesunięcie i długość klucza w cache_key_decode() są przyjmowane bez weryfikacji, co pozwala na odczyt poza segmentem i wyciek danych do przestrzeni użytkownika. Poprawka dodaje walidację key_num i granic klucza.
- CVE-2026-80960Nieznane
W jądrze Linux moduł dm-pcache nie waliduje pola seg_num pochodzącego z superbloku chronionego tylko crc32c. seg_num określa rozmiar tablicy cache->segments[] i jest używany do ograniczania identyfikatorów segmentów, ale nigdy nie jest sprawdzany względem rozmiaru urządzenia. Osoba dostarczająca urządzenie cache (CAP_SYS_ADMIN) może podać zbyt duże seg_num, co prowadzi do zapisu poza zakresem (memset 12 KiB) w pamięci jądra podczas ładowania tabeli. Poprawka odrzuca seg_num równy zero, większy niż urządzenie może pomieścić lub większy niż PCACHE_CACHE_SEGS_MAX.
- CVE-2026-80959Nieznane
W jądrze Linux moduł dm-pcache nie ogranicza przesunięcia seg_off w funkcji cache_pos_decode(), która pobiera zapisane wartości key_tail i dirty_tail z urządzenia cache. Wartość seg_off równa lub większa niż rozmiar danych segmentu (data_size), kontrolowana przez osobę dostarczającą urządzenie (CAP_SYS_ADMIN), powoduje odczyt poza segmentem. Poprawka odrzuca zdekodowane seg_off, które nie jest mniejsze niż data_size segmentu.
- CVE-2026-80958Nieznane
W jądrze Linux moduł dm-pcache w funkcji cache_replay(), wątku zapisu zwrotnego i wątku GC ogranicza długość odczytu tail-kset przez PCACHE_SEG_SIZE - seg_off, czyli surowy rozmiar segmentu, a nie region danych. Odczyt tail blisko końca segmentu wykracza poza dane segmentu do następującego obszaru kontrolnego. Poprawka ogranicza odczyt do cache_seg_remain(), czyli regionu danych.
- CVE-2026-80957Nieznane
W jądrze Linux moduł dm-pcache w funkcji cache_replay() podąża za łańcuchem last-kset z metadanych przez next_cache_seg_id bez wywołania cond_resched(). Spreparowany łańcuch wskazujący z powrotem na już odwiedzony segment powoduje nieskończoną pętlę odtwarzania. Poprawka ogranicza liczbę przeskoków last-kset do cache->n_segs, ponieważ prawidłowy łańcuch odwiedza każdy segment co najwyżej raz.
- CVE-2026-80956Nieznane
W jądrze Linux moduł dm-pcache w funkcji get_cache_segment() skanuje mapę segmentów do cache->n_segs (fizyczna liczba segmentów urządzenia), ale cache_segs_init() inicjalizuje tylko pierwsze cache_info->n_segs segmentów. Spreparowany obraz z mniejszym cache_info->n_segs pozostawia pozostałe struktury pcache_cache_segment wyzerowane (segment.data == NULL), a alokator może przekazać taki segment do cache_kset_close(), która zapisuje przez wskaźnik data bez sprawdzenia NULL. Poprawka ogranicza wyszukiwanie alokatora do cache_info->n_segs.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: dm-pcache: validate geometry fields from on-disk cache_info cache_segs_init() iterates cache_info->n_segs times indexing cache->segments[], which is sized to the cache device geometry, and get_seg_id() takes each segment id from the on-media cache_info and the per-segment next_seg link. Both come from cache device metadata that is only CRC-protected with a fixed public seed, so whoever supplies the cache device on a table load (CAP_SYS_ADMIN) controls them: an oversized n_segs or an out-of-range id drives an out-of-bounds access of cache->segments[] and a wild CACHE_DEV_SEGMENT() pointer into the device mapping -- an out-of-bounds read and write from on-disk data. Reject an n_segs that exceeds the device segment count and a segment id that is out of range before either is used. Valid metadata is unaffected.

