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: Tue, 22 Sep 2026 00:07:24 +0100	[thread overview]
Message-ID: <ead9ced1-527d-4a36-87f2-2878921c1696@arm.com> (raw)
In-Reply-To: <a955032c-3e49-4b51-bf93-dd9718bed16a@arm.com>

On 20/09/2026 23:24, Suzuki K Poulose wrote:
> 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?

I went back to this and the behavior is as per the DEN0057A.b, Section
4.2, the guest must use ARM_SMCCC_HV_PV_TIME_FEATURES call to actually
test if the FIDs are implemented. So, we can ignore this one.

Cheers
Suzuki


>>
> 


  reply	other threads:[~2026-09-21 23:07 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
2026-09-21 23:07       ` Suzuki K Poulose [this message]
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=ead9ced1-527d-4a36-87f2-2878921c1696@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