On Thu 22 Feb 2018 12:39:53 AM CET, Eric Blake wrote:
> +        assert(!!s->cluster_data == !!s->cluster_cache);
> +        assert(csize < 2 * s->cluster_size + 512);
>          if (!s->cluster_data) {
> -            /* one more sector for decompressed data alignment */
> -            s->cluster_data = qemu_try_blockalign(bs->file->bs,
> -                    QCOW_MAX_CRYPT_CLUSTERS * s->cluster_size + 512);
> +            s->cluster_data = g_try_malloc(2 * s->cluster_size + 512);
>              if (!s->cluster_data) {
>                  return -ENOMEM;
>              }

Why the "+ 512" ?

nb_csectors is guaranteed to be at most twice the cluster size, you can
even assert that:

    int max_csize = (s->csize_mask + 1) * 512;
    assert(max_csize == s->cluster_size * 2);
    s->cluster_data = qemu_try_blockalign(bs->file->bs, max_csize);

And csize is at most (max_csize - sector_offset), so you can change your
assertion to this:

   assert(csize <= 2 * s->cluster_size);

Berto

Reply via email to