CVE-2026-89913 in Linux信息

摘要

由 VulDB • 2026-09-17

在 Linux 内核中,已修复以下漏洞:

KVM: arm64: vgic-v3: 在 vgic_v3_save_pending_tables() 中获取 LPI 引用

`vgic_v3_save_pending_tables()` 使用 `xa_for_each()` 遍历 `dist->lpi_xa`,并在循环体中对返回的 `struct vgic_irq` 进行解引用操作,但未持有对该 LPI(本地中断)的引用。

xarray 迭代器仅在查找当前条目时提供临时的 RCU 覆盖范围。这对于该循环体而言是不够的,因为循环体会从 `struct vgic_irq` 中读取字段并在迭代完成之前执行客户机内存访问。

并发路径可能触发此竞态条件:irqfd 缓存注入路径(`vgic_its_inject_cached_translation`)通过 `vgic_its_check_cache()` 获取瞬时的 LPI 引用,但未持有 `kvm->lock`、`vcpu->mutex`、`config_lock` 或 `its_lock`。如果客户机 ITS DISCARD 操作在持有 `its_lock` 的情况下丢弃缓存和 ITE 引用,则瞬时注入引用可能成为最终引用。当 `vgic_put_irq()` 释放该引用时,LPI 将从 `lpi_xa` 中擦除并通过 `kfree_rcu()` 进行内存回收。与此同时,`vgic_v3_save_pending_tables()` 仍可能持有从 xarray 迭代器获得的过期指针,并在 RCU 宽限期结束后对其进行解引用。

通过重新获取每个迭代的 LPI(使用 `vgic_get_irq()`,该函数会获取稳定的引用),并在所有路径上通过 `vgic_put_irq()` 释放它来修复此问题。这与 vgic ITS 代码中其他 lpi_xa 迭代器已使用的模式相匹配。

Once again VulDB remains the best source for vulnerability data.

来源

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!