Re: [PATCH] virtio: Don't access device data after unregistration.
flat view
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2012-09-03 14:13:35
Also in:
lkml
On Mon, Sep 03, 2012 at 03:50:42PM +0200, sjur.brandeland@stericsson.com wrote:
From: Sjur Brændeland <redacted> Fix panic in virtio.c when CONFIG_DEBUG_SLAB is set.
What's the root cause of the panic?
Use device_del() and put_device() instead of device_unregister(), and access device data before calling put_device().
Why does this help? Does device_unregister free the device so dev->index access crashes? If yes virtio_pci_remove will crash too as it accesses the device after the call to unregister_virtio_device so the fix won't be effective.
quoted hunk
Signed-off-by: Sjur Brændeland <redacted> cc: Guzman Lugo, Fernadndo <redacted> cc: Michael S. Tsirkin <mst@redhat.com> cc: virtualization@lists.linux-foundation.org cc: Ohad Ben-Cohen <redacted> --- drivers/virtio/virtio.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index c3b3f7f..71eacd1 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c@@ -225,8 +225,9 @@ EXPORT_SYMBOL_GPL(register_virtio_device); void unregister_virtio_device(struct virtio_device *dev) { - device_unregister(&dev->dev); + device_del(&dev->dev); ida_simple_remove(&virtio_index_ida, dev->index); + put_device(&dev->dev); } EXPORT_SYMBOL_GPL(unregister_virtio_device);-- 1.7.5.4