From a67e128a4f40cf07abd86f92d0d3c913db2ad885 Mon Sep 17 00:00:00 2001 From: Kevin Wolf Date: Tue, 20 May 2014 13:55:50 +0200 Subject: 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 Reviewed-by: Stefan Hajnoczi Reviewed-by: Benoit Canet --- block/vhdx-log.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'block/vhdx-log.c') 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); -- cgit v1.2.3