vhost: fix double free on device stop

Submitted by Michael S. Tsirkin on June 21, 2011, 5:10 p.m.

Details

Message ID 20110621171044.GA16869@redhat.com
State New
Headers show

Commit Message

Michael S. Tsirkin June 21, 2011, 5:10 p.m.
vhost dev stop failed to clear the log field.
Typically not an issue as dev start overwrites this field,
but if logging gets disabled before the following start,
it doesn't so this causes a double free.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 hw/vhost.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Michael S. Tsirkin June 21, 2011, 5:40 p.m.
On Tue, Jun 21, 2011 at 08:10:44PM +0300, Michael S. Tsirkin wrote:
> vhost dev stop failed to clear the log field.
> Typically not an issue as dev start overwrites this field,
> but if logging gets disabled before the following start,
> it doesn't so this causes a double free.
> 
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>

Um, this fixed double free but added another one.
Not sure why did it work for me :(
Sent a fixed v2

> ---
>  hw/vhost.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/hw/vhost.c b/hw/vhost.c
> index 80f771e..1fbf2e5 100644
> --- a/hw/vhost.c
> +++ b/hw/vhost.c
> @@ -784,5 +784,9 @@ void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev)
>  
>      hdev->started = false;
>      qemu_free(hdev->log);
> +    if (hdev->log) {
> +        qemu_free(hdev->log);
> +    }
> +    hdev->log = NULL;
>      hdev->log_size = 0;
>  }
> -- 
> 1.7.5.53.gc233e

Patch hide | download patch | download mbox

diff --git a/hw/vhost.c b/hw/vhost.c
index 80f771e..1fbf2e5 100644
--- a/hw/vhost.c
+++ b/hw/vhost.c
@@ -784,5 +784,9 @@  void vhost_dev_stop(struct vhost_dev *hdev, VirtIODevice *vdev)
 
     hdev->started = false;
     qemu_free(hdev->log);
+    if (hdev->log) {
+        qemu_free(hdev->log);
+    }
+    hdev->log = NULL;
     hdev->log_size = 0;
 }