All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/2] KVM: x86/xen: Initialize Xen timer only once
@ 2022-08-08 19:06 ` Coleman Dietsch
  0 siblings, 0 replies; 29+ messages in thread
From: Coleman Dietsch @ 2022-08-08 19:06 UTC (permalink / raw)
  To: kvm
  Cc: x86, Sean Christopherson, Dave Hansen, linux-kernel, stable,
	syzbot+e54f930ed78eb0f85281, Ingo Molnar, Borislav Petkov,
	H . Peter Anvin, Paolo Bonzini, Thomas Gleixner, Pavel Skripkin,
	linux-kernel-mentees

Add a check for existing xen timers before initializing a new one.

Currently kvm_xen_init_timer() is called on every
KVM_XEN_VCPU_ATTR_TYPE_TIMER, which is causing the following ODEBUG
crash when vcpu->arch.xen.timer is already set.

ODEBUG: init active (active state 0)
object type: hrtimer hint: xen_timer_callbac0
RIP: 0010:debug_print_object+0x16e/0x250 lib/debugobjects.c:502
Call Trace:
__debug_object_init
debug_hrtimer_init
debug_init
hrtimer_init
kvm_xen_init_timer
kvm_xen_vcpu_set_attr
kvm_arch_vcpu_ioctl
kvm_vcpu_ioctl
vfs_ioctl

Fixes: 536395260582 ("KVM: x86/xen: handle PV timers oneshot mode")
Cc: stable@vger.kernel.org
Link: https://syzkaller.appspot.com/bug?id=8234a9dfd3aafbf092cc5a7cd9842e3ebc45fc42
Reported-by: syzbot+e54f930ed78eb0f85281@syzkaller.appspotmail.com
Signed-off-by: Coleman Dietsch <dietschc@csp.edu>
---
 arch/x86/kvm/xen.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/arch/x86/kvm/xen.c b/arch/x86/kvm/xen.c
index a0c05ccbf4b1..6e554041e862 100644
--- a/arch/x86/kvm/xen.c
+++ b/arch/x86/kvm/xen.c
@@ -713,7 +713,9 @@ int kvm_xen_vcpu_set_attr(struct kvm_vcpu *vcpu, struct kvm_xen_vcpu_attr *data)
 				break;
 			}
 			vcpu->arch.xen.timer_virq = data->u.timer.port;
-			kvm_xen_init_timer(vcpu);
+
+			if (!vcpu->arch.xen.timer.function)
+				kvm_xen_init_timer(vcpu);
 
 			/* Restart the timer if it's set */
 			if (data->u.timer.expires_ns)
-- 
2.34.1

_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees

^ permalink raw reply related	[flat|nested] 29+ messages in thread
* [PATCH v3 0/2] KVM: x86/xen: Prevent Xen timer init when running
@ 2022-08-08 19:02 Coleman Dietsch
  2022-08-08 19:02 ` [PATCH v3 1/2] KVM: x86/xen: Initialize Xen timer only once Coleman Dietsch
  0 siblings, 1 reply; 29+ messages in thread
From: Coleman Dietsch @ 2022-08-08 19:02 UTC (permalink / raw)
  To: dietschc, kvm
  Cc: x86, Sean Christopherson, Dave Hansen, linux-kernel, Ingo Molnar,
	Borislav Petkov, H . Peter Anvin, Paolo Bonzini, Thomas Gleixner,
	Pavel Skripkin, linux-kernel-mentees

The following issue was discovered by syzbot:
WARNING: ODEBUG bug in kvm_xen_vcpu_set_attr.

When running the syzbot reproducer code, the following crash dump occurs:

ODEBUG: init active (active state 0)
object type: hrtimer hint: xen_timer_callbac0
RIP: 0010:debug_print_object+0x16e/0x250 lib/debugobjects.c:502
Call Trace:
__debug_object_init
debug_hrtimer_init
debug_init
hrtimer_init
kvm_xen_init_timer
kvm_xen_vcpu_set_attr
kvm_arch_vcpu_ioctl
kvm_vcpu_ioctl
vfs_ioctl

The ODEBUG bug crash appears to be happening when vcpu->arch.xen.timer is
already set and kvm_xen_init_timer() is called, which appears to be the
result of two separate issues.

The first issue is that kvm_xen_init_timer() is run "every"
KVM_XEN_VCPU_ATTR_TYPE_TIMER. This is addressed in patch 1.

The second issue is that the stop xen timer code should be run before
changing the IRQ vector. This is addressed in patch 2 with some cleanup.

version 3 changes
-removed ambiguous comment
-updated another comment to be more descriptive
-continue cleaning up changelogs

version 2 changes (mostly feedback from Sean Christopherson)
-split patch into 2 patches
-fix changelogs to be more descriptive
-fix formatting issues
-add check for existing xen timer before trying to initialize another one
-removed conditional for kvm_xen_stop_timer() so that it always runs
-ensure that xen timer is stopped before changing IRQ vector
-streamlined switch case KVM_XEN_VCPU_ATTR_TYPE_TIMER a bit

Coleman Dietsch (2):
  KVM: x86/xen: Initialize Xen timer only once
  KVM: x86/xen: Stop Xen timer before changing IRQ

 arch/x86/kvm/xen.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)

-- 
2.34.1

_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees

^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2022-08-09 14:53 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-08 19:06 [PATCH v3 1/2] KVM: x86/xen: Initialize Xen timer only once Coleman Dietsch
2022-08-08 19:06 ` Coleman Dietsch
2022-08-08 19:06 ` [PATCH v3 2/2] KVM: x86/xen: Stop Xen timer before changing IRQ Coleman Dietsch
2022-08-08 19:06   ` Coleman Dietsch
2022-08-09  0:34   ` Sean Christopherson via Linux-kernel-mentees
2022-08-09  0:34     ` Sean Christopherson
2022-08-09  9:22   ` David Woodhouse
2022-08-09  9:22     ` David Woodhouse
2022-08-09 12:59     ` Paolo Bonzini
2022-08-09 12:59       ` Paolo Bonzini
2022-08-09 13:51       ` David Woodhouse
2022-08-09 13:51         ` David Woodhouse
2022-08-09 14:07         ` Sean Christopherson via Linux-kernel-mentees
2022-08-09 14:07           ` Sean Christopherson
2022-08-09 14:16           ` David Woodhouse
2022-08-09 14:16             ` David Woodhouse
2022-08-09 14:31             ` Paolo Bonzini
2022-08-09 14:31               ` Paolo Bonzini
2022-08-09 14:36               ` David Woodhouse
2022-08-09 14:36                 ` David Woodhouse
2022-08-09 14:40               ` Sean Christopherson via Linux-kernel-mentees
2022-08-09 14:40                 ` Sean Christopherson
2022-08-09 14:52                 ` David Woodhouse
2022-08-09 14:52                   ` David Woodhouse
2022-08-09  0:32 ` [PATCH v3 1/2] KVM: x86/xen: Initialize Xen timer only once Sean Christopherson via Linux-kernel-mentees
2022-08-09  0:32   ` Sean Christopherson
2022-08-09 12:59   ` Paolo Bonzini
2022-08-09 12:59     ` Paolo Bonzini
  -- strict thread matches above, loose matches on Subject: below --
2022-08-08 19:02 [PATCH v3 0/2] KVM: x86/xen: Prevent Xen timer init when running Coleman Dietsch
2022-08-08 19:02 ` [PATCH v3 1/2] KVM: x86/xen: Initialize Xen timer only once Coleman Dietsch

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.