Linux KVM/arm64 development list
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Fuad Tabba" <fuad.tabba@linux.dev>
Cc: kvmarm@lists.linux.dev, "Oliver Upton" <oupton@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH v1 10/11] KVM: arm64: nVHE: Check hypercall handlers against the declared ABI
Date: Mon, 20 Jul 2026 17:42:29 +0000	[thread overview]
Message-ID: <20260720174229.DF3AB1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260720162412.1401272-1-fuad.tabba@linux.dev>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:

Pre-existing issues:
- [Critical] The MDCR_EL2 trap configuration register is unconditionally copied from the untrusted host VCPU on every guest entry, violating pKVM isolation guarantees for protected VMs.
- [Critical] The protected VM's register context (`ctxt`) is copied back to the untrusted host VCPU on every exit, leaking confidential guest state.
--

--- Patch [10]: [PATCH v1 10/11] KVM: arm64: nVHE: Check hypercall handlers against the declared ABI ---
commit 3f8ed457b3a7f1b8aabe10f15d93afe4df7e93a2
Author: Fuad Tabba <fuad.tabba@linux.dev>

KVM: arm64: nVHE: Check hypercall handlers against the declared ABI

This commit generates the unmarshalling of hypercall handlers using
DEFINE_KVM_HOST_HCALL. It checks the handler's parameter list against the
signature declared in kvm_hcall.h to prevent caller/handler disagreements.
Manual DECLARE_REG casts are removed from the handler bodies.

> diff --git a/arch/arm64/kvm/hyp/nvhe/hyp-main.c b/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> --- a/arch/arm64/kvm/hyp/nvhe/hyp-main.c
> +++ b/arch/arm64/kvm/hyp/nvhe/hyp-main.c

[ ... ]

> @@ -228,15 +282,11 @@ static void handle___kvm_vcpu_run(struct kvm_cpu_context *host_ctxt)
>  		 * loading a vcpu. Therefore, if SME features enabled the host
>  		 * is misbehaving.
>  		 */
> -		if (unlikely(system_supports_sme() && read_sysreg_s(SYS_SVCR))) {
> -			ret = -EINVAL;
> -			goto out;
> -		}
> +		if (unlikely(system_supports_sme() && read_sysreg_s(SYS_SVCR)))
> +			return -EINVAL;
>  
> -		if (!hyp_vcpu) {
> -			ret = -EINVAL;
> -			goto out;
> -		}
> +		if (!hyp_vcpu)
> +			return -EINVAL;
>  
>  		flush_hyp_vcpu(hyp_vcpu);

[Severity: Critical]
This is a pre-existing issue, but does this function allow the untrusted
host to bypass pKVM isolation guarantees?

Looking at flush_hyp_vcpu() in arch/arm64/kvm/hyp/nvhe/hyp-main.c, the
MDCR_EL2 trap configuration is copied unconditionally from the untrusted
host vCPU on every guest entry:

hyp_vcpu->vcpu.arch.mdcr_el2 = host_vcpu->arch.mdcr_el2;

For a protected VM, the MDCR_EL2 trap configuration should be strictly
EL2-private and initialized internally. By syncing this from the host on
every entry, could the host maliciously reconfigure the guest's debug
traps?

[Severity: Critical]
This is also a pre-existing issue, but does the exit path leak
confidential guest execution state to the host?

In the corresponding sync_hyp_vcpu() function called after the guest
run, the protected VM's register context is copied back to the host
vCPU:

host_vcpu->arch.ctxt = hyp_vcpu->vcpu.arch.ctxt;

Since this copies the hypervisor's private copy of the guest's context
back into the host-controlled structure, won't this allow the host EL1
to directly inspect highly confidential execution state (including
general purpose registers and system registers) after the hypercall
returns?

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

  parent reply	other threads:[~2026-07-20 17:42 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-20 16:13 [PATCH v1 00/11] KVM: arm64: Restore type-checking across the host/hyp hypercall boundary Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 01/11] tracing: Include linux/types.h in trace_remote_event.h Fuad Tabba
2026-07-20 18:32   ` Steven Rostedt
2026-07-20 16:13 ` [PATCH v1 02/11] KVM: arm64: nVHE: Share the stacktrace per-CPU declarations with EL2 Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 03/11] KVM: arm64: nVHE: Declare the hyp event IDs before defining them Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 04/11] KVM: arm64: nVHE: Use NULL to reset the trace buffer backing pointer Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 05/11] KVM: arm64: nVHE: Run the source checker under C=2 Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 06/11] arm64: pi: Run the source checker on the libfdt objects " Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 07/11] KVM: arm64: nVHE: Pass host VA arguments as pointers Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 08/11] KVM: arm64: Move the host hypercall interface to its own header Fuad Tabba
2026-07-20 16:13 ` [PATCH v1 09/11] KVM: arm64: Type-check hypercall arguments at the caller Fuad Tabba
2026-07-20 17:29   ` sashiko-bot
2026-07-20 17:59     ` Fuad Tabba
2026-07-30 12:37   ` Marc Zyngier
2026-07-30 13:47     ` Fuad Tabba
2026-07-20 16:24 ` [PATCH v1 10/11] KVM: arm64: nVHE: Check hypercall handlers against the declared ABI Fuad Tabba
2026-07-20 16:24   ` [PATCH v1 11/11] KVM: arm64: Tag host-VA hypercall parameters __hostva Fuad Tabba
2026-07-20 17:55     ` sashiko-bot
2026-07-20 18:24       ` Fuad Tabba
2026-07-20 17:42   ` sashiko-bot [this message]
2026-07-20 18:01     ` [PATCH v1 10/11] KVM: arm64: nVHE: Check hypercall handlers against the declared ABI 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=20260720174229.DF3AB1F000E9@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox