From: Vincent Donnefort <vdonnefort@google.com>
To: sashiko-reviews@lists.linux.dev
Cc: Oliver Upton <oupton@kernel.org>, Marc Zyngier <maz@kernel.org>,
kvmarm@lists.linux.dev
Subject: Re: [PATCH 16/20] KVM: arm64: Add __pkvm_host_split_guest HVC
Date: Mon, 7 Sep 2026 11:14:45 +0100 [thread overview]
Message-ID: <ap6OlRx_Z4BJsXjZ@google.com> (raw)
In-Reply-To: <20260803105428.76EEF1F000E9@smtp.kernel.org>
On Mon, Aug 03, 2026 at 10:54:27AM +0000, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [High] Failed guest stage-2 page table splits leave the host stage-2 ownership metadata permanently split, causing subsequent split attempts to fail with -EINVAL.
> - [High] Incorrect WARN_ON() semantics in host_stage2_split_gfn_meta() turns a recoverable memory allocation failure into a fatal EL2 panic.
> --
>
> --- Patch [16]: [PATCH 16/20] KVM: arm64: Add __pkvm_host_split_guest HVC ---
> commit 76334f00eacfa593f4125057892101e13067d2e0
> Author: Vincent Donnefort <vdonnefort@google.com>
>
> KVM: arm64: Add __pkvm_host_split_guest HVC
>
> This HVC allows the host to break an existing block in a protected VM. This
> will later allow the guest to share a sub-region of an existing
> huge-mapping with the host.
>
> > diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c
> > index e16dde4c5f4b9..71ebd1856cb0c 100644
> > --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c
> > +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c
> [ ... ]
> > @@ -660,14 +658,49 @@ static int host_stage2_decode_gfn_meta(kvm_pte_t pte, struct pkvm_hyp_vm **vm,
> [ ... ]
> > + end = phys + size;
> > + while (phys < end) {
> > + u64 meta = host_stage2_encode_gfn_meta(vm, gfn);
> > + kvm_pte_t annotation = FIELD_PREP(KVM_HOST_DONATION_PTE_OWNER_MASK, PKVM_ID_GUEST) |
> > + FIELD_PREP(KVM_HOST_DONATION_PTE_EXTRA_MASK, meta);
> > +
> > + ret = host_stage2_try(kvm_pgtable_stage2_annotate, &host_mmu.pgt,
> > + phys, PAGE_SIZE, &host_s2_pool,
> > + KVM_HOST_INVALID_PTE_TYPE_DONATION, annotation);
> > + if (WARN_ON(ret))
>
> [Severity: High]
> Can a memory allocation failure here trigger a fatal EL2 panic?
>
> Since WARN_ON() at EL2 expands to a fatal BRK instruction with no "warn and
> continue" semantics, an -ENOMEM from host_stage2_try() will cause a hypervisor
> panic rather than taking the error path.
>
> > + return ret;
> > +
> > + phys += PAGE_SIZE;
> > + gfn++;
> > }
> >
> > - *gfn = FIELD_GET(KVM_HOST_PTE_OWNER_GUEST_GFN_MASK, meta);
> > return 0;
> > }
> [ ... ]
> > @@ -1748,6 +1788,39 @@ int __pkvm_host_mkyoung_guest(u64 gfn, struct pkvm_hyp_vcpu *vcpu)
> [ ... ]
> > + ret = host_stage2_split_gfn_meta(phys, ipa, size, vm);
> > + if (ret)
> > + goto unlock;
> > +
> > + ret = kvm_pgtable_stage2_split(&vm->pgt, ipa, size, mc);
>
> [Severity: High]
> Does this leave the host stage-2 ownership metadata permanently split if
> kvm_pgtable_stage2_split() fails?
>
> If the guest split fails (e.g., due to memory exhaustion returning -ENOMEM
> or -EAGAIN), the error is returned immediately without reverting the host
> stage-2 modifications made by host_stage2_split_gfn_meta(). This could cause
> subsequent split attempts for this block to fail with -EINVAL due to the
> desynchronized state.
Not sure here if I should just WARN_ON(kvm_pgtable_stage2_split()) as we can't
rollback host_stage2_split_gfn_meta()...
--
Vincent
>
> > +
> > +unlock:
> > + guest_unlock_component(vm);
> > + host_unlock_component();
> > +
> > + return ret;
> > +}
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260803100904.3563942-1-vdonnefort@google.com?part=16
next prev parent reply other threads:[~2026-09-07 10:14 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-03 10:08 [PATCH 00/20] Huge mapping support for protected VMs Vincent Donnefort
2026-08-03 10:08 ` [PATCH 01/20] KVM: arm64: Prefault host stage-2 entries on block split Vincent Donnefort
2026-08-03 10:31 ` sashiko-bot
2026-09-07 18:34 ` Wei-Lin Chang
2026-08-03 10:08 ` [PATCH 02/20] KVM: arm64: Propagate host stage-2 annotated " Vincent Donnefort
2026-09-07 13:58 ` Wei-Lin Chang
2026-09-08 10:07 ` Vincent Donnefort
2026-08-03 10:08 ` [PATCH 03/20] KVM: arm64: Allow block-level stage-2 annotation Vincent Donnefort
2026-08-03 10:40 ` sashiko-bot
2026-08-03 10:08 ` [PATCH 04/20] KVM: arm64: Use block-level annotations when setting up the host stage-2 Vincent Donnefort
2026-09-07 14:37 ` Wei-Lin Chang
2026-09-08 10:18 ` Vincent Donnefort
2026-08-03 10:08 ` [PATCH 05/20] KVM: arm64: Make pKVM ownership selftest an HVC Vincent Donnefort
2026-08-03 10:08 ` [PATCH 06/20] KVM: arm64: Add a range to __pkvm_host_share/unshare_hyp() Vincent Donnefort
2026-08-03 10:08 ` [PATCH 07/20] KVM: arm64: Add a range to __pkvm_host_donate_guest() Vincent Donnefort
2026-08-03 10:26 ` sashiko-bot
2026-08-03 10:08 ` [PATCH 08/20] KVM: arm64: Add a range to __pkvm_host_reclaim_page_guest() Vincent Donnefort
2026-08-03 10:28 ` sashiko-bot
2026-09-07 14:52 ` Wei-Lin Chang
2026-09-08 10:22 ` Vincent Donnefort
2026-08-03 10:08 ` [PATCH 09/20] KVM: arm64: Add a range to __pkvm_guest_share_host() Vincent Donnefort
2026-08-03 10:08 ` [PATCH 10/20] KVM: arm64: Add a range to __pkvm_guest_unshare_host() Vincent Donnefort
2026-08-03 10:08 ` [PATCH 11/20] KVM: arm64: Add a range to pKVM ownership selftest Vincent Donnefort
2026-08-03 10:48 ` sashiko-bot
2026-09-07 10:13 ` Vincent Donnefort
2026-09-07 14:58 ` Wei-Lin Chang
2026-09-08 10:25 ` Vincent Donnefort
2026-09-10 10:04 ` Vincent Donnefort
2026-08-03 10:08 ` [PATCH 12/20] KVM: arm64: Handle huge mappings in __pkvm_host_force_reclaim_page_guest() Vincent Donnefort
2026-09-07 16:52 ` Wei-Lin Chang
2026-09-08 10:26 ` Vincent Donnefort
2026-08-03 10:08 ` [PATCH 13/20] KVM: arm64: Handle huge mappings in __pkvm_vcpu_in_poison_fault() Vincent Donnefort
2026-08-03 10:08 ` [PATCH 14/20] KVM: arm64: pkvm: Warn on guest stage-2 block collapse Vincent Donnefort
2026-08-03 10:08 ` [PATCH 15/20] KVM: arm64: Add pkvm_hyp_req infrastructure Vincent Donnefort
2026-08-03 10:46 ` sashiko-bot
2026-08-03 10:09 ` [PATCH 16/20] KVM: arm64: Add __pkvm_host_split_guest HVC Vincent Donnefort
2026-08-03 10:54 ` sashiko-bot
2026-09-07 10:14 ` Vincent Donnefort [this message]
2026-09-07 17:39 ` Wei-Lin Chang
2026-09-08 14:46 ` Vincent Donnefort
2026-08-03 10:09 ` [PATCH 17/20] KVM: arm64: Extend pKVM page ownership selftests to cover guest block split Vincent Donnefort
2026-08-03 11:01 ` sashiko-bot
2026-08-03 10:09 ` [PATCH 18/20] KVM: arm64: Add PKVM_HYP_REQ_SPLIT Vincent Donnefort
2026-08-03 10:54 ` sashiko-bot
2026-09-07 10:23 ` Vincent Donnefort
2026-09-08 10:35 ` Wei-Lin Chang
2026-09-07 18:15 ` Wei-Lin Chang
2026-09-08 14:56 ` Vincent Donnefort
2026-08-03 10:09 ` [PATCH 19/20] KVM: arm64: Raise PKVM_HYP_REQ_SPLIT on guest to host sharing Vincent Donnefort
2026-08-03 11:02 ` sashiko-bot
2026-09-07 10:26 ` Vincent Donnefort
2026-08-03 10:09 ` [PATCH 20/20] KVM: arm64: Stage-2 huge mappings for protected VMs Vincent Donnefort
2026-08-03 11:04 ` sashiko-bot
2026-09-07 18:31 ` Wei-Lin Chang
2026-09-07 18:41 ` [PATCH 00/20] Huge mapping support " Wei-Lin Chang
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=ap6OlRx_Z4BJsXjZ@google.com \
--to=vdonnefort@google.com \
--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