Skip to content
  • Steven Rostedt's avatar
    x86: Save cr2 in NMI in case NMIs take a page fault (for i386) · 70fb74a5
    Steven Rostedt authored
    Avi Kivity reported that page faults in NMIs could cause havic if
    the NMI preempted another page fault handler:
    
       The recent changes to NMI allow exceptions to take place in NMI
       handlers, but I think that a #PF (say, due to access to vmalloc space)
       is still problematic.  Consider the sequence
    
        #PF  (cr2 set by processor)
          NMI
            ...
            #PF (cr2 clobbered)
              do_page_fault()
              IRET
            ...
            IRET
          do_page_fault()
            address = read_cr2()
    
       The last line reads the overwritten cr2 value.
    
    This is the i386 version, which has the luxury of doing the work
    in C code.
    
    Link: http://lkml.kernel.org/r/4FBB8C40.6080304@redhat.com
    
    
    
    Reported-by: default avatarAvi Kivity <avi@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    70fb74a5