Messages in this thread | | | Date | Thu, 23 Jul 2015 23:07:23 +0200 | From | Willy Tarreau <> | Subject | Re: Dealing with the NMI mess |
| |
On Thu, Jul 23, 2015 at 01:53:34PM -0700, Andy Lutomirski wrote: > On Thu, Jul 23, 2015 at 1:52 PM, Willy Tarreau <w@1wt.eu> wrote: > > On Thu, Jul 23, 2015 at 01:38:33PM -0700, Linus Torvalds wrote: > >> On Thu, Jul 23, 2015 at 1:21 PM, Andy Lutomirski <luto@amacapital.net> wrote: > >> > > >> > 2. Forbid IRET inside NMIs. Doable but maybe not that pretty. > >> > > >> > We haven't considered: > >> > > >> > 3. Forbid faults (other than MCE) inside NMI. > >> > >> I'd really prefer #2. #3 depends on us getting many things right, and > >> never introducing new cases in the future. > >> > >> #2, in contrast, seems to be fairly localized. Yes, RF is an issue, > >> but returning to user space with RF clear doesn't really seem to be > >> all that problematic. > > > > What's the worst case that can happen with RF cleared when returing > > to user space ? My understanding is that it's just that we risk to > > break again on an instruction that had a break point set and which > > already triggered the breakpoint, right ? > > I assume Linus meant returning to kernel space with RF clear. Returns > to userspace have their own fancy logic here, and it's survived for a > couple of releases, including through an explicit test of RF handling > :)
Ah you must be right, got it. Yes you want to break into the NMI handler and you either disable all breakpoints/single-step until the NMI's iret by clearing DR7, or you loop over and over on the same instruction if you try to restart the stopped instruction with RF clear. That makes sense.
Thanks, Willy
| |