On 03/20/2018 12:36 PM, Kevin Wolf wrote:
> It's unclear what the real maximum cluster size is for the Parallels
> format, but let's at least make sure that we don't get integer
> overflows in our .bdrv_co_create implementation.
>
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
> block/parallels.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/block/parallels.c b/block/parallels.c
> index 2da5e56a9d..e4ca018c2e 100644
> --- a/block/parallels.c
> +++ b/block/parallels.c
> @@ -526,6 +526,11 @@ static int coroutine_fn parallels_co_create(BlockdevCreateOptions* opts,
> cl_size = DEFAULT_CLUSTER_SIZE;
> }
>
> + /* XXX What is the real limit here? This is an insanely large maximum. */
> + if (cl_size >= UINT64_MAX / MAX_PARALLELS_IMAGE_FACTOR) {
INT64_MAX is probably a saner starting point for the division...
> + error_setg(errp, "Cluster size is too large");
> + return -EINVAL;
> + }
> if (total_size >= MAX_PARALLELS_IMAGE_FACTOR * cl_size) {
since total_size still has to fit within off_t (63 bits, not 64)
> error_setg(errp, "Image size is too large for this cluster size");
> return -E2BIG;
>
With that change,
Reviewed-by: Eric Blake <eblake@redhat.com>
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org