All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.