All of lore.kernel.org
 help / color / mirror / Atom feed
From: Quentin Casasnovas <quentin.casasnovas@oracle.com>
To: Borislav Petkov <bp@alien8.de>
Cc: X86 ML <x86@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
	"H. Peter Anvin" <hpa@zytor.com>, Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Quentin Casasnovas <quentin.casasnovas@oracle.com>,
	Oleg Nesterov <oleg@redhat.com>,
	Andy Lutomirski <luto@amacapital.net>
Subject: Re: [PATCH] x86/xsave: Robustify and merge macros
Date: Thu, 2 Apr 2015 17:52:10 +0200	[thread overview]
Message-ID: <20150402155210.GB6703@chrystal.uk.oracle.com> (raw)
In-Reply-To: <1427980282-25929-1-git-send-email-bp@alien8.de>

On Thu, Apr 02, 2015 at 03:11:22PM +0200, Borislav Petkov wrote:
> From: Borislav Petkov <bp@suse.de>
> 
> Previously, we did call an XSAVE/XRSTOR variant through alternatives
> and did potential exception handling resulting from the instruction
> execution in a second inline asm. Which was misleading and error prone,
> see
> 
>   06c8173eb92b ("x86/fpu/xsaves: Fix improper uses of __ex_table")
> 
> for an example.
> 
> Add single macros which combine the alternatives and the exception
> handling.

FWIW I think this looks much nicer!  I have a couple of comments though,
apologies in advance if they aren't relevant :)

> 
> While at it, remove the SYSTEM_BOOTING checks in favor of
> static_cpu_has_safe() which works regardless of system state.
>

I thought the SYSTEM_BOOTING checks were present to make sure we call these
functions only when the alternative instructions had *not* been applied
(i.e. when SYSTEM_BOOTING).  We could have added the opposite checks in
xsave_state()/xrstor_state() to make sure the alternative instructions are
applied when these are called (i.e. when !SYSTEM_BOOTING).

In the unlikely event where I'm not wrong about this, having a nicely named
helper altinstr_are_applied() instead of manually checking the system_state
variable would probably help!

But maybe we're pretty confident this will not happen anyway?

> Cleanup comments.
> 
> Signed-off-by: Borislav Petkov <bp@suse.de>
> Cc: "H. Peter Anvin" <hpa@zytor.com>
> Cc: Ingo Molnar <mingo@kernel.org>
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: Quentin Casasnovas <quentin.casasnovas@oracle.com>
> Cc: Oleg Nesterov <oleg@redhat.com>
> Cc: Andy Lutomirski <luto@amacapital.net>
> ---
>  arch/x86/include/asm/xsave.h | 141 ++++++++++++++++++++++---------------------
>  1 file changed, 73 insertions(+), 68 deletions(-)
> 
> diff --git a/arch/x86/include/asm/xsave.h b/arch/x86/include/asm/xsave.h
> index c9a6d68b8d62..e6c7986c95df 100644
> --- a/arch/x86/include/asm/xsave.h
> +++ b/arch/x86/include/asm/xsave.h
> @@ -67,6 +67,66 @@ extern int init_fpu(struct task_struct *child);
>  			_ASM_EXTABLE(1b, 3b)		\
>  			: [err] "=r" (err)
>  
> +#define XSTATE_OP(op, st, lmask, hmask, err)				\
> +	asm volatile("1:" op "\n\t"					\
> +		     "2:\n\t"						\
> +		     "xor %[err], %[err]\n"				\

Are you not invariably clearing err here?  If the instruction fault, we go
to label '3' which does 'err = -1; goto 2', which clears err.  Same remark
for XSTATE_XSAVE()/XSTATE_RESTORE().

Probably missing something..

Also, tiny consistency nit, maybe use "\n\t" everywhere?

> +		     ".pushsection .fixup,\"ax\"\n\t"			\
> +		     "3: movl $-1,%[err]\n\t"				\
> +		     "jmp 2b\n\t"					\
> +		     ".popsection\n\t"					\
> +		     _ASM_EXTABLE(1b, 3b)				\
> +		     : [err] "=r" (err)					\
> +		     : "D" (st), "m" (*st), "a" (lmask), "d" (hmask)	\
> +		     : "memory")
> +

I've tried compiling this on top of v4.0-rc5 and I get a compile error
because alt_end_marker isn't defined.  Which other patches should I take to
test this?

Quentin

  reply	other threads:[~2015-04-02 15:50 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-02 13:11 [PATCH] x86/xsave: Robustify and merge macros Borislav Petkov
2015-04-02 15:52 ` Quentin Casasnovas [this message]
2015-04-02 16:12   ` Borislav Petkov
2015-04-02 16:33     ` Quentin Casasnovas
2015-04-02 16:45       ` Borislav Petkov
2015-04-03 14:06     ` Quentin Casasnovas
2015-04-03 14:14       ` Quentin Casasnovas
2015-04-03 15:23         ` Borislav Petkov
2015-04-03 15:40           ` Quentin Casasnovas
2015-04-03 17:06             ` Borislav Petkov
2015-04-03 17:33               ` Quentin Casasnovas
2015-04-03 17:48                 ` Borislav Petkov
2015-04-03 20:42                   ` Quentin Casasnovas
2015-04-04  7:34                     ` Borislav Petkov
2015-04-04  8:36                       ` Quentin Casasnovas
2015-04-04  9:25                         ` Borislav Petkov
2015-04-04 10:11                           ` Quentin Casasnovas
2015-04-04 10:29                             ` Borislav Petkov
2015-04-04 13:32                               ` Borislav Petkov
2015-04-04 13:34                                 ` [PATCH] x86/alternatives: Fix ALTERNATIVE_2 padding generation properly Borislav Petkov
2015-04-07  9:27                                   ` Quentin Casasnovas
2015-04-07  9:40                                   ` [tip:x86/asm] " tip-bot for Borislav Petkov

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=20150402155210.GB6703@chrystal.uk.oracle.com \
    --to=quentin.casasnovas@oracle.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@amacapital.net \
    --cc=mingo@kernel.org \
    --cc=oleg@redhat.com \
    --cc=tglx@linutronix.de \
    --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 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.