CVE-2026-80959
NieznaneStreszczenie
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.
Ocena ryzyka
Osoba z uprawnieniami CAP_SYS_ADMIN dostarczająca urządzenie cache może wywołać odczyt poza zakresem pamięci jądra. Może to prowadzić do ujawnienia danych lub awarii systemu.
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-80962Nieznane
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.
- 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-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: bound the persisted tail-position offset cache_pos_decode() takes the persisted key_tail and dirty_tail seg_off from the cache device and addresses within the segment with it. A seg_off at or past the segment data_size, controllable by whoever supplies the device (CAP_SYS_ADMIN), reads past the segment data. Reject a decoded seg_off that is not below the segment data_size.

