mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "Chang S. Bae" <chang.seok.bae@intel.com>
To: Andrei Vagin <avagin@google.com>
Cc: Thomas Gleixner <tglx@kernel.org>, Ingo Molnar <mingo@redhat.com>,
	Borislav Petkov <bp@alien8.de>, <linux-kernel@vger.kernel.org>,
	<criu@lists.linux.dev>, Dave Hansen <dave.hansen@linux.intel.com>,
	<x86@kernel.org>, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH 09/10] x86/fpu: Allow restoring signal frames with larger xstate_size
Date: Thu, 9 Jul 2026 14:14:15 -0700	[thread overview]
Message-ID: <b3ecd9ab-fc00-4e6e-94b3-9f7c351edc97@intel.com> (raw)
In-Reply-To: <CAEWA0a7_5++M+aqpnzxK0PkiiaS=hT1cCBrEKYhFMydzxFC3yw@mail.gmail.com>

On 7/7/2026 1:27 PM, Andrei Vagin wrote:
> 
> With this changes, the kernel will correctly reject signals frames with
> MPX states on APX machines and vise versa. If a signal frame contains an
> MPX state, it will be rejected on an APX machine because XCR0 will lack
> the MPX bits, causing XRSTOR to trigger a #GP. The exact same thing
> happens if a signal frame containing an APX state is brought to an older
> machine. XRSTOR explicitly triggers a #GP exception if a bit in XCR0 is
> 0 but the corresponding bit in the xstate_bv field of the XSAVE header
> is 1. This hardware enforcement occurs regardless of whether the target
> bit is present in the requested-feature bitmap.

Okay, in this regard, the interaction with XRSTOR in ring0 is ultimately 
what enforces the consistency check. Rather than trying to interpret the 
frame, let the kernel XRSTOR validate whether the image is migratable to 
the target or not. Perhaps, that's your perspective here all.

> Dynamic XSTATE components (like Intel AMX) require a process to
> explicitly request permission via arch_prctl(ARCH_REQ_XCOMP_PERM, ...).
> During the checkpoint, CRIU detects which dynamic features have been
> enabled for each thread and saves this configuration as part of the
> process image. During the restore, CRIU invokes arch_prctl() on threads
> to request the identical dynamic XSTATE permissions. If the target
> machine doesn't support a specific dynamic state, the restore will fail.

The permission request itself does not expand a task's fpstate -- it 
does not reallocate a larger XSAVE buffer or update its size/xfeatures 
attributes.

Assuming the target task has never touched the dynamic state, if 
fx_sw->xstate_size > fpstate->user_size is permitted, while 
fx_sw->xfeatures is still used directly as the XRSTOR RFBM, I think it 
may be possible to trigger an ugly #NM in the kernel along the way when 
CONFIG_X86_DEBUG_FPU=n. If CONFIG_X86_DEBUG_FPU=y, xfd_validate_state() 
could guard this by clearing the bit as part of its consistency check.

If the restore path manages the destination fpstate before XRSTOR 
somehow, then this dynamic satate example isn't the case of migrating 
from larger to smaller frames. But I guess what you wanted here was 
stretching the "try-and-see" migration model to cover learger-to-smaller 
xstate-size transitions as well.

But again, from the kernel perspective, I feel this relaxation needs 
very careful review and auditing.

Thanks,
Chang

  reply	other threads:[~2026-07-09 21:14 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-15 19:37 [PATCH v3 0/10] x86/fpu: Restore and reinforce signal frame portability Andrei Vagin
2026-06-15 19:37 ` [PATCH 01/10] x86/fpu: Document " Andrei Vagin
2026-06-26 13:51   ` Alexander Mikhalitsyn
2026-06-30 19:23   ` Chang S. Bae
2026-06-15 19:37 ` [PATCH 02/10] x86/fpu: Clean up and rename variables in signal frame handling Andrei Vagin
2026-06-26 17:05   ` Alexander Mikhalitsyn
2026-06-15 19:37 ` [PATCH 03/10] x86/fpu: Split __fpu_restore_sig to extract compat path Andrei Vagin
2026-06-26 17:20   ` Alexander Mikhalitsyn
2026-06-15 19:37 ` [PATCH 04/10] x86/fpu: Document reasoning of FX-only fallback Andrei Vagin
2026-06-26 14:22   ` Alexander Mikhalitsyn
2026-06-30 19:23   ` Chang S. Bae
2026-06-15 19:37 ` [PATCH 05/10] x86/fpu: Fix potential underflow in xstate_calculate_size() Andrei Vagin
2026-06-26 14:32   ` Alexander Mikhalitsyn
2026-06-30 19:23   ` Chang S. Bae
2026-06-15 19:37 ` [PATCH 06/10] selftests/x86: Add a test for signal frame FPU portability Andrei Vagin
2026-06-26 14:39   ` Alexander Mikhalitsyn
2026-06-15 19:37 ` [PATCH 07/10] x86/fpu: Pre-fault only required size of xstate buffer Andrei Vagin
2026-06-26 17:28   ` Alexander Mikhalitsyn
2026-06-15 19:37 ` [PATCH 08/10] selftests/x86: Add a sigframe insufficient xstate_size test Andrei Vagin
2026-06-26 15:02   ` Alexander Mikhalitsyn
2026-06-15 19:37 ` [PATCH 09/10] x86/fpu: Allow restoring signal frames with larger xstate_size Andrei Vagin
2026-06-26 17:32   ` Alexander Mikhalitsyn
2026-06-30 19:23   ` Chang S. Bae
2026-07-01  0:48     ` Andrei Vagin
2026-07-06 17:08       ` Chang S. Bae
2026-07-07 20:27         ` Andrei Vagin
2026-07-09 21:14           ` Chang S. Bae [this message]
2026-07-10 22:24             ` Chang S. Bae
2026-06-15 19:37 ` [PATCH 10/10] selftests/x86: Check restoring FPU state " Andrei Vagin
2026-06-26 15:12   ` Alexander Mikhalitsyn

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=b3ecd9ab-fc00-4e6e-94b3-9f7c351edc97@intel.com \
    --to=chang.seok.bae@intel.com \
    --cc=avagin@google.com \
    --cc=bp@alien8.de \
    --cc=criu@lists.linux.dev \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@kernel.org \
    --cc=x86@kernel.org \
    /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