CRITICAL🇬🇧 English

CVE-2026-46316

Linux kernel KVM arm64: wielokrotne zwolnienie referencji w cache ITS vgic

CVSS 9.3pub. 2026-06-09upd. 2026-07-03

Podatność w podsystemie KVM arm64 jądra Linux dotyczy błędu zarządzania referencjami w cache translacji vgic-its, który może prowadzić do zwolnienia pamięci będącej nadal w użyciu (use-after-free). Ze względu na krytyczny wynik CVSS 9.3 i możliwość wpływu na poufność, integralność oraz dostępność systemu, podatność wymaga pilnego załatania.

Pokaż oryginał (EN)

In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: vgic-its: Drop the translation cache reference only for the erased entry vgic_its_invalidate_cache() walks the per-ITS translation cache with xa_for_each() and drops the cache's reference on each entry with vgic_put_irq(). It puts the iterated pointer, though, rather than the value returned by xa_erase(). The function is called from contexts that do not exclude one another: the ITS command handlers hold its_lock, the GITS_CTLR write path holds cmd_lock, and the path that clears EnableLPIs in a redistributor's GICR_CTLR holds neither. Two or more of them can drain the same cache concurrently, and if each one observes the same entry, erases it and then puts it, the single reference the cache holds on that entry is dropped more than once. The entry can then be freed while an ITE still maps it. xa_erase() is atomic and returns the previous entry, so put only the entry that this context actually removed. The cache reference is then dropped exactly once per entry even when the invalidations run concurrently, and the behavior is unchanged when only one context runs.

🤖 Analiza AI
Jak działa

Funkcja `vgic_its_invalidate_cache()` iteruje po cache translacji ITS przy użyciu `xa_for_each()` i zwalnia referencje cache na każdy wpis wywołaniem `vgic_put_irq()`. Błąd polega na tym, że zamiast wskaźnika zwróconego przez `xa_erase()` (czyli faktycznie usuniętego wpisu), funkcja zwalnia referencję do wskaźnika z iteracji. Ponieważ funkcja ta może być wywoływana współbieżnie przez wiele ścieżek kodu (handlery poleceń ITS, ścieżka zapisu GITS_CTLR, ścieżka czyszcząca EnableLPIs w GICR_CTLR), które wzajemnie się nie wykluczają, każda z nich może zaobserwować ten sam wpis, usunąć go i zwolnić referencję — co prowadzi do wielokrotnego zwolnienia pojedynczej referencji cache. Efektem jest sytuacja, w której wpis może zostać zwolniony, mimo że nadal jest mapowany przez ITE (ITS Table Entry).

Skutki

Atakujący lub złośliwy kod działający lokalnie może doprowadzić do błędu use-after-free w jądrze, co potencjalnie umożliwia eskalację uprawnień, ujawnienie danych lub destabilizację systemu hosta (denial of service) w środowisku wirtualizacji KVM na architekturze arm64.

Mitygacja

Należy zastosować patche dostępne w stabilnych gałęziach jądra Linux zgodnie z referencjami: commit 13031fb6b835, 2bbc395e81bd, 9121f4605ab9 oraz b7b72e88046 dostępne pod adresami git.kernel.org/stable wskazanymi w opisie podatności.

Kogo dotyczy

Jądro Linux z podsystemem KVM arm64 (vgic-its); konkretne wersje wskazane w referencjach producenta (patche dostępne w stabilnych gałęziach jądra pod adresami podanymi w referencjach).

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
🔵
ZWERYFIKUJ U PRODUCENTA
Brak jednoznacznych danych o patchu. Sprawdź referencje od producenta.
CWE
Referencje