• M
    qcow2: Fix qcow2_get_cluster_offset() · c834cba9
    Max Reitz 提交于
    Recently, qcow2_get_cluster_offset() has been changed to work with bytes
    instead of sectors. This invalidated some assertions and introduced a
    possible integer multiplication overflow.
    
    This could be reproduced using e.g.
    
    $ qemu-img create -f qcow2 -o cluster_size=1M blub.qcow2 8G
    Formatting 'foo.qcow2', fmt=qcow2 size=8589934592 encryption=off
    cluster_size=1048576 lazy_refcounts=off refcount_bits=16
    $ qemu-io -c map blub.qcow2
    qemu-io: qemu/block/qcow2-cluster.c:504: qcow2_get_cluster_offset:
    Assertion `bytes_needed <= INT_MAX' failed.
    [1]    20775 abort (core dumped)  qemu-io -c map foo.qcow2
    
    This patch removes the now wrong assertion, adding comments and more
    assertions to prove its correctness (and fixing the overflow which would
    become apparent with the original assertion removed).
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    Message-id: 20160620142623.24471-3-mreitz@redhat.com
    Reviewed-by: NEric Blake <eblake@redhat.com>
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    c834cba9
qcow2-cluster.c 59.4 KB