aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Cody <jcody@redhat.com>2016-03-22 23:33:42 -0400
committerKevin Wolf <kwolf@redhat.com>2016-04-15 17:22:12 +0200
commit66176fc6a7b86fcead206fb0685ba688e40646a9 (patch)
tree361bfc4b67259ecf9c1d8f3a5f13142b233eb27f
parentc23fb11bbba90da2a5e2e121fb391a608b82afe5 (diff)
block/vpc: make checks on max table size a bit more lax
The check on the max_table_size field not being larger than required is valid, and in accordance with the VHD spec. However, there have been VHD images encountered in the wild that have an out-of-spec max table size that is technically too large. There is no issue in allowing this larger table size, as we also later verify that the computed size (used for the pagetable) is large enough to fit all sectors. In addition, max_table_entries is bounds checked against SIZE_MAX and INT_MAX. Remove the strict check, so that we can accomodate these sorts of images that are benignly out of spec. Reported-by: Stefan Hajnoczi <stefanha@redhat.com> Reported-by: Grant Wu <grantwwu@gmail.com> Signed-off-by: Jeff Cody <jcody@redhat.com> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
-rw-r--r--block/vpc.c4
1 files changed, 0 insertions, 4 deletions
diff --git a/block/vpc.c b/block/vpc.c
index 03aee81f86..0eef099532 100644
--- a/block/vpc.c
+++ b/block/vpc.c
@@ -351,10 +351,6 @@ static int vpc_open(BlockDriverState *bs, QDict *options, int flags,
ret = -EINVAL;
goto fail;
}
- if (s->max_table_entries > (VHD_MAX_SECTORS * 512) / s->block_size) {
- ret = -EINVAL;
- goto fail;
- }
computed_size = (uint64_t) s->max_table_entries * s->block_size;
if (computed_size < bs->total_sectors * 512) {