KVM: x86/mmu: fix memoryleak in kvm_mmu_vendor_module_init()
authorMiaohe Lin <linmiaohe@huawei.com>
Tue, 23 Aug 2022 06:32:37 +0000 (14:32 +0800)
committerSean Christopherson <seanjc@google.com>
Wed, 24 Aug 2022 20:47:49 +0000 (13:47 -0700)
When register_shrinker() fails, KVM doesn't release the percpu counter
kvm_total_used_mmu_pages leading to memoryleak. Fix this issue by calling
percpu_counter_destroy() when register_shrinker() fails.

Fixes: ab271bd4dfd5 ("x86: kvm: propagate register_shrinker return code")
Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
Link: https://lore.kernel.org/r/20220823063237.47299-1-linmiaohe@huawei.com
[sean: tweak shortlog and changelog]
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/mmu/mmu.c

index e418ef3ecfcb8cd73c8f0fed3dc8cfe4e05314ac..d25d55b1f0b53c95a727c5446b3f611caa426520 100644 (file)
@@ -6702,10 +6702,12 @@ int kvm_mmu_vendor_module_init(void)
 
        ret = register_shrinker(&mmu_shrinker, "x86-mmu");
        if (ret)
-               goto out;
+               goto out_shrinker;
 
        return 0;
 
+out_shrinker:
+       percpu_counter_destroy(&kvm_total_used_mmu_pages);
 out:
        mmu_destroy_caches();
        return ret;