CVE-2026-98866
NieznaneStreszczenie
W jądrze Linux rozwiązano podatność w module sched/cache: wprowadzono task_struct->sched_cache_grp w celu naprawy use-after-free. Dodano wskaźnik sched_cache_grp do task_struct, aby kod schedulera mógł uzyskać dostęp do grupy cache bezpośrednio przez zadanie, bez pośrednictwa mm->sched_cache_grp. Każde zadanie utrzymuje własny licznik referencji na sched_cache_group, niezależny od referencji w mm_struct. Referencja jest pozyskiwana w copy_mm() (fork) i exec_mmap() (exec), a zwalniana w exit_mm(). Naprawia to use-after-free, gdy account_mm_sched() dociera do grupy przez zadanie, którego mm jest przełączane.
Ocena ryzyka
Podatność use-after-free może prowadzić do awarii jądra, uszkodzenia pamięci lub potencjalnego wykonania kodu, co zagraża bezpieczeństwu systemu.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę wprowadzającą sched_cache_grp i odpowiednie zarządzanie referencjami.
Inne podatności w Linux kernel
Zobacz wszystkie- CVE-2026-98868Nieznane
W jądrze Linux rozwiązano podatność w module dm-pcache: odrzucanie ksetu przekraczającego swój segment. Funkcje cache_replay(), worker zapisu zwrotnego i worker GC odczytują kset o rozmiarze get_kset_onmedia_size() bajtów i przesuwają pozycję o tę wartość. Sfałszowany key_num powoduje, że rozmiar przekracza pozostałe miejsce w segmencie, przez co przesunięcie wychodzi poza segment i wyzwala BUG_ON w cache_pos_advance().
- CVE-2026-98867Nieznane
W jądrze Linux rozwiązano podatność w module dm-pcache: ograniczenie logicznego przesunięcia klucza z pamięci trwałej. Funkcja cache_key_decode() pobiera logiczne przesunięcie klucza z urządzenia pamięci podręcznej i później indeksuje req_key_tree->subtrees[] za jego pomocą w get_subtree(). Przesunięcie poza urządzenie tworzy wskaźnik poddrzewa poza tablicą, do którego rb_insert() zapisuje podczas odtwarzania.
- CVE-2026-98865Nieznane
W jądrze Linux w schedulerze sched_ext funkcja ops.dequeue() była wywoływana z wciąż trzymaną blokadą DSQ na ścieżkach consume i move. Jeśli scheduler BPF próbował zablokować źródłowy DSQ wewnątrz ops.dequeue(), dochodziło do samozakleszczenia. Poprawka przenosi wywołanie po zwolnieniu blokady DSQ na wszystkich trzech ścieżkach.
- CVE-2026-98864Nieznane
W jądrze Linux w sched_ext zadanie mogło znajdować się na DSQ, gdy jego stan wciąż był SCX_OPSS_DISPATCHING. Ścieżki reenqueue nie czekały na wyczyszczenie tego stanu, więc ops.enqueue() ustawiał SCX_OPSS_QUEUED, a następnie końcowy zapis dyspozytora nadpisywał go wartością SCX_OPSS_NONE, powodując porzucenie kolejnych dispatchy zadania. Poprawka czeka na wyczyszczenie SCX_OPSS_DISPATCHING przed dequeue do reenqueue.
- CVE-2026-98863Nieznane
W KVM na architekturze x86 żądanie GET_NESTED_STATE_PAGES nie było ponownie ustawiane, gdy pobranie stron zagnieżdżonych kończyło się niepowodzeniem w ścieżce KVM_RUN. Jeśli użytkownik ponownie uruchomił vCPU, a vmcs02 zawierał ważne PFN z poprzedniego uruchomienia L2, KVM mógł wejść do L2 ze starymi, nieprzypiętymi PFN zmapowanymi np. na stronę vAPIC.
- CVE-2026-98862Nieznane
W podsystemie audit jądra Linux funkcja kill_rules() usuwała reguły AUDIT_DIR i AUDIT_EXE podczas przycinania drzewa audytu, zwalniając entry->rule.exe przed usunięciem reguły z list widocznych przez RCU. Usunięcie obserwowanego katalogu mogło wyścignąć się z innym zadaniem oceniającym regułę, powodując use-after-free w audit_mark_compare().
- CVE-2026-98861Nieznane
W jądrze Linux naprawiono podatność w mechanizmie fprobe, polegającą na tym, że funkcje wyrejestrowujące fprobe (unregister_fprobe, unregister_fprobe_async) opierały się na standardowych okresach łaski RCU, które nie śledzą sekcji z wyłączonym wywłaszczaniem, gdy RCU nie obserwuje (np. w pętli bezczynności lub w stanach nohz_full). Mogło to prowadzić do użycia zwolnionej pamięci (use-after-free), jeśli fprobe został zwolniony zaraz po wyrejestrowaniu. Poprawka zapewnia wczesne wyjście z procedur obsługi, gdy !rcu_is_watching(), oraz zastępuje guard(rcu)() i rcu_read_lock() przez guard(rcu_sched_notrace)(), co eliminuje narzut lockdep na szybkiej ścieżce.
- CVE-2026-98860Nieznane
W podsystemie HID BPF jądra Linux porównanie zwracanej wartości z hid_bpf_hw_request z rozmiarem nie rzutowało rozmiaru na ssize_t. Gdy sterownik transportu zwracał ujemny kod błędu (np. -EPIPE), był on promowany do size_t i oceniany jako duża liczba dodatnia, przez co warunek (ret > size) stawał się prawdziwy. Powodowało to ciche potraktowanie błędu sprzętowego jako sukcesu i skopiowanie niezmodyfikowanego bufora.
- CVE-2026-98859Nieznane
W jądrze Linux w sterowniku HID multitouch funkcja mt_remove() używała timer_delete_sync() do zatrzymania timera odpowiedzialnego za tzw. sticky fingers. Timer mógł jednak zostać ponownie uzbrojony przez raport przychodzący po jego usunięciu, co prowadziło do użycia zwolnionej pamięci (use-after-free) po odłączeniu sterownika. Problem rozwiązano, zastępując timer_delete_sync() funkcją timer_shutdown_sync(), która dodatkowo blokuje późniejsze mod_timer().
- CVE-2026-98858Nieznane
W io_uring jądra Linux w trybie SQPOLL wątek sqpoll mógł pobrać i ukończyć żądanie zaraz po opublikowaniu go przez mpscq_push(). Jeśli było to ostatnie żądanie utrzymujące pierścień przy życiu, io_ring_exit_work() zwalniało ctx, zatrzymywało wątek i tctx, podczas gdy io_req_normal_work_add() wciąż odwoływało się do nich, powodując use-after-free. Poprawka utrzymuje blokadę RCU wokół dodawania i czeka na okres karencji przed zwolnieniem ctx.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: sched/cache: Introduce task_struct->sched_cache_grp to fix UAF Add a sched_cache_grp pointer to task_struct so that scheduler code can access the cache group directly via the task, without going through mm->sched_cache_grp. This decouples the scheduler's hot-path accesses from the mm_struct. Each task holds its own refcount on the sched_cache_group, separate from the reference held by its mm_struct. The reference is acquired in copy_mm() (fork) and exec_mmap() (exec), and released in exit_mm(). This fixes the use-after-free when account_mm_sched() reaches the group through a task whose mm is being switched, as reported by Hyunwoo: https://lore.kernel.org/lkml/apPb-Dr4nPYuHQOK@v4bel/ Convert all scheduler code in fair.c and exit.c to use p->sched_cache_grp instead of p->mm->sched_cache_grp. Keep the fork/exec/exit reference management out of the generic mm paths: add sched_cache_fork(), sched_cache_fork_cleanup(), sched_cache_exec_mmap() and sched_cache_exit_mm() in kernel/sched/cache_sched.c (with empty stubs for !CONFIG_SCHED_CACHE), so fs/exec.c, kernel/fork.c and kernel/exit.c each call one helper instead of open-coding the refcounting under #ifdef. Also add sched_cache_group_get() and task_cache_group_get().
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

