Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: Suzuki K Poulose <suzuki.poulose@arm.com>
To: sashiko-reviews@lists.linux.dev
Cc: kvm@vger.kernel.org, Oliver Upton <oupton@kernel.org>,
	Marc Zyngier <maz@kernel.org>,
	kvmarm@lists.linux.dev
Subject: Re: [PATCH v19 02/20] KVM: arm64: Disable Steal time accounting for protected guests
Date: Sun, 20 Sep 2026 23:24:24 +0100	[thread overview]
Message-ID: <a955032c-3e49-4b51-bf93-dd9718bed16a@arm.com> (raw)
In-Reply-To: <20260920214421.D84B81F000FF@smtp.kernel.org>

On 20/09/2026 22:44, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [Medium] arm64: kvm: contradictory SMCCC advertisement for PV_TIME on protected VMs
> --
> 
> commit db2c057e4ceefd58162587d4fd417788a4db3dbc
> Author: Suzuki K Poulose <suzuki.poulose@arm.com>
> 
>      KVM: arm64: Disable Steal time accounting for protected guests
>      
>      PVTIME support is advertised by KVM_CAP_STEAL_TIME, which doesn't take into
>      account the kvm instance. Even with that, a VMM could skip the CAP check
>      and proceed to configure the PVTIME as we don't do further check on the
>      DEVICE_CTRL. Tighten this up by passing the KVM instance around wherever
>      possible and catch things early.
> 
>> diff --git a/arch/arm64/kvm/pvtime.c b/arch/arm64/kvm/pvtime.c
>> index 4ceabaa4c30bd..579e0a4720ad2 100644
>> --- a/arch/arm64/kvm/pvtime.c
>> +++ b/arch/arm64/kvm/pvtime.c
>> @@ -67,9 +67,9 @@ gpa_t kvm_init_stolen_time(struct kvm_vcpu *vcpu)
>>   	return base;
>>   }
>>   
>> -bool kvm_arm_pvtime_supported(void)
>> +bool kvm_arm_pvtime_supported(struct kvm *kvm)
>>   {
>> -	return !!sched_info_on();
>> +	return !!sched_info_on() && (!kvm || !kvm_vm_is_protected(kvm));
>>   }
> 
> [Severity: Medium]
> Does this create a contradictory SMCCC advertisement for protected VMs?
> 
> A protected guest querying ARM_SMCCC_ARCH_FEATURES_FUNC_ID for
> ARM_SMCCC_HV_PV_TIME_FEATURES in kvm_smccc_call_handler() will receive
> SMCCC_RET_SUCCESS because the KVM_REG_ARM_STD_HYP_BIT_PV_TIME bit is
> still set in std_hyp_bmap:

This looks like an existing issue in the code. I have something
like this to fix this :

diff --git a/arch/arm64/kvm/hypercalls.c b/arch/arm64/kvm/hypercalls.c
index b11b8821c9fbc..6fabcd8aaacb9 100644
--- a/arch/arm64/kvm/hypercalls.c
+++ b/arch/arm64/kvm/hypercalls.c
@@ -402,6 +402,9 @@ void kvm_arm_init_hypercalls(struct kvm *kvm)

         smccc_feat->std_bmap = KVM_ARM_SMCCC_STD_FEATURES;
         smccc_feat->std_hyp_bmap = KVM_ARM_SMCCC_STD_HYP_FEATURES;
+       /* Clear PV_TIME support for protected VMs */
+       if (kvm_vm_is_protected(kvm))
+               clear_bit(KVM_REG_ARM_STD_HYP_BIT_PV_TIME, 
&smccc_feat->std_hyp_bmap);
         smccc_feat->vendor_hyp_bmap = KVM_ARM_SMCCC_VENDOR_HYP_FEATURES;

         mt_init(&kvm->arch.smccc_filter);
@@ -532,6 +535,9 @@ static int kvm_arm_set_fw_reg_bmap(struct kvm_vcpu 
*vcpu, u64 reg_id, u64 val)
         case KVM_REG_ARM_STD_HYP_BMAP:
                 fw_reg_bmap = &smccc_feat->std_hyp_bmap;
                 fw_reg_features = KVM_ARM_SMCCC_STD_HYP_FEATURES;
+               /* PV_TIME is not supported for protected VMs */
+               if (vcpu_is_protected(vcpu))
+                       clear_bit(KVM_REG_ARM_STD_HYP_BIT_PV_TIME, 
&fw_reg_features);
                 break;
         case KVM_REG_ARM_VENDOR_HYP_BMAP:
                 fw_reg_bmap = &smccc_feat->vendor_hyp_bmap;

Suzuki

> 
> arch/arm64/kvm/hypercalls.c:kvm_smccc_call_handler() {
> 	...
> 	case ARM_SMCCC_HV_PV_TIME_FEATURES:
> 		if (test_bit(KVM_REG_ARM_STD_HYP_BIT_PV_TIME,
> 			     &smccc_feat->std_hyp_bmap))
> 			val[0] = SMCCC_RET_SUCCESS;
> 		break;
> 	...
> }
> 
> However, when the guest actually invokes the feature,
> kvm_hypercall_pv_features() returns SMCCC_RET_NOT_SUPPORTED because
> the IPA is unconfigured:
> 
> arch/arm64/kvm/pvtime.c:kvm_hypercall_pv_features() {
> 	...
> 	case ARM_SMCCC_HV_PV_TIME_FEATURES:
> 	case ARM_SMCCC_HV_PV_TIME_ST:
> 		if (vcpu->arch.steal.base != INVALID_GPA)
> 			val = SMCCC_RET_SUCCESS;
> 		break;
> 	...
> }
> 
> This violates the SMCCC ABI by advertising ARM_SMCCC_HV_PV_TIME_FEATURES
> as supported but returning NOT_SUPPORTED when it is invoked. Should the
> KVM_REG_ARM_STD_HYP_BIT_PV_TIME bit be cleared for protected VMs?
> 


  reply	other threads:[~2026-09-20 22:24 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-20 21:28 [PATCH v19 00/20] KVM: arm64: CCA: Add basic plumbing for Realms Suzuki K Poulose
2026-09-20 21:28 ` [PATCH v19 01/20] KVM: arm64: protected VM: Handle user writes to CNTVCT_EL0/CNTPCT_EL0 Suzuki K Poulose
2026-09-22 19:25   ` Jonathan Cameron
2026-09-22 21:53     ` Suzuki K Poulose
2026-09-23 16:48       ` Jonathan Cameron
2026-09-22 22:04     ` Suzuki K Poulose
2026-09-23 16:51       ` Jonathan Cameron
2026-09-20 21:28 ` [PATCH v19 02/20] KVM: arm64: Disable Steal time accounting for protected guests Suzuki K Poulose
2026-09-20 21:44   ` sashiko-bot
2026-09-20 22:24     ` Suzuki K Poulose [this message]
2026-09-21 23:07       ` Suzuki K Poulose
2026-09-28  0:14   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 03/20] KVM: arm64: Include kvm_emulate.h in kvm/arm_psci.h Suzuki K Poulose
2026-09-22 19:32   ` Jonathan Cameron
2026-09-20 21:28 ` [PATCH v19 04/20] KVM: arm64: Avoid including linux/kvm_host.h in kvm_pgtable.h Suzuki K Poulose
2026-09-20 21:38   ` sashiko-bot
2026-09-21  8:25     ` Suzuki K Poulose
2026-09-20 21:28 ` [PATCH v19 05/20] KVM: arm64: Track the type of VM in kvm_arch Suzuki K Poulose
2026-09-20 21:38   ` sashiko-bot
2026-09-21  8:18     ` Suzuki K Poulose
2026-09-22 19:40   ` Jonathan Cameron
2026-09-23  6:05   ` Gavin Shan
2026-09-23  6:19     ` Gavin Shan
2026-09-23 10:24       ` Suzuki K Poulose
2026-09-23 13:23         ` Gavin Shan
2026-09-23 13:29           ` Gavin Shan
2026-09-23 13:54             ` Suzuki K Poulose
2026-09-23 16:27           ` Suzuki K Poulose
2026-09-23 21:37             ` Suzuki K Poulose
2026-09-24  1:11               ` Gavin Shan
2026-09-24  8:48                 ` Suzuki K Poulose
2026-09-24 10:37                   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 06/20] KVM: arm64: Refactor the vcpu_load to allow for VM specific callbacks Suzuki K Poulose
2026-09-22 19:57   ` Jonathan Cameron
2026-09-22 22:09     ` Suzuki K Poulose
2026-09-20 21:28 ` [PATCH v19 07/20] KVM: arm64: Add vcpu load/put call backs for flavors Suzuki K Poulose
2026-09-22 22:12   ` Jonathan Cameron
2026-09-20 21:28 ` [PATCH v19 08/20] KVM: arm64: Reuse kvm_stage2_unmap_range in kvm_unmap_gfn_range Suzuki K Poulose
2026-09-22 22:15   ` Jonathan Cameron
2026-09-28  0:17   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 09/20] KVM: arm64: Add VM specific callback for S2 MMU operations Suzuki K Poulose
2026-09-22 22:29   ` Jonathan Cameron
2026-09-22 23:21     ` Suzuki K Poulose
2026-09-23 16:54       ` Jonathan Cameron
2026-09-24 15:11         ` Suzuki K Poulose
2026-09-28  1:09   ` Gavin Shan
2026-09-28  1:25     ` Gavin Shan
2026-09-28  8:13       ` Suzuki K Poulose
2026-09-28  8:10     ` Suzuki K Poulose
2026-09-20 21:28 ` [PATCH v19 10/20] KVM: arm64: Abstract out memory abort handling Suzuki K Poulose
2026-09-22 22:38   ` Jonathan Cameron
2026-09-22 23:55     ` Suzuki K Poulose
2026-09-20 21:28 ` [PATCH v19 11/20] KVM: arm64: Mandate VGIC v3 for for VMs running on hyp that don't trust the host Suzuki K Poulose
2026-09-22 22:42   ` Jonathan Cameron
2026-09-22 23:38     ` Suzuki K Poulose
2026-09-28  1:10   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 12/20] KVM: arm64: CCA: Add a new mode for supporting Realm guests Suzuki K Poulose
2026-09-22 22:43   ` Jonathan Cameron
2026-09-20 21:28 ` [PATCH v19 13/20] KVM: arm64: CCA: Add VCPU load/put for Realms Suzuki K Poulose
2026-09-28  1:22   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 14/20] KVM: arm64: CCA: Add bare minimal S2 operations for Realm Suzuki K Poulose
2026-09-28  1:27   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 15/20] KVM: arm64: CCA: Introduce Realms Suzuki K Poulose
2026-09-22 22:49   ` Jonathan Cameron
2026-09-28  1:27   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 16/20] KVM: arm64: CCA: Don't expose unsupported capabilities for realm guests Suzuki K Poulose
2026-09-22 22:53   ` Jonathan Cameron
2026-09-20 21:28 ` [PATCH v19 17/20] KVM: arm64: CCA: WARN on injected undef exceptions Suzuki K Poulose
2026-09-22 22:54   ` Jonathan Cameron
2026-09-28  1:28   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 18/20] KVM: arm64: CCA: Support timers in realm RECs Suzuki K Poulose
2026-09-20 21:28 ` [PATCH v19 19/20] KVM: arm64: CCA: Expose SVE VL register before VCPU finalization Suzuki K Poulose
2026-09-28  1:29   ` Gavin Shan
2026-09-20 21:28 ` [PATCH v19 20/20] KVM: arm64: CCA: Control user register access for Realms Suzuki K Poulose
2026-09-28  1:30   ` Gavin Shan
2026-09-24 10:40 ` [PATCH v19 00/20] KVM: arm64: CCA: Add basic plumbing " Gavin Shan
2026-09-24 10:49   ` Suzuki K Poulose

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=a955032c-3e49-4b51-bf93-dd9718bed16a@arm.com \
    --to=suzuki.poulose@arm.com \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --cc=maz@kernel.org \
    --cc=oupton@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox