KVM: Fix srcu struct leakage
PATCH 1/1 KVM: Fix srcu struct leakage
From: Jan Kiszka <[email protected]>
Clean up the srcu struct and refactor its release on early errors.
Signed-off-by Jan Kiszka <[email protected]>
--- virt/kvm/kvm_main.c | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-)
virt/kvm/kvm_main.c +7 -8
@@ -401,23 +401,19 @@ static struct kvm *kvm_create_vm(void) r = -ENOMEM ; kvm->memslots =kzalloc (sizeof (struct kvm_memslots ),GFP_KERNEL );if (!kvm->memslots) - goto out_err; + goto out_err_nosrcu;if (init_srcu_struct (&kvm->srcu)) - goto out_err; + goto out_err_nosrcu;for (i =0 ; i <KVM_NR_BUSES ; i++) { kvm->buses[i] =kzalloc (sizeof (struct kvm_io_bus ),GFP_KERNEL ); -if (!kvm->buses[i]) { -cleanup_srcu_struct (&kvm->srcu); +if (!kvm->buses[i]) goto out_err; - } } r =kvm_init_mmu_notifier (kvm); -if (r) { -cleanup_srcu_struct (&kvm->srcu); +if (r) goto out_err; - } kvm->mm = current->mm;atomic_inc (&kvm->mm->mm_count);
@@ -435,6 +431,8 @@ out:return kvm; out_err: +cleanup_srcu_struct (&kvm->srcu); +out_err_nosrcu:hardware_disable_all (); out_err_nodisable:for (i =0 ; i <KVM_NR_BUSES ; i++)
@@ -516,6 +514,7 @@ static void kvm_destroy_vm(struct kvm *kvm)kvm_arch_destroy_vm (kvm);hardware_disable_all ();mmdrop (mm); +cleanup_srcu_struct (&kvm->srcu); }void kvm_get_kvm (struct kvm *kvm)
Signature · 1 line
1.7.1
PATCH v2 1/1 KVM: Fix srcu struct leakage
From: Jan Kiszka <[email protected]>
Clean up the srcu struct on vm destruction and refactor its release on early errors.
Signed-off-by Jan Kiszka <[email protected]>
---
This one is better: kvm_arch_destroy_vm releases the kvm object, so we need to free the struct earlier.
virt/kvm/kvm_main.c | 15 +++++++-------- 1 files changed, 7 insertions(+), 8 deletions(-)
virt/kvm/kvm_main.c +7 -8
@@ -401,23 +401,19 @@ static struct kvm *kvm_create_vm(void) r = -ENOMEM ; kvm->memslots =kzalloc (sizeof (struct kvm_memslots ),GFP_KERNEL );if (!kvm->memslots) - goto out_err; + goto out_err_nosrcu;if (init_srcu_struct (&kvm->srcu)) - goto out_err; + goto out_err_nosrcu;for (i =0 ; i <KVM_NR_BUSES ; i++) { kvm->buses[i] =kzalloc (sizeof (struct kvm_io_bus ),GFP_KERNEL ); -if (!kvm->buses[i]) { -cleanup_srcu_struct (&kvm->srcu); +if (!kvm->buses[i]) goto out_err; - } } r =kvm_init_mmu_notifier (kvm); -if (r) { -cleanup_srcu_struct (&kvm->srcu); +if (r) goto out_err; - } kvm->mm = current->mm;atomic_inc (&kvm->mm->mm_count);
@@ -435,6 +431,8 @@ out:return kvm; out_err: +cleanup_srcu_struct (&kvm->srcu); +out_err_nosrcu:hardware_disable_all (); out_err_nodisable:for (i =0 ; i <KVM_NR_BUSES ; i++)
@@ -513,6 +511,7 @@ static void kvm_destroy_vm(struct kvm *kvm)#else kvm_arch_flush_shadow (kvm);#endif +cleanup_srcu_struct (&kvm->srcu);kvm_arch_destroy_vm (kvm);hardware_disable_all ();mmdrop (mm);
Quoted 5 lines · Jan Kiszka
From: Jan Kiszka<[email protected]>
Clean up the srcu struct on vm destruction and refactor its release on early errors.
Please separate the fix from the cleanup. The former needs to be stabled.
Signature · 1 line
error compiling committee.c: too many arguments to function