aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.9.21/0026-KVM-x86-fix-escape-of-guest-dr6-to-the-host.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.9.21/0026-KVM-x86-fix-escape-of-guest-dr6-to-the-host.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.9.21/0026-KVM-x86-fix-escape-of-guest-dr6-to-the-host.patch70
1 files changed, 0 insertions, 70 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.9.21/0026-KVM-x86-fix-escape-of-guest-dr6-to-the-host.patch b/common/recipes-kernel/linux/linux-yocto-4.9.21/0026-KVM-x86-fix-escape-of-guest-dr6-to-the-host.patch
deleted file mode 100644
index 38255613..00000000
--- a/common/recipes-kernel/linux/linux-yocto-4.9.21/0026-KVM-x86-fix-escape-of-guest-dr6-to-the-host.patch
+++ /dev/null
@@ -1,70 +0,0 @@
-From 75a724909e81cd4612490d633ab269495377d332 Mon Sep 17 00:00:00 2001
-From: Wanpeng Li <wanpeng.li@hotmail.com>
-Date: Wed, 13 Dec 2017 10:46:40 +0100
-Subject: [PATCH 26/33] KVM: x86: fix escape of guest dr6 to the host
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-commit efdab992813fb2ed825745625b83c05032e9cda2 upstream.
-
-syzkaller reported:
-
- WARNING: CPU: 0 PID: 12927 at arch/x86/kernel/traps.c:780 do_debug+0x222/0x250
- CPU: 0 PID: 12927 Comm: syz-executor Tainted: G OE 4.15.0-rc2+ #16
- RIP: 0010:do_debug+0x222/0x250
- Call Trace:
- <#DB>
- debug+0x3e/0x70
- RIP: 0010:copy_user_enhanced_fast_string+0x10/0x20
- </#DB>
- _copy_from_user+0x5b/0x90
- SyS_timer_create+0x33/0x80
- entry_SYSCALL_64_fastpath+0x23/0x9a
-
-The testcase sets a watchpoint (with perf_event_open) on a buffer that is
-passed to timer_create() as the struct sigevent argument. In timer_create(),
-copy_from_user()'s rep movsb triggers the BP. The testcase also sets
-the debug registers for the guest.
-
-However, KVM only restores host debug registers when the host has active
-watchpoints, which triggers a race condition when running the testcase with
-multiple threads. The guest's DR6.BS bit can escape to the host before
-another thread invokes timer_create(), and do_debug() complains.
-
-The fix is to respect do_debug()'s dr6 invariant when leaving KVM.
-
-Reported-by: Dmitry Vyukov <dvyukov@google.com>
-Cc: Paolo Bonzini <pbonzini@redhat.com>
-Cc: Radim Krčmář <rkrcmar@redhat.com>
-Cc: David Hildenbrand <david@redhat.com>
-Cc: Dmitry Vyukov <dvyukov@google.com>
-Reviewed-by: David Hildenbrand <david@redhat.com>
-Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
-Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
-Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
----
- arch/x86/kvm/x86.c | 6 ++++++
- 1 file changed, 6 insertions(+)
-
-diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
-index d2ea523..af333e1 100644
---- a/arch/x86/kvm/x86.c
-+++ b/arch/x86/kvm/x86.c
-@@ -2833,6 +2833,12 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu)
- kvm_x86_ops->vcpu_put(vcpu);
- kvm_put_guest_fpu(vcpu);
- vcpu->arch.last_host_tsc = rdtsc();
-+ /*
-+ * If userspace has set any breakpoints or watchpoints, dr6 is restored
-+ * on every vmexit, but if not, we might have a stale dr6 from the
-+ * guest. do_debug expects dr6 to be cleared after it runs, do the same.
-+ */
-+ set_debugreg(0, 6);
- }
-
- static int kvm_vcpu_ioctl_get_lapic(struct kvm_vcpu *vcpu,
---
-2.7.4
-