[PATCH v2 6/8] migration: Check more vmstate flags
Fabiano Rosas <[email protected]>
| Newsgroups | gmane.comp.emulators.qemu |
|---|---|
| Message-ID | <[email protected]> |
Add more checks for vmstate flags constraints. Signed-off-by: Fabiano Rosas <[email protected]> --- migration/savevm.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/migration/savevm.c b/migration/savevm.c index 3e5cce6520d..c44df365cc8 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -893,6 +893,25 @@ static void vmstate_check(const VMStateDescription *vmsd) assert(field->flags & VMS_ARRAY_OF_POINTER); } + /* + * The VMS*ARRAY flags and VMS_VBUFFER affect allocation, + * they must have the proper fields set and no other + * vmstate types can set those fields, otherwise it won't + * be picked-up due to the missing flag. + */ + + if (field->flags & (VMS_ARRAY | VMS_VARRAY)) { + assert(field->num > 0 || field->num_indirect.size != 0); + } else { + assert(field->num == 0 && field->num_indirect.size == 0); + } + + if (field->flags & VMS_VBUFFER) { + assert(field->size_indirect.size != 0); + } else { + assert(field->size_indirect.size == 0); + } + if (field->flags & (VMS_STRUCT | VMS_VSTRUCT)) { /* Recurse to sub structures */ vmstate_check(field->vmsd); -- 2.53.0