Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965828AbbEEWsI (ORCPT ); Tue, 5 May 2015 18:48:08 -0400 Received: from mail.skyhub.de ([78.46.96.112]:40419 "EHLO mail.skyhub.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751258AbbEEWsE (ORCPT ); Tue, 5 May 2015 18:48:04 -0400 Date: Wed, 6 May 2015 00:47:59 +0200 From: Borislav Petkov To: Ingo Molnar Cc: linux-kernel@vger.kernel.org, Andy Lutomirski , Dave Hansen , Fenghua Yu , "H. Peter Anvin" , Linus Torvalds , Oleg Nesterov , Thomas Gleixner Subject: Re: [PATCH 176/208] x86/alternatives, x86/fpu: Add 'alternatives_patched' debug flag and use it in xsave_state() Message-ID: <20150505224759.GT3910@pd.tnic> References: <1430848712-28064-1-git-send-email-mingo@kernel.org> <1430848712-28064-16-git-send-email-mingo@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: <1430848712-28064-16-git-send-email-mingo@kernel.org> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2516 Lines: 71 On Tue, May 05, 2015 at 07:58:00PM +0200, Ingo Molnar wrote: > We'd like to use xsave_state() earlier, but its SYSTEM_BOOTING check > is too imprecise. > > The real condition that xsave_state() would like to check is whether > alternative XSAVE instructions were patched into the kernel image > already. > > Add such a (read-mostly) debug flag and use it in xsave_state(). > > Cc: Andy Lutomirski > Cc: Borislav Petkov > Cc: Dave Hansen > Cc: Fenghua Yu > Cc: H. Peter Anvin > Cc: Linus Torvalds > Cc: Oleg Nesterov > Cc: Thomas Gleixner > Signed-off-by: Ingo Molnar > --- > arch/x86/include/asm/alternative.h | 6 ++++++ > arch/x86/include/asm/fpu/xstate.h | 2 +- > arch/x86/kernel/alternative.c | 5 +++++ > 3 files changed, 12 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h > index ba32af062f61..7bfc85bbb8ff 100644 > --- a/arch/x86/include/asm/alternative.h > +++ b/arch/x86/include/asm/alternative.h > @@ -52,6 +52,12 @@ struct alt_instr { > u8 padlen; /* length of build-time padding */ > } __packed; > > +/* > + * Debug flag that can be tested to see whether alternative > + * instructions were patched in already: > + */ > +extern int alternatives_patched; Looks useful... > + > extern void alternative_instructions(void); > extern void apply_alternatives(struct alt_instr *start, struct alt_instr *end); > > diff --git a/arch/x86/include/asm/fpu/xstate.h b/arch/x86/include/asm/fpu/xstate.h > index 31a002ad5aeb..ab2c507b58b6 100644 > --- a/arch/x86/include/asm/fpu/xstate.h > +++ b/arch/x86/include/asm/fpu/xstate.h > @@ -119,7 +119,7 @@ static inline int xsave_state(struct xsave_struct *fx) > u32 hmask = mask >> 32; > int err = 0; > > - WARN_ON(system_state == SYSTEM_BOOTING); > + WARN_ON(!alternatives_patched); Btw, shouldn't we be doing this check in what is called now copy_kernel_to_xregs() too, i.e., right under this function which is now called copy_xregs_to_kernel()? -- Regards/Gruss, Boris. ECO tip #101: Trim your mails when you reply. -- -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/