All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Fuad Tabba" <fuad.tabba@linux.dev>
Cc: "Oliver Upton" <oupton@kernel.org>,
	kvmarm@lists.linux.dev, "Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH v2 06/17] KVM: arm64: Add system register reset framework for protected VMs
Date: Mon, 07 Sep 2026 07:16:16 +0000	[thread overview]
Message-ID: <20260907071617.2BB6D1F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260907070002.3333525-7-fuad.tabba@linux.dev>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Medium] Missing EL1 system registers from the pKVM reset array `pvm_sys_reg_reset_vals`.
- [Medium] Invalid numeric comparison (>=) over sparse `enum vcpu_sysreg` values to enforce fragile array sorting.
--

commit 7a5dc29475a7c4550659db2df410ae56a785635e
Author: Fuad Tabba <fuad.tabba@linux.dev>
Subject: KVM: arm64: Add system register reset framework for protected VMs

This patch introduces the system register reset framework for protected VMs,
adding kvm_reset_pvm_sys_regs() and its driving array pvm_sys_reg_reset_vals.
It populates reset values for sysregs that need to be reset to UNKNOWN or
explicit values for pKVM guests.

> diff --git a/arch/arm64/kvm/hyp/nvhe/sys_regs.c b/arch/arm64/kvm/hyp/nvhe/sys_regs.c
> index 8758c68017765..03d2c2447e0fd 100644
> --- a/arch/arm64/kvm/hyp/nvhe/sys_regs.c
> +++ b/arch/arm64/kvm/hyp/nvhe/sys_regs.c

[ ... ]

> +/* Sorted ascending by reg; kvm_check_pvm_sysreg_table() enforces it. */
> +static const struct sys_reg_desc_reset pvm_sys_reg_reset_vals[] = {
> +	RESET_FUNC(MPIDR_EL1, reset_mpidr),
> +	RESET_UNKNOWN(TPIDR_EL0),
> +	RESET_UNKNOWN(TPIDRRO_EL0),
> +	RESET_UNKNOWN(TPIDR_EL1),

[Severity: Medium]
Are we missing several EL1 system registers from this array? The commit
message mentions this table is supposed to hold the registers that
sys_regs.c resets to UNKNOWN. However, it seems to omit several newer
architectural registers (like PIR_EL1, PIRE0_EL1, POR_EL1, POR_EL0, 
TFSR_EL1, TFSRE0_EL1) which __sysreg_restore_state_nvhe() explicitly restores
for a protected vCPU.

Because the hyp vCPU page is zeroed, these omitted registers will be
zero-initialized instead of receiving the intended poison value
(0x1de7ec7edbadc0deULL) when kvm_reset_pvm_sys_regs() is called for a
protected VM.

[ ... ]

> @@ -550,16 +610,21 @@ void kvm_init_pvm_id_regs(struct kvm_vcpu *vcpu)

[ ... ]

>  int kvm_check_pvm_sysreg_table(void)
>  {
>  	unsigned int i;
>  
>  	for (i = 1; i < ARRAY_SIZE(pvm_sys_reg_descs); i++) {
> -		if (cmp_sys_reg(&pvm_sys_reg_descs[i-1], &pvm_sys_reg_descs[i]) >= 0)
> +		if (cmp_sys_reg(&pvm_sys_reg_descs[i - 1], &pvm_sys_reg_descs[i]) >= 0)
> +			return 1;
> +	}
> +
> +	for (i = 1; i < ARRAY_SIZE(pvm_sys_reg_reset_vals); i++) {
> +		if (pvm_sys_reg_reset_vals[i - 1].reg >= pvm_sys_reg_reset_vals[i].reg)
>  			return 1;
>  	}

[Severity: Medium]
Is it safe to use a numeric comparison (>=) over the .reg field here? 
Since pvm_sys_reg_reset_vals[].reg contains enum vcpu_sysreg values,
and these are indexed by their VNCR-page byte offset rather than in
declaration order, a layout change or new enum value could reorder their
integer values.

If that happens, the static array's manually sorted order would break, 
triggering a fatal BUG_ON() at boot during hypervisor initialization. 
Should this enforce an explicit allowlist or a different sorting mechanism
instead of a numeric range check?

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260907070002.3333525-1-fuad.tabba@linux.dev?part=6

  reply	other threads:[~2026-09-07  7:16 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-07  6:59 [PATCH v2 00/16] KVM: arm64: Confine protected VM vCPU state to EL2 Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 01/17] KVM: arm64: Sync HCR_EL2.VSE back to the host vCPU under pKVM Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 02/17] KVM: arm64: Reject the PVTIME vCPU attribute for protected VMs Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 03/17] KVM: arm64: Introduce per-EC entry handlers for pKVM Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 04/17] KVM: arm64: Skip fixed-feature state flush for protected vCPUs Fuad Tabba
2026-09-07  7:23   ` sashiko-bot
2026-09-07  9:11     ` Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 05/17] KVM: arm64: Add {flush,sync}_hyp_timer_state() primitives Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 06/17] KVM: arm64: Add system register reset framework for protected VMs Fuad Tabba
2026-09-07  7:16   ` sashiko-bot [this message]
2026-09-07  9:12     ` Fuad Tabba
2026-09-09 13:50   ` Joey Gouly
2026-09-10 10:05     ` Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 07/17] KVM: arm64: Implement HVC handling for protected guests at EL2 Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 08/17] KVM: arm64: Handle PSCI calls for protected VMs " Fuad Tabba
2026-09-07  7:16   ` sashiko-bot
2026-09-07  9:14     ` Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 09/17] KVM: arm64: Restrict KVM_ARM_VCPU_INIT and PSCI version for protected VMs Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 10/17] KVM: arm64: Prevent host PC adjustments for protected vCPUs Fuad Tabba
2026-09-11 13:23   ` Joey Gouly
2026-09-14  6:21     ` Fuad Tabba
2026-09-11 13:58   ` Marc Zyngier
2026-09-14  6:15     ` Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 11/17] KVM: arm64: Inject an UNDEF at EL2 for unhandled protected guest exits Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 12/17] KVM: arm64: Add per-EC entry/exit state marshalling for protected guests Fuad Tabba
2026-09-07  7:26   ` sashiko-bot
2026-09-07  9:15     ` Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 13/17] KVM: arm64: Pend a protected guest's SError with HCR_EL2.VSE only Fuad Tabba
2026-09-11 10:29   ` Marc Zyngier
2026-09-11 10:58     ` Fuad Tabba
2026-09-07  6:59 ` [PATCH v2 14/17] KVM: arm64: Reject host access to protected VM private state Fuad Tabba
2026-09-11 12:58   ` Marc Zyngier
2026-09-14  6:32     ` Fuad Tabba
2026-09-07  7:00 ` [PATCH v2 15/17] KVM: arm64: Reject host power-on of a vCPU that EL2 holds powered off Fuad Tabba
2026-09-07  7:29   ` sashiko-bot
2026-09-07  9:17     ` Fuad Tabba
2026-09-07  7:00 ` [PATCH v2 16/17] KVM: arm64: Advertise the capabilities that protected VMs support Fuad Tabba
2026-09-07  7:00 ` [PATCH v2 17/17] KVM: arm64: Document the protected VM userspace API Fuad Tabba

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=20260907071617.2BB6D1F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=fuad.tabba@linux.dev \
    --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.