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