From: Borislav Petkov <bp@alien8.de>
To: Andy Lutomirski <luto@kernel.org>
Cc: X86 ML <x86@kernel.org>, Paolo Bonzini <pbonzini@redhat.com>,
Peter Zijlstra <peterz@infradead.org>,
KVM list <kvm@vger.kernel.org>,
Arjan van de Ven <arjan@linux.intel.com>,
xen-devel <Xen-devel@lists.xen.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v4 2/5] x86/msr: Carry on after a non-"safe" MSR access fails without !panic_on_oops
Date: Mon, 14 Mar 2016 13:02:03 +0100 [thread overview]
Message-ID: <20160314120202.GD15800@pd.tnic> (raw)
In-Reply-To: <a3b871a4eb533340d04255409dfecc94f88c647d.1457805972.git.luto@kernel.org>
On Sat, Mar 12, 2016 at 10:08:49AM -0800, Andy Lutomirski wrote:
> This demotes an OOPS and likely panic due to a failed non-"safe" MSR
> access to a WARN_ONCE and, for RDMSR, a return value of zero. If
> panic_on_oops is set, then failed unsafe MSR accesses will still
> oops and panic.
>
> To be clear, this type of failure should *not* happen. This patch
> exists to minimize the chance of nasty undebuggable failures due on
> systems that used to work due to a now-fixed CONFIG_PARAVIRT=y bug.
>
> Signed-off-by: Andy Lutomirski <luto@kernel.org>
> ---
> arch/x86/include/asm/msr.h | 10 ++++++++--
> arch/x86/mm/extable.c | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 41 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/include/asm/msr.h b/arch/x86/include/asm/msr.h
> index 93fb7c1cffda..1487054a1a70 100644
> --- a/arch/x86/include/asm/msr.h
> +++ b/arch/x86/include/asm/msr.h
> @@ -92,7 +92,10 @@ static inline unsigned long long native_read_msr(unsigned int msr)
> {
> DECLARE_ARGS(val, low, high);
>
> - asm volatile("rdmsr" : EAX_EDX_RET(val, low, high) : "c" (msr));
> + asm volatile("1: rdmsr\n"
> + "2:\n"
> + _ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_rdmsr_unsafe)
> + : EAX_EDX_RET(val, low, high) : "c" (msr));
> if (msr_tracepoint_active(__tracepoint_read_msr))
> do_trace_read_msr(msr, EAX_EDX_VAL(val, low, high), 0);
> return EAX_EDX_VAL(val, low, high);
> @@ -119,7 +122,10 @@ static inline unsigned long long native_read_msr_safe(unsigned int msr,
> static inline void native_write_msr(unsigned int msr,
> unsigned low, unsigned high)
> {
> - asm volatile("wrmsr" : : "c" (msr), "a"(low), "d" (high) : "memory");
> + asm volatile("1: wrmsr\n"
> + "2:\n"
> + _ASM_EXTABLE_HANDLE(1b, 2b, ex_handler_wrmsr_unsafe)
This might be a good idea:
[ 0.220066] cpuidle: using governor menu
[ 0.224000] ------------[ cut here ]------------
[ 0.224000] WARNING: CPU: 0 PID: 1 at arch/x86/mm/extable.c:74 ex_handler_wrmsr_unsafe+0x73/0x80()
[ 0.224000] unchecked MSR access error: WRMSR to 0xdeadbeef (tried to write 0x000000000000caca)
[ 0.224000] Modules linked in:
[ 0.224000] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.5.0-rc7+ #7
[ 0.224000] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140531_083030-gandalf 04/01/2014
[ 0.224000] 0000000000000000 ffff88007c0d7c08 ffffffff812f13a3 ffff88007c0d7c50
[ 0.224000] ffffffff81a40ffe ffff88007c0d7c40 ffffffff8105c3b1 ffffffff81717710
[ 0.224000] ffff88007c0d7d18 0000000000000000 ffffffff816207d0 0000000000000000
[ 0.224000] Call Trace:
[ 0.224000] [<ffffffff812f13a3>] dump_stack+0x67/0x94
[ 0.224000] [<ffffffff8105c3b1>] warn_slowpath_common+0x91/0xd0
[ 0.224000] [<ffffffff816207d0>] ? amd_cpu_notify+0x40/0x40
[ 0.224000] [<ffffffff8105c43c>] warn_slowpath_fmt+0x4c/0x50
[ 0.224000] [<ffffffff816207d0>] ? amd_cpu_notify+0x40/0x40
[ 0.224000] [<ffffffff8131de53>] ? __this_cpu_preempt_check+0x13/0x20
[ 0.224000] [<ffffffff8104efe3>] ex_handler_wrmsr_unsafe+0x73/0x80
and it looks helpful and all but when you do it pretty early - for
example I added a
wrmsrl(0xdeadbeef, 0xcafe);
at the end of pat_bsp_init() and the machine explodes with an early
panic. I'm wondering what is better - early panic or an early #GP from a
missing MSR.
And more specifically, can we do better to handle the early case
gracefully too?
--
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.
next prev parent reply other threads:[~2016-03-14 12:02 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-12 18:08 [PATCH v4 0/5] [PATCH v3 0/5] Improve non-"safe" MSR access failure handling Andy Lutomirski
2016-03-12 18:08 ` [PATCH v4 1/5] x86/paravirt: Add _safe to the read_msr and write_msr PV hooks Andy Lutomirski
2016-03-14 11:57 ` Borislav Petkov
2016-03-14 11:57 ` Borislav Petkov
2016-03-14 17:07 ` Andy Lutomirski
2016-03-14 17:07 ` Andy Lutomirski
2016-03-12 18:08 ` Andy Lutomirski
2016-03-12 18:08 ` [PATCH v4 2/5] x86/msr: Carry on after a non-"safe" MSR access fails without !panic_on_oops Andy Lutomirski
2016-03-12 18:08 ` Andy Lutomirski
2016-03-14 12:02 ` Borislav Petkov [this message]
2016-03-14 17:05 ` Andy Lutomirski
2016-03-14 17:11 ` Linus Torvalds
2016-03-14 17:17 ` Andy Lutomirski
2016-03-14 17:17 ` Andy Lutomirski
2016-03-14 18:04 ` Linus Torvalds
2016-03-14 18:04 ` Linus Torvalds
2016-03-14 18:10 ` Andy Lutomirski
2016-03-14 18:10 ` Andy Lutomirski
2016-03-14 18:15 ` Linus Torvalds
2016-03-14 18:15 ` Linus Torvalds
2016-03-14 18:24 ` Andy Lutomirski
2016-03-14 18:40 ` Linus Torvalds
2016-03-14 18:40 ` Linus Torvalds
2016-03-14 18:48 ` Andy Lutomirski
2016-03-15 10:22 ` Ingo Molnar
2016-03-15 10:22 ` Ingo Molnar
2016-03-15 10:26 ` Ingo Molnar
2016-03-15 10:26 ` Ingo Molnar
2016-03-14 18:48 ` Andy Lutomirski
2016-03-14 18:24 ` Andy Lutomirski
2016-03-14 20:18 ` Peter Zijlstra
2016-03-14 20:18 ` Peter Zijlstra
2016-03-14 18:10 ` Linus Torvalds
2016-03-14 18:10 ` Linus Torvalds
2016-03-15 10:21 ` Ingo Molnar
2016-03-15 10:21 ` Ingo Molnar
2016-03-14 17:05 ` Andy Lutomirski
2016-03-14 12:02 ` Borislav Petkov
2016-03-12 18:08 ` [PATCH v4 3/5] x86/paravirt: Add paravirt_{read,write}_msr Andy Lutomirski
2016-03-12 18:08 ` [PATCH v4 3/5] x86/paravirt: Add paravirt_{read, write}_msr Andy Lutomirski
2016-03-12 18:08 ` [PATCH v4 4/5] x86/paravirt: Make "unsafe" MSR accesses unsafe even if PARAVIRT=y Andy Lutomirski
2016-03-12 18:08 ` Andy Lutomirski
2016-03-12 18:08 ` [PATCH v4 5/5] x86/msr: Set the return value to zero when native_rdmsr_safe fails Andy Lutomirski
2016-03-12 18:08 ` Andy Lutomirski
2016-03-14 14:32 ` [Xen-devel] [PATCH v4 0/5] [PATCH v3 0/5] Improve non-"safe" MSR access failure handling Boris Ostrovsky
2016-03-14 14:32 ` Boris Ostrovsky
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=20160314120202.GD15800@pd.tnic \
--to=bp@alien8.de \
--cc=Xen-devel@lists.xen.org \
--cc=akpm@linux-foundation.org \
--cc=arjan@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@kernel.org \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=torvalds@linux-foundation.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 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.