diff options
author | Kevin Wolf <kwolf@redhat.com> | 2014-05-20 13:55:50 +0200 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2014-08-15 15:07:16 +0200 |
commit | a67e128a4f40cf07abd86f92d0d3c913db2ad885 (patch) | |
tree | f74bfc23c1c59559a94baccde6e28934305a0f6c /block/vhdx-log.c | |
parent | 17cce735780f0ff6a2ef173c34614bd47acd56e5 (diff) | |
download | qemu-a67e128a4f40cf07abd86f92d0d3c913db2ad885.tar.gz qemu-a67e128a4f40cf07abd86f92d0d3c913db2ad885.tar.bz2 qemu-a67e128a4f40cf07abd86f92d0d3c913db2ad885.zip |
vhdx: Handle failure for potentially large allocations
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 vhdx block driver.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Benoit Canet <benoit@irqsave.net>
Diffstat (limited to 'block/vhdx-log.c')
-rw-r--r-- | block/vhdx-log.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/block/vhdx-log.c b/block/vhdx-log.c index 0088be8747..eb5c7a097b 100644 --- a/block/vhdx-log.c +++ b/block/vhdx-log.c @@ -352,7 +352,12 @@ static int vhdx_log_read_desc(BlockDriverState *bs, BDRVVHDXState *s, } desc_sectors = vhdx_compute_desc_sectors(hdr.descriptor_count); - desc_entries = qemu_blockalign(bs, desc_sectors * VHDX_LOG_SECTOR_SIZE); + desc_entries = qemu_try_blockalign(bs->file, + desc_sectors * VHDX_LOG_SECTOR_SIZE); + if (desc_entries == NULL) { + ret = -ENOMEM; + goto exit; + } ret = vhdx_log_read_sectors(bs, log, §ors_read, desc_entries, desc_sectors, false); |