kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chao Gao <chao.gao@intel.com>
To: "Chang S. Bae" <chang.seok.bae@intel.com>
Cc: <x86@kernel.org>, <linux-kernel@vger.kernel.org>,
	<kvm@vger.kernel.org>, <tglx@linutronix.de>,
	<dave.hansen@intel.com>, <seanjc@google.com>,
	<pbonzini@redhat.com>, <peterz@infradead.org>,
	<rick.p.edgecombe@intel.com>, <weijiang.yang@intel.com>,
	<john.allen@amd.com>, <bp@alien8.de>, <xin3.li@intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	"Aruna Ramakrishna" <aruna.ramakrishna@oracle.com>,
	Mitchell Levy <levymitchell0@gmail.com>,
	Adamos Ttofari <attofari@amazon.de>,
	Uros Bizjak <ubizjak@gmail.com>
Subject: Re: [PATCH v4 8/8] x86/fpu/xstate: Warn if guest-only supervisor states are detected in normal fpstate
Date: Wed, 2 Apr 2025 22:30:28 +0800	[thread overview]
Message-ID: <Z+1KBN+s3CWdTN60@intel.com> (raw)
In-Reply-To: <ec953e80-a39e-4d42-b75e-6f995289a669@intel.com>

On Tue, Apr 01, 2025 at 10:17:08AM -0700, Chang S. Bae wrote:
>On 3/18/2025 8:31 AM, Chao Gao wrote:
>> +	WARN_ON_FPU(!fpstate->is_guest && (mask & XFEATURE_MASK_SUPERVISOR_GUEST));
>
>Did you check xfeatures_mask_supervisor()? I think you might want to
>introduce a similar wrapper to reference the enabled features (max_features)
>here.

Are you suggesting something like this:

static inline u64 xfeatures_mask_guest_supervisor(void)
{
	return fpu_kernel_cfg.max_features & XFEATURE_MASK_SUPERVISOR_GUEST;
}

and do
	WARN_ON_FPU(!fpstate->is_guest && (mask & xfeatures_mask_guest_supervisor()));

?

If so, I don't think it's necessary. The check in the current patch is actually
stricter and could catch more errors than the suggested one.

>
>Also, have you audited other code paths to ensure that no additional guard
>like this is needed? Can you summarize your audit process?

I didn't audit all code paths. I took over this patch and made only very slight
modifications to it. Anyway, thanks for asking this.

The goal is to ensure that guest-only _supervisor_ features are not enabled in
non-guest FPUs.

There are two potential solutions:

a) Check the enabled features during save/restore operations, i.e., when
   executing XSAVES/XRSTORS instructions. This patch adopts this solution, but
   it is partial.

XSAVES/XRSTORS instructions are executed in following places:

  1) os_xrstor_booting()
  2) xsaves()
  3) xrstors()
  4) os_xrstor_safe()
  5) os_xsave()
  6) os_xrstor()
  7) os_xrstor_supervisor()

#2 and #3 are not applicable because they handle independent features only,
which are not associated with guest or non-guest FPUs.

Checks can be applied to #1 and #4-#7, although #1 needs to be refactored first
to accept an fpstate argument.

b) Check the enabled features during initialization and reallocation, i.e.,
whenever fpstate->xfeatures is assigned some value in following functions:

  __fpstate_reset()
  __fpstate_guest_reset()
  fpu__init_system_xstate()
  fpstate_realloc()

We can add a check within these functions or integrate the check into
xstate_init_xcomp_bv(), as it is always called after fpstate->xfeatures is
updated.

IMO, option b) is slightly better because it can catch errors earlier than
option a), allowing the call trace to accurately reflect how the issue arose.

Chang, which option do you prefer, or do you have any other suggestions?

>
>Thanks,
>Chang

  reply	other threads:[~2025-04-02 14:31 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-18 15:31 [PATCH v4 0/8] Introduce CET supervisor state support Chao Gao
2025-03-18 15:31 ` [PATCH v4 1/8] x86/fpu/xstate: Always preserve non-user xfeatures/flags in __state_perm Chao Gao
2025-04-01 17:17   ` Chang S. Bae
2025-04-01 17:56     ` Sean Christopherson
2025-03-18 15:31 ` [PATCH v4 2/8] x86/fpu: Drop @perm from guest pseudo FPU container Chao Gao
2025-04-01 17:16   ` Chang S. Bae
2025-04-02  1:56     ` Chao Gao
2025-03-18 15:31 ` [PATCH v4 3/8] x86/fpu/xstate: Add CET supervisor xfeature support Chao Gao
2025-04-01 17:15   ` Chang S. Bae
2025-04-02  2:28     ` Chao Gao
2025-04-02 21:37     ` Dave Hansen
2025-04-03 13:26       ` Chao Gao
2025-04-03 14:04       ` Ingo Molnar
2025-03-18 15:31 ` [PATCH v4 4/8] x86/fpu/xstate: Differentiate default features for host and guest FPUs Chao Gao
2025-04-01 17:18   ` Chang S. Bae
2025-04-02  3:16     ` Chao Gao
2025-03-18 15:31 ` [PATCH v4 5/8] x86/fpu: Initialize guest FPU permissions from guest defaults Chao Gao
2025-03-18 15:31 ` [PATCH v4 6/8] x86/fpu: Initialize guest fpstate and FPU pseudo container " Chao Gao
2025-03-18 15:31 ` [PATCH v4 7/8] x86/fpu/xstate: Introduce "guest-only" supervisor xfeature set Chao Gao
2025-04-01 17:16   ` Chang S. Bae
2025-04-02  4:29     ` Chao Gao
2025-03-18 15:31 ` [PATCH v4 8/8] x86/fpu/xstate: Warn if guest-only supervisor states are detected in normal fpstate Chao Gao
2025-04-01 17:17   ` Chang S. Bae
2025-04-02 14:30     ` Chao Gao [this message]
2025-04-04  0:02       ` Chang S. Bae
2025-04-04  1:06         ` Dave Hansen
2025-04-01 17:20 ` [PATCH v4 0/8] Introduce CET supervisor state support Chang S. Bae
2025-04-02 21:12 ` Edgecombe, Rick P
2025-04-02 21:35   ` Dave Hansen
2025-04-02 21:44     ` Sean Christopherson

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=Z+1KBN+s3CWdTN60@intel.com \
    --to=chao.gao@intel.com \
    --cc=aruna.ramakrishna@oracle.com \
    --cc=attofari@amazon.de \
    --cc=bp@alien8.de \
    --cc=chang.seok.bae@intel.com \
    --cc=dave.hansen@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=john.allen@amd.com \
    --cc=kvm@vger.kernel.org \
    --cc=levymitchell0@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rick.p.edgecombe@intel.com \
    --cc=seanjc@google.com \
    --cc=tglx@linutronix.de \
    --cc=ubizjak@gmail.com \
    --cc=weijiang.yang@intel.com \
    --cc=x86@kernel.org \
    --cc=xin3.li@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).