[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>
- [Qemu-devel] [PATCH v2 00/20] block: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 02/20] block: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 03/20] bochs: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 04/20] cloop: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- Re: [Qemu-devel] [PATCH v2 04/20] cloop: Handle failure for potentially large allocations,
Benoît Canet <=
- [Qemu-devel] [PATCH v2 01/20] block: Introduce qemu_try_blockalign(), Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 05/20] curl: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 06/20] dmg: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 07/20] iscsi: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28
- [Qemu-devel] [PATCH v2 08/20] nfs: Handle failure for potentially large allocations, Kevin Wolf, 2014/05/28