kvm: external module: fix preempt notifier emulation clash with hardware debug
commit810bba030fdda4fb39a5f46181b28c0c80fc72df
authorAndrea Arcangeli <andrea@qumranet.com>
Sun, 3 Feb 2008 22:45:19 +0000 (3 23:45 +0100)
committerAvi Kivity <avi@qumranet.com>
Mon, 11 Feb 2008 08:17:59 +0000 (11 10:17 +0200)
tree9c0920aedc030d0f2f60d5c3f5bff589826cae11
parent4155d3517199a0977aea44dcaabe836589b6d4b6
kvm: external module: fix preempt notifier emulation clash with hardware debug

there's a small glitch in the preempt notifier external module
emulation. The overloaded debug handler will not detect when a debug
exception has been generated by ptrace and it'll crash the host by
calling the preempt emulator like if this was a KVM preempt emulated
exception, instead of notifying userland.

To detect when the preempt emulation is needed and when the exception
should be bypassed to the original handler, I decided to use bit 10 of
db7 that can't be set to 1 by ptrace, the mask against the userland
passed db7 value is 0xfc00, so bit 10 is forbidden to be on unless it
was KVM setting it manually with 0x701 (kvm really only needs 0x301 to
get exact exception, dunno what 0x400 means, it's defined reserved,
but it doesn't matter what it means as long as ptrace can't set it ;).

Signed-off-by: Andrea Arcangeli <andrea@qumranet.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
kvm/kernel/preempt.c