Re: [PATCH v3 1/5] KVM: arm64: Reject the GICv5 CPU interface hypercalls under pKVM
From: Marc Zyngier
Date: Sat Oct 17 2026 - 12:25:22 EST
On Mon, 12 Oct 2026 17:15:20 +0100,
Fuad Tabba <fuad.tabba@xxxxxxxxx> wrote:
>
> __vgic_v5_save_apr() and __vgic_v5_restore_vmcr_apr() remain callable
> once pKVM has finalised. pKVM never registers a GICv5 vgic, so neither
> has a valid caller in protected mode, and on a GICv3 machine both reach
> a register that is UNDEFINED at EL2 and panic the hypervisor.
>
> Move both into the band the dispatcher rejects once pKVM has finalised.
>
> Fixes: af325e87af5da ("KVM: arm64: gic-v5: Add vgic-v5 save/restore hyp interface")
> Reviewed-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx>
> Signed-off-by: Fuad Tabba <fuad.tabba@xxxxxxxxx>
> ---
> arch/arm64/include/asm/kvm_asm.h | 4 ++--
> arch/arm64/kvm/hyp/nvhe/hyp-main.c | 4 ++--
> 2 files changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
> index e5b92ac09e69e..ea319c496bb26 100644
> --- a/arch/arm64/include/asm/kvm_asm.h
> +++ b/arch/arm64/include/asm/kvm_asm.h
> @@ -62,6 +62,8 @@ enum __kvm_host_smccc_func {
> __KVM_HOST_SMCCC_FUNC___kvm_enable_ssbs,
> __KVM_HOST_SMCCC_FUNC___vgic_v3_init_lrs,
> __KVM_HOST_SMCCC_FUNC___vgic_v3_get_gic_config,
> + __KVM_HOST_SMCCC_FUNC___vgic_v5_save_apr,
> + __KVM_HOST_SMCCC_FUNC___vgic_v5_restore_vmcr_apr,
>
> MARKER(__KVM_HOST_SMCCC_FUNC_MIN_PKVM),
>
> @@ -87,8 +89,6 @@ enum __kvm_host_smccc_func {
> __KVM_HOST_SMCCC_FUNC___tracing_write_event,
> __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs,
> __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_vmcr_aprs,
> - __KVM_HOST_SMCCC_FUNC___vgic_v5_save_apr,
> - __KVM_HOST_SMCCC_FUNC___vgic_v5_restore_vmcr_apr,
>
> MARKER(__KVM_HOST_SMCCC_FUNC_PKVM_ONLY),
>
> diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> index 9a3b92e626adb..7c939baf9c1ba 100644
> --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> @@ -911,6 +911,8 @@ static const hcall_t host_hcall[] = {
> HANDLE_FUNC(__kvm_enable_ssbs),
> HANDLE_FUNC(__vgic_v3_init_lrs),
> HANDLE_FUNC(__vgic_v3_get_gic_config),
> + HANDLE_FUNC(__vgic_v5_save_apr),
> + HANDLE_FUNC(__vgic_v5_restore_vmcr_apr),
> HANDLE_FUNC(__pkvm_prot_finalize),
>
> HANDLE_FUNC(__kvm_adjust_pc),
> @@ -932,8 +934,6 @@ static const hcall_t host_hcall[] = {
> HANDLE_FUNC(__tracing_write_event),
> HANDLE_FUNC(__vgic_v3_save_aprs),
> HANDLE_FUNC(__vgic_v3_restore_vmcr_aprs),
> - HANDLE_FUNC(__vgic_v5_save_apr),
> - HANDLE_FUNC(__vgic_v5_restore_vmcr_apr),
>
> HANDLE_FUNC(__pkvm_host_share_hyp),
> HANDLE_FUNC(__pkvm_host_unshare_hyp),
In order to minimise the number of conflicts while merging this, I've
dropped the last two hunks that only serve a cosmetic purpose. Same
thing for the following patch.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.