summaryrefslogtreecommitdiff
path: root/drivers/block
diff options
context:
space:
mode:
authorSalman Qazi <sqazi@google.com>2012-10-02 00:29:25 (GMT)
committerSteven Rostedt <rostedt@goodmis.org>2012-11-02 15:29:36 (GMT)
commit28696f434fef0efa97534b59986ad33b9c4df7f8 (patch)
tree2b91ecd62ee6c82d727584b2753fa09c4094b1c6 /drivers/block
parent269833bd5a0f4443873da358b71675a890b47c3c (diff)
downloadlinux-fsl-qoriq-28696f434fef0efa97534b59986ad33b9c4df7f8.tar.xz
x86: Don't clobber top of pt_regs in nested NMI
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.com Signed-off-by: Salman Qazi <sqazi@google.com> [ Added a needed CFI_ADJUST_CFA_OFFSET ] Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Diffstat (limited to 'drivers/block')
0 files changed, 0 insertions, 0 deletions