• A
    iotests: Test abnormally large size in compressed cluster descriptor · abd3622c
    Alberto Garcia 提交于
    L2 entries for compressed clusters have a field that indicates the
    number of sectors used to store the data in the image.
    
    That's however not the size of the compressed data itself, just the
    number of sectors where that data is located. The actual data size is
    usually not a multiple of the sector size, and therefore cannot be
    represented with this field.
    
    The way it works is that QEMU reads all the specified sectors and
    starts decompressing the data until there's enough to recover the
    original uncompressed cluster. If there are any bytes left that
    haven't been decompressed they are simply ignored.
    
    One consequence of this is that even if the size field is larger than
    it needs to be QEMU can handle it just fine: it will read more data
    from disk but it will ignore the extra bytes.
    
    This test creates an image with two compressed clusters that use 5
    sectors (2.5 KB) each, increases the size field to the maximum (8192
    sectors, or 4 MB) and verifies that the data can be read without
    problems.
    
    This test is important because while the decompressed data takes
    exactly one cluster, the maximum value allowed in the compressed size
    field is twice the cluster size. So although QEMU won't produce images
    with such large values we need to make sure that it can handle them.
    
    Another effect of increasing the size field is that it can make
    it include data from the following host cluster(s). In this case
    'qemu-img check' will detect that the refcounts are not correct, and
    we'll need to rebuild them.
    
    Additionally, this patch also tests that decreasing the size corrupts
    the image since the original data can no longer be recovered. In this
    case QEMU returns an error when trying to read the compressed data,
    but 'qemu-img check' doesn't see anything wrong if the refcounts are
    consistent.
    
    One possible task for the future is to make 'qemu-img check' verify
    the sizes of the compressed clusters, by trying to decompress the data
    and checking that the size stored in the L2 entry is correct.
    Signed-off-by: NAlberto Garcia <berto@igalia.com>
    Message-id: 20180329120745.11154-1-berto@igalia.com
    Reviewed-by: NEric Blake <eblake@redhat.com>
    Signed-off-by: NMax Reitz <mreitz@redhat.com>
    abd3622c
122.out 11.3 KB