From: Alex Williamson <alex.williamson@redhat.com>
To: kvm@vger.kernel.org, gleb@redhat.com
Cc: aik@ozlabs.ru, pbonzini@redhat.com, linux-kernel@vger.kernel.org
Subject: [PATCH 1/4] kvm: Destroy & free KVM devices on release
Date: Tue, 29 Oct 2013 10:13:22 -0600 [thread overview]
Message-ID: <20131029161322.22578.18997.stgit@bling.home> (raw)
In-Reply-To: <20131029160019.22578.16409.stgit@bling.home>
The KVM device interface allocates a struct kvm_device and calls
kvm_device_ops.create on it from KVM VM ioctl KVM_CREATE_DEVICE.
This returns a file descriptor to the user for them to set/get/check
further attributes. On closing the file descriptor, one would assume
that kvm_device_ops.destroy is called and all traces of the device
would go away. One would be wrong, it actually does nothing more
than release the struct kvm reference, waiting until the VM is
destroyed before doing more. This leaves devices that only want a
single instance of themselves per VM in a tough spot.
To fix this, do full cleanup on release of the device file descriptor.
It's also non-symmetric that one of the existing devices frees the
struct kvm_device from it's .destroy function, while the other
doesn't. KVM-core allocates the structure and should therefore be
responsible for freeing it. Finally, add a missing kfree for the
device creation error path.
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
---
arch/powerpc/kvm/book3s_xics.c | 1 -
virt/kvm/kvm_main.c | 5 +++++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/arch/powerpc/kvm/book3s_xics.c b/arch/powerpc/kvm/book3s_xics.c
index a3a5cb8..9a82426 100644
--- a/arch/powerpc/kvm/book3s_xics.c
+++ b/arch/powerpc/kvm/book3s_xics.c
@@ -1220,7 +1220,6 @@ static void kvmppc_xics_free(struct kvm_device *dev)
for (i = 0; i <= xics->max_icsid; i++)
kfree(xics->ics[i]);
kfree(xics);
- kfree(dev);
}
static int kvmppc_xics_create(struct kvm_device *dev, u32 type)
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index a9dd682..fec8320 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -572,6 +572,7 @@ static void kvm_destroy_devices(struct kvm *kvm)
list_del(node);
dev->ops->destroy(dev);
+ kfree(dev);
}
}
@@ -2231,6 +2232,9 @@ static int kvm_device_release(struct inode *inode, struct file *filp)
struct kvm_device *dev = filp->private_data;
struct kvm *kvm = dev->kvm;
+ list_del(&dev->vm_node);
+ dev->ops->destroy(dev);
+ kfree(dev);
kvm_put_kvm(kvm);
return 0;
}
@@ -2294,6 +2298,7 @@ static int kvm_ioctl_create_device(struct kvm *kvm,
ret = anon_inode_getfd(ops->name, &kvm_device_fops, dev, O_RDWR | O_CLOEXEC);
if (ret < 0) {
ops->destroy(dev);
+ kfree(dev);
return ret;
}
next prev parent reply other threads:[~2013-10-29 16:13 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-29 16:13 [PATCH 0/4] KVM-VFIO pseudo device for VFIO coherency Alex Williamson
2013-10-29 16:13 ` Alex Williamson [this message]
2013-10-30 10:40 ` [PATCH 1/4] kvm: Destroy & free KVM devices on release Gleb Natapov
2013-10-30 14:30 ` Alex Williamson
2013-10-30 15:33 ` Gleb Natapov
2013-10-30 15:42 ` Paolo Bonzini
2013-10-30 15:44 ` Gleb Natapov
2013-10-30 15:56 ` Alex Williamson
2013-10-30 16:10 ` Paolo Bonzini
2013-10-30 16:18 ` Gleb Natapov
2013-10-29 16:13 ` [PATCH 2/4] kvm: Add VFIO device Alex Williamson
2013-10-29 16:13 ` [PATCH 3/4] kvm/x86: Convert iommu_flags to iommu_noncoherent Alex Williamson
2013-10-29 16:13 ` [PATCH 4/4] kvm: Create non-coherent DMA registeration Alex Williamson
-- strict thread matches above, loose matches on Subject: below --
2013-10-01 20:15 [PATCH 0/4] KVM noncoherent DMA registration and VFIO pseudo device Alex Williamson
2013-10-01 20:15 ` [PATCH 1/4] kvm: Destroy & free KVM devices on release Alex Williamson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131029161322.22578.18997.stgit@bling.home \
--to=alex.williamson@redhat.com \
--cc=aik@ozlabs.ru \
--cc=gleb@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).