Katalog CVE

CVE-2026-89547

WysokieCVSS 8.1
Opublikowano: Zaktualizowano: Przetłumaczono: NVD NIST

Prawdopodobieństwo exploitacji (EPSS)

Niskie ryzyko
0.57%

Percentyl 45 - wyżej niż 45% wszystkich znanych CVE

Streszczenie

W jądrze Linux funkcja __svc_create() ignorowała wartości zwracane przez percpu_counter_init() przy inicjalizacji trzech liczników statystyk puli RPC. Gdy alokacja per-CPU pamięci nie powiedzie się (np. przy presji pamięciowej), usługa RPC (nfsd, lockd, callback NFS) jest uruchamiana z niepoprawnie zainicjalizowanymi licznikami, których wskaźnik per-CPU ma wartość NULL. Powoduje to cichą korupcję danych w obszarze per-CPU bieżącego procesora oraz zwracanie błędnych wartości w /proc/fs/nfsd/pool_stats.

Ocena ryzyka

Podatność może prowadzić do cichej korupcji pamięci jądra i niestabilności systemu, jednak do jej wywołania wymagany jest lokalny administrator oraz awaria alokacji per-CPU (presja pamięciowa lub wstrzykiwanie błędów). Zdalny atakujący nie może samodzielnie wywołać tego stanu.

Rekomendacja

Zaktualizuj jądro Linux do wersji zawierającej poprawkę, która sprawdza wartości zwracane przez percpu_counter_init() w __svc_create() i prawidłowo zwalnia już zainicjalizowane liczniki w przypadku błędu. Do czasu aktualizacji monitoruj zużycie pamięci serwerów NFS/RPC i unikaj sytuacji skrajnej presji pamięciowej.

Inne podatności w Linux kernel

Zobacz wszystkie
Oryginalny opis (angielski, źródło NVD)

In the Linux kernel, the following vulnerability has been resolved: SUNRPC: Check svc pool percpu counter allocation __svc_create() initializes three per-pool percpu_counter stats and ignores every return value. On SMP, percpu_counter_init() fails when __alloc_percpu_gfp() cannot satisfy the allocation, leaving the failed counter with fbc->counters == NULL and its embedded raw_spinlock_t, list_head, and count never initialized. __svc_create() returns the half-constructed svc_serv to nfsd, lockd, or the NFS callback service anyway. Once that service is live, the hot-path increments in svc_xprt_enqueue(), svc_handle_xprt(), and svc_pool_wake_idle_thread() reach a counter whose backing pointer is NULL. The pointer is a per-cpu offset, so the access does not fault: it resolves to offset zero of the current CPU's per-cpu area and silently corrupts whatever variable lives there. A /proc/fs/nfsd/pool_stats read walks the same NULL per-cpu storage and returns garbage, and on CONFIG_DEBUG_SPINLOCK or lockdep it splats on the never-initialized lock. Creating the broken service requires a percpu allocation failure during RPC server startup, so it is reachable only by a local administrator under memory pressure or fault injection; a remote peer cannot induce the bad state on its own. Check each percpu_counter_init() return value in __svc_create() and fail when an allocation fails, unwinding the counters already set up in the current pool and in every pool initialized before it. A discrete percpu_counter_destroy() per counter at teardown frees each per-cpu allocation exactly once.

Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS