mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
qcow2: Limit snapshot table size
Even with a limit of 64k snapshots, each snapshot could have a filename and an ID with up to 64k, which would still lead to pretty large allocations, which could potentially lead to qemu aborting. Limit the total size of the snapshot table to an average of 1k per entry when the limit of 64k snapshots is fully used. This should be plenty for any reasonable user. This also fixes potential integer overflows of s->snapshot_size. Suggested-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Max Reitz <mreitz@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
6a83f8b5be
commit
5dae6e30c5
2 changed files with 18 additions and 1 deletions
|
@ -116,8 +116,14 @@ int qcow2_read_snapshots(BlockDriverState *bs)
|
|||
}
|
||||
offset += name_size;
|
||||
sn->name[name_size] = '\0';
|
||||
|
||||
if (offset - s->snapshots_offset > QCOW_MAX_SNAPSHOTS_SIZE) {
|
||||
ret = -EFBIG;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
assert(offset - s->snapshots_offset <= INT_MAX);
|
||||
s->snapshots_size = offset - s->snapshots_offset;
|
||||
return 0;
|
||||
|
||||
|
@ -138,7 +144,7 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
|
|||
uint32_t nb_snapshots;
|
||||
uint64_t snapshots_offset;
|
||||
} QEMU_PACKED header_data;
|
||||
int64_t offset, snapshots_offset;
|
||||
int64_t offset, snapshots_offset = 0;
|
||||
int ret;
|
||||
|
||||
/* compute the size of the snapshots */
|
||||
|
@ -150,7 +156,14 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
|
|||
offset += sizeof(extra);
|
||||
offset += strlen(sn->id_str);
|
||||
offset += strlen(sn->name);
|
||||
|
||||
if (offset > QCOW_MAX_SNAPSHOTS_SIZE) {
|
||||
ret = -EFBIG;
|
||||
goto fail;
|
||||
}
|
||||
}
|
||||
|
||||
assert(offset <= INT_MAX);
|
||||
snapshots_size = offset;
|
||||
|
||||
/* Allocate space for the new snapshot list */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue