From: Borislav Petkov <bp@alien8.de>
To: Yu-cheng Yu <yu-cheng.yu@intel.com>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
"H. Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Tony Luck <tony.luck@intel.com>,
Andy Lutomirski <luto@kernel.org>,
Rik van Riel <riel@surriel.com>,
"Ravi V. Shankar" <ravi.v.shankar@intel.com>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Fenghua Yu <fenghua.yu@intel.com>,
Peter Zijlstra <peterz@infradead.org>
Subject: Re: [PATCH v2 6/8] x86/fpu/xstate: Update sanitize_restored_xstate() for supervisor xstates
Date: Fri, 21 Feb 2020 15:30:10 +0100 [thread overview]
Message-ID: <20200221143010.GH25747@zn.tnic> (raw)
In-Reply-To: <20200121201843.12047-7-yu-cheng.yu@intel.com>
On Tue, Jan 21, 2020 at 12:18:41PM -0800, Yu-cheng Yu wrote:
> The function sanitize_restored_xstate() sanitizes user xstates of an XSAVE
> buffer by setting the buffer's header->xfeatures to the input 'xfeatures',
> effectively resetting features not in 'xfeatures' back to the init state.
>
> When supervisor xstates are introduced, it is necessary to make sure only
> user xstates are sanitized. This patch ensures supervisor xstates are not
Avoid having "This patch" or "This commit" in the commit message. It is
tautologically useless.
Also, do
$ git grep 'This patch' Documentation/process
for more details.
> changed by ensuring supervisor bits stay set in header->xfeatures.
>
> To make names clear, also:
>
> - Rename the function to sanitize_restored_user_xstate().
> - Rename input parameter 'xfeatures' to 'xfeatures_from_user'.
> - In __fpu__restore_sig(), rename 'xfeatures' to 'xfeatures_user'.
Call them all "user_xfeatures" to differentiate that it is a function
argument and not our xfeature_* macro and function names.
> Signed-off-by: Yu-cheng Yu <yu-cheng.yu@intel.com>
> Reviewed-by: Dave Hansen <dave.hansen@linux.intel.com>
> ---
> arch/x86/kernel/fpu/signal.c | 37 +++++++++++++++++++++++-------------
> 1 file changed, 24 insertions(+), 13 deletions(-)
>
> diff --git a/arch/x86/kernel/fpu/signal.c b/arch/x86/kernel/fpu/signal.c
> index 4afe61987e03..e3781a4a52a8 100644
> --- a/arch/x86/kernel/fpu/signal.c
> +++ b/arch/x86/kernel/fpu/signal.c
> @@ -211,9 +211,9 @@ int copy_fpstate_to_sigframe(void __user *buf, void __user *buf_fx, int size)
> }
>
> static inline void
> -sanitize_restored_xstate(union fpregs_state *state,
> - struct user_i387_ia32_struct *ia32_env,
> - u64 xfeatures, int fx_only)
> +sanitize_restored_user_xstate(union fpregs_state *state,
> + struct user_i387_ia32_struct *ia32_env,
> + u64 xfeatures_from_user, int fx_only)
> {
> struct xregs_state *xsave = &state->xsave;
> struct xstate_header *header = &xsave->header;
> @@ -226,13 +226,22 @@ sanitize_restored_xstate(union fpregs_state *state,
> */
>
> /*
> - * Init the state that is not present in the memory
> - * layout and not enabled by the OS.
> + * 'xfeatures_from_user' might have bits clear which are
> + * set in header->xfeatures. This represents features that
> + * were in init state prior to a signal delivery, and need
> + * to be reset back to the init state. Clear any user
> + * feature bits which are set in the kernel buffer to get
> + * them back to the init state.
> + *
> + * Supervisor state is unchanged by input from userspace.
> + * Ensure that supervisor state is not modified by ensuring
> + * supervisor state bits stay set.
"Ensure ... by ensuring ..." Simplify pls.
> */
> if (fx_only)
> header->xfeatures = XFEATURE_MASK_FPSSE;
> else
> - header->xfeatures &= xfeatures;
> + header->xfeatures &= xfeatures_from_user |
> + xfeatures_mask_supervisor();
> }
>
> if (use_fxsr()) {
--
Regards/Gruss,
Boris.
https://people.kernel.org/tglx/notes-about-netiquette
next prev parent reply other threads:[~2020-02-21 14:30 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-21 20:18 [PATCH v2 0/8] Support XSAVES supervisor states Yu-cheng Yu
2020-01-21 20:18 ` [PATCH v2 1/8] x86/fpu/xstate: Define new macros for supervisor and user xstates Yu-cheng Yu
2020-02-20 11:47 ` Borislav Petkov
2020-02-20 20:23 ` Yu-cheng Yu
2020-01-21 20:18 ` [PATCH v2 2/8] x86/fpu/xstate: Separate user and supervisor xfeatures mask Yu-cheng Yu
2020-02-21 10:34 ` Borislav Petkov
2020-01-21 20:18 ` [PATCH v2 3/8] x86/fpu/xstate: Introduce XSAVES supervisor states Yu-cheng Yu
2020-01-21 20:18 ` [PATCH v2 4/8] x86/fpu/xstate: Define new functions for clearing fpregs and xstates Yu-cheng Yu
2020-02-21 14:04 ` Borislav Petkov
2020-01-21 20:18 ` [PATCH v2 5/8] x86/fpu/xstate: Rename validate_xstate_header() to validate_xstate_header_from_user() Yu-cheng Yu
2020-02-21 14:13 ` Borislav Petkov
2020-01-21 20:18 ` [PATCH v2 6/8] x86/fpu/xstate: Update sanitize_restored_xstate() for supervisor xstates Yu-cheng Yu
2020-02-21 14:30 ` Borislav Petkov [this message]
2020-01-21 20:18 ` [PATCH v2 7/8] x86/fpu/xstate: Update copy_kernel_to_xregs_err() for XSAVES supervisor states Yu-cheng Yu
2020-01-21 20:18 ` [PATCH v2 8/8] x86/fpu/xstate: Restore supervisor xstates for __fpu__restore_sig() Yu-cheng Yu
2020-02-21 17:58 ` Borislav Petkov
2020-02-27 22:52 ` Yu-cheng Yu
2020-02-28 12:17 ` Borislav Petkov
2020-02-28 12:51 ` Sebastian Andrzej Siewior
2020-02-28 15:53 ` Yu-cheng Yu
2020-02-28 16:23 ` Borislav Petkov
2020-02-28 16:20 ` Yu-cheng Yu
2020-02-28 16:50 ` Sebastian Andrzej Siewior
2020-02-28 16:54 ` Yu-cheng Yu
2020-02-28 17:22 ` Borislav Petkov
2020-02-28 18:11 ` Yu-cheng Yu
2020-02-28 18:31 ` Borislav Petkov
2020-02-28 21:22 ` Yu-cheng Yu
2020-02-28 21:47 ` Borislav Petkov
2020-02-28 22:13 ` Yu-cheng Yu
2020-02-29 14:36 ` Borislav Petkov
2020-03-02 18:09 ` Yu-cheng Yu
2020-03-04 18:18 ` Yu-cheng Yu
2020-03-06 20:50 ` Borislav Petkov
2020-03-10 20:36 ` Yu-cheng Yu
2020-03-10 21:16 ` Thomas Gleixner
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=20200221143010.GH25747@zn.tnic \
--to=bp@alien8.de \
--cc=bigeasy@linutronix.de \
--cc=dave.hansen@linux.intel.com \
--cc=fenghua.yu@intel.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=ravi.v.shankar@intel.com \
--cc=riel@surriel.com \
--cc=tglx@linutronix.de \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--cc=yu-cheng.yu@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 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.