From mboxrd@z Thu Jan 1 00:00:00 1970 From: Gleb Natapov Subject: Re: [PATCHv2] KVM: x86: Fix memory leak in vmx.c Date: Thu, 18 Apr 2013 13:21:53 +0300 Message-ID: <20130418102153.GB8911@redhat.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: kvm@vger.kernel.org To: Andrew Honig Return-path: Received: from mx1.redhat.com ([209.132.183.28]:64685 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S967293Ab3DRKVz (ORCPT ); Thu, 18 Apr 2013 06:21:55 -0400 Content-Disposition: inline In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On Wed, Apr 17, 2013 at 10:54:32AM -0700, Andrew Honig wrote: > > If userspace creates and destroys multiple VMs within the same process > we leak 20k of memory in the userspace process context per VM. This > patch frees the memory in kvm_arch_destroy_vm. If the process exits > without closing the VM file descriptor or the file descriptor has been > shared with another process then we don't need to free the memory. > > Signed-off-by: Andrew Honig > --- > arch/x86/kvm/x86.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index e172132..e93e16b 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -6811,6 +6811,23 @@ void kvm_arch_sync_events(struct kvm *kvm) > > void kvm_arch_destroy_vm(struct kvm *kvm) > { > + if (current->mm == kvm->mm) { > + /* > + * Free memory regions allocated on behalf of userspace, > + * unless the the memory map has changed due to process exit > + * or fd copying. > + */ > + struct kvm_userspace_memory_region mem; > + memset(&mem, 0, sizeof(mem)); > + mem.slot = APIC_ACCESS_PAGE_PRIVATE_MEMSLOT; > + kvm_set_memory_region(kvm, &mem, 0); > + > + mem.slot = IDENTITY_PAGETABLE_PRIVATE_MEMSLOT; > + kvm_set_memory_region(kvm, &mem, 0); > + > + mem.slot = TSS_PRIVATE_MEMSLOT; > + kvm_set_memory_region(kvm, &mem, 0); You should code it against next branch. kvm_set_memory_region() has only two parameters there. > + } > kvm_iommu_unmap_guest(kvm); > kfree(kvm->arch.vpic); > kfree(kvm->arch.vioapic); > -- > 1.7.10.4 > > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Gleb.