On 01/26/2017 04:18 AM, Daniel P. Berrange wrote: > The qcow driver refuses to open images which are less than > 2 bytes in size, but will happily create such images. Add > a check in the create path to avoid this discrepancy.
I agree that we have the 2-byte limit: static int qcow_open(BlockDriverState *bs, QDict *options, int flags, ... if (header.size <= 1) { error_setg(errp, "Image size is too small (must be at least 2 bytes)"); ret = -EINVAL; goto fail; } But why 2 bytes? That's a weird limit from history. Oh well, no one should be creating many new qcow images when we have qcow2, so I see no problem with your patch as-is. > > Reviewed-by: Max Reitz <mre...@redhat.com> > Signed-off-by: Daniel P. Berrange <berra...@redhat.com> > --- > block/qcow.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > +++ b/block/qcow.c > @@ -799,6 +799,12 @@ static int qcow_create(const char *filename, QemuOpts > *opts, Error **errp) > /* Read out options */ > total_size = ROUND_UP(qemu_opt_get_size_del(opts, BLOCK_OPT_SIZE, 0), > BDRV_SECTOR_SIZE); > + if (total_size <= 1) { It will never be 1 because of the ROUND_UP (it will either be 0 or a sector size), but your code is defensive to match the open check. Reviewed-by: Eric Blake <ebl...@redhat.com> > + error_setg(errp, "Image size is too small, cannot be zero length"); > + ret = -EINVAL; > + goto cleanup; > + } > + > backing_file = qemu_opt_get_del(opts, BLOCK_OPT_BACKING_FILE); > if (qemu_opt_get_bool_del(opts, BLOCK_OPT_ENCRYPT, false)) { > flags |= BLOCK_FLAG_ENCRYPT; > -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature