qemu/block
Kevin Wolf 2cf7cfa1cd qcow2: Catch some L1 table index overflows
This catches the situation that is described in the bug report at
https://bugs.launchpad.net/qemu/+bug/865518 and goes like this:

    $ qemu-img create -f qcow2 huge.qcow2 $((1024*1024))T
    Formatting 'huge.qcow2', fmt=qcow2 size=1152921504606846976 encryption=off cluster_size=65536 lazy_refcounts=off
    $ qemu-io /tmp/huge.qcow2 -c "write $((1024*1024*1024*1024*1024*1024 - 1024)) 512"
    Segmentation fault

With this patch applied the segfault will be avoided, however the case
will still fail, though gracefully:

    $ qemu-img create -f qcow2 /tmp/huge.qcow2 $((1024*1024))T
    Formatting 'huge.qcow2', fmt=qcow2 size=1152921504606846976 encryption=off cluster_size=65536 lazy_refcounts=off
    qemu-img: The image size is too large for file format 'qcow2'

Note that even long before these overflow checks kick in, you get
insanely high memory usage (up to INT_MAX * sizeof(uint64_t) = 16 GB for
the L1 table), so with somewhat smaller image sizes you'll probably see
qemu aborting for a failed g_malloc().

If you need huge image sizes, you should increase the cluster size to
the maximum of 2 MB in order to get higher limits.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2013-05-14 16:44:33 +02:00
..
blkdebug.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
blkverify.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
bochs.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
cloop.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
commit.c block: fix null-pointer bug on error case in block commit 2013-01-17 10:51:11 +01:00
cow.c block: Add options QDict to bdrv_file_open() prototypes 2013-03-22 17:51:31 +01:00
curl.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
dmg.c block: Make find_image_format safe with NULL filename 2013-03-22 17:51:32 +01:00
gluster.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
iscsi.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
linux-aio.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
Makefile.objs block: initial VHDX driver support framework - supports open and probe 2013-05-03 10:31:58 +02:00
mirror.c block: Add driver-specific options for backing files 2013-04-22 10:27:59 +02:00
nbd.c remove double semicolons 2013-05-12 13:25:55 +04:00
parallels.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
qcow2-cache.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
qcow2-cluster.c qcow2: Catch some L1 table index overflows 2013-05-14 16:44:33 +02:00
qcow2-refcount.c qcow2: Fix L1 write error handling in qcow2_update_snapshot_refcount 2013-04-05 18:58:05 +02:00
qcow2-snapshot.c qcow2: flush in qcow2_update_snapshot_refcount() 2013-03-15 16:07:50 +01:00
qcow2.c qcow2: Catch some L1 table index overflows 2013-05-14 16:44:33 +02:00
qcow2.h qcow2: Catch some L1 table index overflows 2013-05-14 16:44:33 +02:00
qcow.c qcow: allow sub-cluster compressed write to last cluster 2013-04-22 10:27:58 +02:00
qed-check.c qed: mark image clean after repair succeeds 2012-08-10 10:25:12 +02:00
qed-cluster.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-gencb.c Use glib memory allocation and free functions 2011-08-20 23:01:08 -05:00
qed-l2-cache.c qed: do not evict in-use L2 table cache entries 2012-03-12 15:14:06 +01:00
qed-table.c misc: move include files to include/qemu/ 2012-12-19 08:32:39 +01:00
qed.c block: Add options QDict to bdrv_file_open() prototypes 2013-03-22 17:51:31 +01:00
qed.h block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
raw-aio.h block: make discard asynchronous 2013-01-15 10:03:47 +01:00
raw-posix.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
raw-win32.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
raw.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
rbd.c rbd: Fix use after free in rbd_open() 2013-04-26 13:26:28 +02:00
sheepdog.c sheepdog: fix loadvm operation 2013-04-26 13:37:51 +02:00
ssh.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
stream.c block: move include files to include/block/ 2012-12-19 08:31:31 +01:00
vdi.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
vhdx.c block: add read-only support to VHDX image format. 2013-05-03 10:31:58 +02:00
vhdx.h block: initial VHDX driver support framework - supports open and probe 2013-05-03 10:31:58 +02:00
vmdk.c vmdk: add bdrv_co_write_zeroes 2013-05-03 10:33:49 +02:00
vpc.c block: Add options QDict to .bdrv_open() 2013-03-15 16:07:49 +01:00
vvfat.c block: Remove filename parameter from .bdrv_file_open() 2013-04-22 11:34:35 +02:00
win32-aio.c win32-aio: use iov utility functions instead of open-coding them 2013-01-18 09:57:51 +01:00