From: sashiko-bot@kernel.org
To: "Chang S. Bae" <chang.seok.bae@intel.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v6 03/20] KVM: x86: Support APX state for XSAVE ABI
Date: Wed, 29 Jul 2026 20:31:24 +0000 [thread overview]
Message-ID: <20260729203125.2D9FA1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260729191656.598771-4-chang.seok.bae@intel.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [High] State Leak / Incomplete Reset for APX EGPRs
- [High] APX Support is Dead Code / Broken via XCR0 Masking
Pre-existing issues:
- [High] ABI Breakage of KVM_GET_XSAVE on CPUs with APX
--
--- Patch [3]: [PATCH v6 03/20] KVM: x86: Support APX state for XSAVE ABI ---
commit 4bbfbdc2e52df0cb9917db88fdc15027d1a8a890
Author: Chang S. Bae <chang.seok.bae@intel.com>
KVM: x86: Support APX state for XSAVE ABI
This commit introduces a facility to copy APX state between the VCPU cache and
the userspace buffer. It handles the APX EGPRs specifically, copying them
to and from vcpu->arch.regs when the APX feature bit is set.
> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
> index 0626e835e9eb7..5578df10179ae 100644
> --- a/arch/x86/kvm/x86.c
> +++ b/arch/x86/kvm/x86.c
[ ... ]
> @@ -3124,6 +3124,49 @@ static int kvm_vcpu_ioctl_x86_set_vcpu_events(struct kvm_vcpu *vcpu,
> return 0;
> }
>
> +#ifdef CONFIG_KVM_APX
> +static void kvm_copy_vcpu_regs_to_uabi(struct kvm_vcpu *vcpu, void *buf, u64 supported_xcr0)
> +{
> + union fpregs_state *xstate = (union fpregs_state *)buf;
> +
> + BUILD_BUG_ON(NR_VCPU_GENERAL_PURPOSE_REGS <= VCPU_REGS_R31);
> +
> + if (!(supported_xcr0 & XFEATURE_MASK_APX))
> + return;
> +
> + memcpy(buf + xstate_offset(XFEATURE_APX),
> + &vcpu->arch.regs[VCPU_REGS_R16],
> + xstate_size(XFEATURE_APX));
> +
> + xstate->xsave.header.xfeatures |= XFEATURE_MASK_APX;
> +}
> +
> +static int kvm_copy_uabi_to_vcpu_regs(struct kvm_vcpu *vcpu, void *buf, u64 supported_xcr0)
> +{
> + union fpregs_state *xstate = (union fpregs_state *)buf;
> +
> + if (!(xstate->xsave.header.xfeatures & XFEATURE_MASK_APX))
> + return 0;
[Severity: High]
Does this early return inadvertently leak the values of APX extended GPRs
across VM resets or migrations?
If userspace calls KVM_SET_XSAVE with XFEATURE_MASK_APX cleared in the
XSAVE header, the XSAVE INIT state semantics dictate that the corresponding
state should be reset. By returning 0 early here, KVM fails to zero out
vcpu->arch.regs[VCPU_REGS_R16] through vcpu->arch.regs[VCPU_REGS_R31]. KVM
will then manually load these stale register values into the CPU during
VM-entry.
> +
> + if (!(supported_xcr0 & XFEATURE_MASK_APX))
> + return -EINVAL;
[Severity: High]
Does this code inadvertently make APX support dead code by failing to add
XFEATURE_MASK_APX to KVM_SUPPORTED_XCR0?
Because XFEATURE_MASK_APX is omitted from KVM_SUPPORTED_XCR0, it is stripped
from KVM's capabilities. This means supported_xcr0 will never contain the APX
bit, causing KVM_SET_XSAVE to unconditionally fail with -EINVAL here, and
preventing APX state from being exported during KVM_GET_XSAVE2.
> +
> + BUILD_BUG_ON(NR_VCPU_GENERAL_PURPOSE_REGS <= VCPU_REGS_R31);
> +
> + memcpy(&vcpu->arch.regs[VCPU_REGS_R16],
> + buf + xstate_offset(XFEATURE_APX),
> + xstate_size(XFEATURE_APX));
> +
> + return 0;
> +}
[ ... ]
[Severity: High]
This isn't a bug introduced by this patch, but there is an ABI breakage with
KVM_GET_XSAVE on CPUs with APX that affects this feature area.
Because APX is not defined as an XFD dynamic feature, it is unconditionally
included in fpu_user_cfg.default_features. On CPUs supporting both AMX and APX,
the uncompacted offset of APX pushes fpu_user_cfg.default_size over 4096 bytes.
During VCPU creation in fpu_alloc_guest_fpstate():
gfpu->uabi_size = sizeof(struct kvm_xsave);
if (WARN_ON_ONCE(fpu_user_cfg.default_size > gfpu->uabi_size))
gfpu->uabi_size = fpu_user_cfg.default_size;
This inflates gfpu->uabi_size to match default_size. Later, calls to the
legacy KVM_GET_XSAVE ioctl unconditionally fail with -EINVAL because they
enforce uabi_size <= sizeof(struct kvm_xsave) (4096 bytes), breaking backwards
compatibility for older VMMs.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260729191656.598771-1-chang.seok.bae@intel.com?part=3
next prev parent reply other threads:[~2026-07-29 20:31 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 19:16 [PATCH v6 00/20] KVM: x86: Enable APX for guests Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 01/20] KVM: x86: Extend VCPU registers for EGPRs Chang S. Bae
2026-07-29 20:04 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 02/20] KVM: VMX: Save guest EGPRs in VCPU cache Chang S. Bae
2026-07-29 20:05 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 03/20] KVM: x86: Support APX state for XSAVE ABI Chang S. Bae
2026-07-29 20:31 ` sashiko-bot [this message]
2026-07-29 19:16 ` [PATCH v6 04/20] KVM: VMX: Refactor VMX instruction information access Chang S. Bae
2026-07-29 20:02 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 05/20] KVM: VMX: Refactor instruction information decoding Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 06/20] KVM: VMX: Remove unused control-register access defines Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 07/20] KVM: VMX: Refactor register index retrieval from exit qualification Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 08/20] KVM: VMX: Support instruction information extension Chang S. Bae
2026-07-29 20:00 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 09/20] KVM: nVMX: Propagate extended instruction information Chang S. Bae
2026-07-29 20:01 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 10/20] KVM: x86: Support EGPR accessing and tracking for emulator Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 11/20] KVM: x86: Handle EGPR index and REX2-incompatible opcodes Chang S. Bae
2026-07-29 20:04 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 12/20] KVM: x86: Support REX2-prefixed opcode decode Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 13/20] KVM: x86: Reject EVEX-prefixed instructions Chang S. Bae
2026-07-29 19:58 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 14/20] KVM: x86: Move KVM_SUPPORTED_{XCR0,XSS} into kvm_x86_vendor_init() Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 15/20] KVM: x86: Guard valid XCR0.APX settings Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 16/20] KVM: x86: Add APX to supported XCR0 Chang S. Bae
2026-07-29 20:06 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 17/20] KVM: x86: Expose APX foundation feature to userspace Chang S. Bae
2026-07-29 19:16 ` [PATCH v6 18/20] KVM: x86: Expose APX sub-features " Chang S. Bae
2026-07-29 20:01 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 19/20] KVM: x86: selftests: Add APX state and ABI test Chang S. Bae
2026-07-29 20:08 ` sashiko-bot
2026-07-29 19:16 ` [PATCH v6 20/20] KVM: x86: selftests: Add APX state handling and XCR0 sanity checks Chang S. Bae
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=20260729203125.2D9FA1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=chang.seok.bae@intel.com \
--cc=kvm@vger.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