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

Maciej W. Rozycki
2010-07-14T16:42:24Z

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