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.
The `vgic_its_invalidate_cache()` function iterates over the ITS translation cache using `xa_for_each()` and releases cache references for each entry by calling `vgic_put_irq()`. The bug is that instead of the pointer returned by `xa_erase()` (the actually removed entry), the function releases the reference to the pointer from the iteration. Since this function can be called concurrently by multiple code paths (ITS command handlers, GITS_CTLR write path, EnableLPIs cleanup path in GICR_CTLR), which do not mutually exclude each other, each can observe the same entry, remove it, and release the reference — resulting in multiple releases of a single cache reference. The effect is a situation where an entry can be freed despite still being mapped by an ITE (ITS Table Entry).
An attacker or malicious code running locally can trigger a use-after-free error in the kernel, potentially enabling privilege escalation, data disclosure, or host system destabilization (denial of service) in a KVM virtualization environment on arm64 architecture.
Apply patches available in stable Linux kernel branches according to references: commits 13031fb6b835, 2bbc395e81bd, 9121f4605ab9, and b7b72e88046 available at git.kernel.org/stable addresses indicated in the vulnerability description.
Linux kernel with KVM arm64 subsystem (vgic-its); specific versions indicated in vendor references (patches available in stable kernel branches at addresses provided in references).
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:HLinux Kernel
OSLinux7.16.10 – 6.12.93 (excl.)6.13 – 6.18.35 (excl.)6.19 – 7.0.12 (excl.)
Related vulnerabilities
Type confusion w V8 (Google Chrome) — zdalne uszkodzenie sterty
Commvault Command Center – nieuwierzytelniony RCE przez path traversal w ZIP
RCE przez YAML deserialization w IBM Aspera Faspex
RCE w VMware Workspace ONE Access i Identity Manager poprzez server-side template injection
Command Injection w VMware Workspace One Access i Identity Manager