• Salman Qazi's avatar
    x86: Don't clobber top of pt_regs in nested NMI · 28696f43
    Salman Qazi authored
    The nested NMI modifies the place (instruction, flags and stack)
    that the first NMI will iret to.  However, the copy of registers
    modified is exactly the one that is the part of pt_regs in
    the first NMI.  This can change the behaviour of the first NMI.
    
    In particular, Google's arch_trigger_all_cpu_backtrace handler
    also prints regions of memory surrounding addresses appearing in
    registers.  This results in handled exceptions, after which nested NMIs
    start coming in.  These nested NMIs change the value of registers
    in pt_regs.  This can cause the original NMI handler to produce
    incorrect output.
    
    We solve this problem by interchanging the position of the preserved
    copy of the iret registers ("saved") and the copy subject to being
    trampled by nested NMI ("copied").
    
    Link: http://lkml.kernel.org/r/20121002002919.27236.14388.stgit@dungbeetle.mtv.corp.google.comSigned-off-by: default avatarSalman Qazi <sqazi@google.com>
    [ Added a needed CFI_ADJUST_CFA_OFFSET ]
    Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
    28696f43
entry_64.S 46.3 KB