* [PATCH] KVM: Initialize kvm before registering the mmu notifier
@ 2011-06-03 20:04 Mike Waychison
2011-06-06 8:28 ` Avi Kivity
0 siblings, 1 reply; 2+ messages in thread
From: Mike Waychison @ 2011-06-03 20:04 UTC (permalink / raw)
To: Avi Kivity, Marcelo Tosatti
Cc: digitaleric, san, kvm, linux-kernel, OGAWA Hirofumi,
Mike Waychison
It doesn't make sense to ever see a half-initialized kvm structure on
mmu notifier callbacks. Previously, 85722cda changed the ordering to
ensure that the mmu_lock was initialized before mmu notifier
registration, but there is still a race where the mmu notifier could
come in and try accessing other portions of struct kvm before they are
intialized.
Solve this by moving the mmu notifier registration to occur after the
structure is completely initialized.
Google-Bug-Id: 452199
Signed-off-by: Mike Waychison <mikew@google.com>
---
Applies to Linus' tree.
---
virt/kvm/kvm_main.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 22cdb96..ba781f4 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -467,12 +467,8 @@ static struct kvm *kvm_create_vm(void)
if (!kvm->buses[i])
goto out_err;
}
- spin_lock_init(&kvm->mmu_lock);
-
- r = kvm_init_mmu_notifier(kvm);
- if (r)
- goto out_err;
+ spin_lock_init(&kvm->mmu_lock);
kvm->mm = current->mm;
atomic_inc(&kvm->mm->mm_count);
kvm_eventfd_init(kvm);
@@ -480,6 +476,11 @@ static struct kvm *kvm_create_vm(void)
mutex_init(&kvm->irq_lock);
mutex_init(&kvm->slots_lock);
atomic_set(&kvm->users_count, 1);
+
+ r = kvm_init_mmu_notifier(kvm);
+ if (r)
+ goto out_err;
+
raw_spin_lock(&kvm_lock);
list_add(&kvm->vm_list, &vm_list);
raw_spin_unlock(&kvm_lock);
--
1.7.3.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] KVM: Initialize kvm before registering the mmu notifier
2011-06-03 20:04 [PATCH] KVM: Initialize kvm before registering the mmu notifier Mike Waychison
@ 2011-06-06 8:28 ` Avi Kivity
0 siblings, 0 replies; 2+ messages in thread
From: Avi Kivity @ 2011-06-06 8:28 UTC (permalink / raw)
To: Mike Waychison
Cc: Marcelo Tosatti, digitaleric, san, kvm, linux-kernel,
OGAWA Hirofumi
On 06/03/2011 11:04 PM, Mike Waychison wrote:
> It doesn't make sense to ever see a half-initialized kvm structure on
> mmu notifier callbacks. Previously, 85722cda changed the ordering to
> ensure that the mmu_lock was initialized before mmu notifier
> registration, but there is still a race where the mmu notifier could
> come in and try accessing other portions of struct kvm before they are
> intialized.
>
> Solve this by moving the mmu notifier registration to occur after the
> structure is completely initialized.
Thanks, applied, and queued for 3.0.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-06-06 8:28 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-03 20:04 [PATCH] KVM: Initialize kvm before registering the mmu notifier Mike Waychison
2011-06-06 8:28 ` Avi Kivity
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox