[libvirt] [PATCHv2] storage: avoid null deref and leak on failure

Laine Stump laine at laine.org
Wed May 4 17:56:04 UTC 2011


On 05/04/2011 12:52 PM, Eric Blake wrote:
> Detected by clang.  NULL deref added in commit 343a27a (Mar 11),
> but leak of voldef present since commit 2cd9b2d (Apr 09).
>
> * src/storage/storage_driver.c (storageVolumeCreateXML): Don't
> leak voldef or dereference null volobj.
> ---
>
> v2: don't leave pool->volumes.objs pointing to stale memory on failure
>
>   src/storage/storage_driver.c |    8 ++++++--
>   1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
> index 1ea5d12..5118ffb 100644
> --- a/src/storage/storage_driver.c
> +++ b/src/storage/storage_driver.c
> @@ -1,7 +1,7 @@
>   /*
>    * storage_driver.c: core driver for storage APIs
>    *
> - * Copyright (C) 2006-2010 Red Hat, Inc.
> + * Copyright (C) 2006-2011 Red Hat, Inc.
>    * Copyright (C) 2006-2008 Daniel P. Berrange
>    *
>    * This library is free software; you can redistribute it and/or
> @@ -1319,8 +1319,12 @@ storageVolumeCreateXML(virStoragePoolPtr obj,
>       pool->volumes.objs[pool->volumes.count++] = voldef;
>       volobj = virGetStorageVol(obj->conn, pool->def->name, voldef->name,
>                                 voldef->key);
> +    if (!volobj) {
> +        pool->volumes.count--;
> +        goto cleanup;
> +    }
>
> -    if (volobj&&  backend->buildVol) {
> +    if (backend->buildVol) {
>           int buildret;
>           virStorageVolDefPtr buildvoldef = NULL;
>

ACK.



More information about the libvir-list mailing list