qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v2 04/20] cloop: Handle failure for potentially


From: Benoît Canet
Subject: Re: [Qemu-devel] [PATCH v2 04/20] cloop: Handle failure for potentially large allocations
Date: Fri, 30 May 2014 14:13:23 +0200
User-agent: Mutt/1.5.21 (2010-09-15)

The Wednesday 28 May 2014 à 16:37:37 (+0200), Kevin Wolf wrote :
> Some code in the block layer makes potentially huge allocations. Failure
> is not completely unexpected there, so avoid aborting qemu and handle
> out-of-memory situations gracefully.
> 
> This patch addresses the allocations in the cloop block driver.
> 
> Signed-off-by: Kevin Wolf <address@hidden>
> Reviewed-by: Stefan Hajnoczi <address@hidden>
> ---
>  block/cloop.c | 23 ++++++++++++++++++++---
>  1 file changed, 20 insertions(+), 3 deletions(-)
> 
> diff --git a/block/cloop.c b/block/cloop.c
> index 8457737..f328be0 100644
> --- a/block/cloop.c
> +++ b/block/cloop.c
> @@ -116,7 +116,12 @@ static int cloop_open(BlockDriverState *bs, QDict 
> *options, int flags,
>                     "try increasing block size");
>          return -EINVAL;
>      }
> -    s->offsets = g_malloc(offsets_size);
> +
> +    s->offsets = g_try_malloc(offsets_size);
> +    if (s->offsets == NULL) {
> +        error_setg(errp, "Could not allocate offsets table");
> +        return -ENOMEM;
> +    }
>  
>      ret = bdrv_pread(bs->file, 128 + 4 + 4, s->offsets, offsets_size);
>      if (ret < 0) {
> @@ -158,8 +163,20 @@ static int cloop_open(BlockDriverState *bs, QDict 
> *options, int flags,
>      }
>  
>      /* initialize zlib engine */
> -    s->compressed_block = g_malloc(max_compressed_block_size + 1);
> -    s->uncompressed_block = g_malloc(s->block_size);
> +    s->compressed_block = g_try_malloc(max_compressed_block_size + 1);
> +    if (s->compressed_block == NULL) {
> +        error_setg(errp, "Could not allocate compressed_block");
> +        ret = -ENOMEM;
> +        goto fail;
> +    }
> +
> +    s->uncompressed_block = g_try_malloc(s->block_size);
> +    if (s->uncompressed_block == NULL) {
> +        error_setg(errp, "Could not allocate uncompressed_block");
> +        ret = -ENOMEM;
> +        goto fail;
> +    }
> +
>      if (inflateInit(&s->zstream) != Z_OK) {
>          ret = -EINVAL;
>          goto fail;
> -- 
> 1.8.3.1
> 
> 

Reviewed-by: Benoit Canet <address@hidden>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]