[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CALCETrU34B6XMmxcN2ix1bhnPFVRp5vNjyjxXMGYiOERZD483A@mail.gmail.com>
Date: Tue, 20 May 2014 19:39:31 -0700
From: Andy Lutomirski <luto@...capital.net>
To: Steven Rostedt <rostedt@...dmis.org>
Cc: "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"H. Peter Anvin" <hpa@...or.com>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Ingo Molnar <mingo@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
Borislav Petkov <bp@...en8.de>,
Andi Kleen <andi@...stfloor.org>
Subject: Re: [RFC] x86_64: A real proposal for iret-less return to kernel
On Tue, May 20, 2014 at 7:27 PM, Steven Rostedt <rostedt@...dmis.org> wrote:
> On Tue, 2014-05-20 at 17:53 -0700, Andy Lutomirski wrote:
>>
>> If there's an NMI on the stack, we must use `RET` until we're ready
>> to re-enabled NMIs.
>
> I'm a little confused by NMI on the stack. Do you mean NMI on the target
> stack? If so, please state that.
I mean that if we're in an NMI handler or in anything nested inside it.
>> * We can add a per-cpu variable `nmi_mce_nest_count` that is nonzero
>> whenever an NMI or MCE is on the stack. We'll increment it at the
>> very beginning of the NMI handler and clear it at the very end.
>> We will also increment it in `do_machine_check` before doing
>> anything that can cause an interrupt. The result is that the only
>> interrupt that can happen with `nmi_mce_nest_count == 0` in NMI
>> context is an MCE at the beginning or end of the NMI handler.
>
> Just note that this will probably be done in the C code, as NMI has
> issues with gs being safe.
>
> Also, should we call it "nmi" specifically. Perhaps
> "ist_stack_nest_count", stating that the stack is ist to match
> do_machine_check as well? Maybe that's not a good name either. Someone
> else can come up with something that's a little more generic than NMI?
So the issue here is that we can have an NMI followed immediately by
an MCE. The MCE code can call force_sig, which could plausibly result
in a kprobe or something similar happening. The return from that
needs to use IRET.
Since I don't see a clean way to reliably detect that we're inside an
NMI, I propose instead detecting when we're in *either* NMI or MCE,
hence the name. As long as we mark do_machine_check and whatever asm
code calls it __kprobes, I think we'll be okay.
--Andy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists