From: sashiko-bot@kernel.org
To: "Vincent Donnefort" <vdonnefort@google.com>
Cc: kvmarm@lists.linux.dev, "Oliver Upton" <oupton@kernel.org>,
"Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH v4 06/17] KVM: arm64: Add pkvm_hyp_req infrastructure
Date: Fri, 31 Jul 2026 14:45:57 +0000 [thread overview]
Message-ID: <20260731144557.AE9001F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260731143541.956291-7-vdonnefort@google.com>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Phantom hypervisor requests leading to infinite loop and memory leak on hypercall errors.
--
--- Patch [6]: [PATCH v4 06/17] KVM: arm64: Add pkvm_hyp_req infrastructure ---
commit ec846697735578e1b5a4e25b88e07602c29ae6a2
Author: Vincent Donnefort <vdonnefort@google.com>
KVM: arm64: Add pkvm_hyp_req infrastructure
Introduce a struct pkvm_hyp_req to enable the pKVM hypervisor to request
resources from the host. Provide serialisation helpers to transport these
requests via SMCCC registers and a macro to automate HVC retries.
> diff --git a/arch/arm64/include/asm/kvm_pkvm.h b/arch/arm64/include/asm/kvm_pkvm.h
> index 74fedd9c5ff02..6c2497047f8d8 100644
> --- a/arch/arm64/include/asm/kvm_pkvm.h
> +++ b/arch/arm64/include/asm/kvm_pkvm.h
[ ... ]
> +/* Return true if a pkvm_hyp_req has been decoded from the SMCCC args */
> +static inline bool smccc_to_pkvm_hyp_req(struct pkvm_hyp_req *req, struct arm_smccc_res *res)
> +{
> + u8 *src = (u8 *)res + offsetof(struct arm_smccc_res, a2);
> + u8 type = *src;
> +
> + if (type == PKVM_HYP_NO_REQ || type >= __PKVM_HYP_REQ_TYPE_MAX)
> + return false;
> +
> + req->type = type;
> + memcpy(&req->args, src + 1, pkvm_hyp_req_arg_size(type));
> +
> + return true;
> +}
> +
> +int __pkvm_handle_smccc_req(struct arm_smccc_res *res);
> +
> +#define pkvm_call_hyp_req(f, ...) \
> +({ \
> + struct arm_smccc_res __res; \
> + int __ret; \
> + do { \
> + __ret = -1; \
> + arm_smccc_1_1_hvc(KVM_HOST_SMCCC_FUNC(f), ##__VA_ARGS__, &__res); \
> + if (WARN_ON(__res.a0 != SMCCC_RET_SUCCESS)) \
> + break; \
> + __ret = __res.a1; \
> + if (!__ret) \
> + break; \
> + __ret = __pkvm_handle_smccc_req(&__res); \
> + } while (!__ret); \
> + __ret; \
> +})
[Severity: High]
Can this sequence lead to an infinite loop and memory leak on hypercall errors?
When the hypercall fails and returns a non-zero error in __res.a1, the macro
passes the result to __pkvm_handle_smccc_req() to check for a piggybacked
request in __res.a2.
Standard EL2 handlers typically do not clear the x2 register (which maps to a2)
on error; they set x1 to the error code and return. This means a2 retains the
original second hypercall argument passed by the host.
If the least significant byte of that original host argument happens to match
a valid request type, smccc_to_pkvm_hyp_req() would mistakenly decode a phantom
request. The host would handle this phantom request, return success, and the
macro would then infinitely retry the failing hypercall.
Is there a way to explicitly distinguish a hypercall error from a legitimate
hypervisor request, perhaps using a specific return code in a1 to indicate when
a2 actually contains a request?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260731143541.956291-1-vdonnefort@google.com?part=6
next prev parent reply other threads:[~2026-07-31 14:45 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-31 14:35 [PATCH v4 00/17] KVM: arm64: Introduce pKVM hypervisor heap allocator Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 01/17] KVM: arm64: Add pkvm_private_va_range_pa Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 02/17] KVM: arm64: Add pkvm_remove_mappings Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 03/17] KVM: arm64: Add pkvm_map_private_va_range Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 04/17] KVM: arm64: Add a heap allocator for the pKVM hyp Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 05/17] KVM: arm64: Allow kvm_hyp_memcache usage outside of stage-2 Vincent Donnefort
2026-07-31 14:51 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 06/17] KVM: arm64: Add pkvm_hyp_req infrastructure Vincent Donnefort
2026-07-31 14:45 ` sashiko-bot [this message]
2026-07-31 14:35 ` [PATCH v4 07/17] KVM: arm64: Add PKVM_HYP_REQ_HYP_ALLOC request Vincent Donnefort
2026-07-31 14:52 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 08/17] KVM: arm64: Add reclaim interface for the pKVM heap alloc Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 09/17] KVM: arm64: Add selftests for the pKVM heap allocator Vincent Donnefort
2026-07-31 15:03 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 10/17] KVM: arm64: Add a shrinker for pKVM Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 11/17] KVM: arm64: Filter out non-kernel addresses in kern_hyp_va Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 12/17] KVM: arm64: Move hyp_vm refcount into the structure Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 13/17] KVM: arm64: Alloc pkvm_hyp_vm using pKVM heap allocator Vincent Donnefort
2026-07-31 15:06 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 14/17] KVM: arm64: Alloc pkvm_hyp_vcpu " Vincent Donnefort
2026-07-31 15:04 ` sashiko-bot
2026-07-31 14:35 ` [PATCH v4 15/17] KVM: arm64: Reject hyp trace descriptors with fewer CPUs than hyp_nr_cpus Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 16/17] KVM: arm64: Reject hyp trace descriptors with fewer than 3 pages Vincent Donnefort
2026-07-31 14:35 ` [PATCH v4 17/17] KVM: arm64: Alloc simple_buffer_page using pKVM hyp allocator Vincent Donnefort
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=20260731144557.AE9001F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=maz@kernel.org \
--cc=oupton@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=vdonnefort@google.com \
/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.