Description
In the Linux kernel, the following vulnerability has been resolved: KVM: arm64: Bound used_lrs when flushing the pKVM hyp vCPU flush_hyp_vcpu() copies the host vGIC state into the hyp's private vCPU on every run. The vGIC list register save and restore use used_lrs as their loop bound and expect it to stay within the number of implemented list registers. While this is generally the case, flush_hyp_vcpu() copies vgic_v3 verbatim and does not enforce this, so a value provided by the host is used at EL2 to index vgic_lr[] and access ICH_LR<n>_EL2 (host -> EL2). Fix by clamping used_lrs to the number of implemented list registers after the copy, as the trusted path already does in vgic_flush_lr_state(). The number of implemented list registers is constant after init, so it is replicated once from kvm_vgic_global_state.nr_lr into hyp_gicv3_nr_lr rather than read on every entry.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
be66e67f175096f283c9d5614c4991fc9e7ed975 to < 2c5e72b9fbf83fdfa724e9f1af0f418ccf8739b8affectedbe66e67f175096f283c9d5614c4991fc9e7ed975 to < 9fa301d8298778dd799fa4dcf7a7f440715d146eaffectedbe66e67f175096f283c9d5614c4991fc9e7ed975 to < c646431865f4b1a5b14067233fa27b11e05e0d46affectedbe66e67f175096f283c9d5614c4991fc9e7ed975 to < 7fca3fcef81c713bc82a37bf741e0f28e6d04a6faffectedbe66e67f175096f283c9d5614c4991fc9e7ed975 to < 8cc8bbbfab14c22c5551d0dd19b208a44b141c76affected
Linux Linux
Default version status: affected
6.2affected0 to < 6.2unaffected6.6.145 to ≤ 6.6.*unaffected6.12.97 to ≤ 6.12.*unaffected6.18.40 to ≤ 6.18.*unaffected7.1.4 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/2c5e72b9fbf83fdfa724e9f1af0f418ccf8739b8 ↗
- https://git.kernel.org/stable/c/9fa301d8298778dd799fa4dcf7a7f440715d146e ↗
- https://git.kernel.org/stable/c/c646431865f4b1a5b14067233fa27b11e05e0d46 ↗
- https://git.kernel.org/stable/c/7fca3fcef81c713bc82a37bf741e0f28e6d04a6f ↗
- https://git.kernel.org/stable/c/8cc8bbbfab14c22c5551d0dd19b208a44b141c76 ↗