mirror of https://github.com/xemu-project/xemu.git
vmdk: Move l1_size check into vmdk_add_extent()
This header check is common to VMDK3 and VMDK4, so move it into vmdk_add_extent(). Signed-off-by: Fam Zheng <famz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
7780d47211
commit
b0651b8c24
16
block/vmdk.c
16
block/vmdk.c
|
@ -401,6 +401,14 @@ static int vmdk_add_extent(BlockDriverState *bs,
|
||||||
error_report("invalid granularity, image may be corrupt");
|
error_report("invalid granularity, image may be corrupt");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
if (l1_size > 512 * 1024 * 1024) {
|
||||||
|
/* Although with big capacity and small l1_entry_sectors, we can get a
|
||||||
|
* big l1_size, we don't want unbounded value to allocate the table.
|
||||||
|
* Limit it to 512M, which is 16PB for default cluster and L2 table
|
||||||
|
* size */
|
||||||
|
error_report("L1 size too big");
|
||||||
|
return -EFBIG;
|
||||||
|
}
|
||||||
|
|
||||||
s->extents = g_realloc(s->extents,
|
s->extents = g_realloc(s->extents,
|
||||||
(s->num_extents + 1) * sizeof(VmdkExtent));
|
(s->num_extents + 1) * sizeof(VmdkExtent));
|
||||||
|
@ -598,14 +606,6 @@ static int vmdk_open_vmdk4(BlockDriverState *bs,
|
||||||
}
|
}
|
||||||
l1_size = (le64_to_cpu(header.capacity) + l1_entry_sectors - 1)
|
l1_size = (le64_to_cpu(header.capacity) + l1_entry_sectors - 1)
|
||||||
/ l1_entry_sectors;
|
/ l1_entry_sectors;
|
||||||
if (l1_size > 512 * 1024 * 1024) {
|
|
||||||
/* although with big capacity and small l1_entry_sectors, we can get a
|
|
||||||
* big l1_size, we don't want unbounded value to allocate the table.
|
|
||||||
* Limit it to 512M, which is 16PB for default cluster and L2 table
|
|
||||||
* size */
|
|
||||||
error_report("L1 size too big");
|
|
||||||
return -EFBIG;
|
|
||||||
}
|
|
||||||
if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) {
|
if (le32_to_cpu(header.flags) & VMDK4_FLAG_RGD) {
|
||||||
l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9;
|
l1_backup_offset = le64_to_cpu(header.rgd_offset) << 9;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue