Re: [patch 2/2] x86 NMI-safe INT3 and Page Fault

From: Maciej W. Rozycki
Date: Wed Jul 14 2010 - 12:42:28 EST


On Wed, 14 Jul 2010, Mathieu Desnoyers wrote:

> This patch makes all faults, traps and exception safe to be called from NMI
> context *except* single-stepping, which requires iret to restore the TF (trap
> flag) and jump to the return address in a single instruction. Sorry, no kprobes

Watch out for the RF flag too, that is not set correctly by POPFD -- that
may be important for faulting instructions that also have a hardware
breakpoint set at their address.

> support in NMI handlers because of this limitation. This cannot be emulated
> with popf/lret, because lret would be single-stepped. It does not apply to
> "immediate values" because they do not use single-stepping. This code detects if
> the TF flag is set and uses the iret path for single-stepping, even if it
> reactivates NMIs prematurely.

What about the VM flag for VM86 tasks? It cannot be changed by POPFD
either.

How about only using the special return path when a nested exception is
about to return to the NMI handler? You'd avoid all the odd cases then
that do not happen in the NMI context.

Maciej
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/