Add qemu_get_counted_string to read a string prefixed by a count byte
and use it in loadvm_state and ram_load. Where ever it's used, check the return and error if it failed. Minor: ram_load was using a 257 byte array for its string, the maximum length is 255 bytes + 0 terminator, so fix to 256 Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Reviewed-by: Amit Shah <amit.shah@redhat.com> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Juan Quintela <quintela@redhat.com> Signed-off-by: Juan Quintela <quintela@redhat.com>
This commit is contained in:
parent
5cd8cadae8
commit
b3af1bc9d2
@ -312,4 +312,7 @@ static inline void qemu_get_sbe64s(QEMUFile *f, int64_t *pv)
|
||||
{
|
||||
qemu_get_be64s(f, (uint64_t *)pv);
|
||||
}
|
||||
|
||||
size_t qemu_get_counted_string(QEMUFile *f, char buf[256]);
|
||||
|
||||
#endif
|
||||
|
@ -585,3 +585,20 @@ int qemu_put_qemu_file(QEMUFile *f_des, QEMUFile *f_src)
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
/*
|
||||
* Get a string whose length is determined by a single preceding byte
|
||||
* A preallocated 256 byte buffer must be passed in.
|
||||
* Returns: len on success and a 0 terminated string in the buffer
|
||||
* else 0
|
||||
* (Note a 0 length string will return 0 either way)
|
||||
*/
|
||||
size_t qemu_get_counted_string(QEMUFile *f, char buf[256])
|
||||
{
|
||||
size_t len = qemu_get_byte(f);
|
||||
size_t res = qemu_get_buffer(f, (uint8_t *)buf, len);
|
||||
|
||||
buf[res] = 0;
|
||||
|
||||
return res == len ? res : 0;
|
||||
}
|
||||
|
@ -973,8 +973,7 @@ int qemu_loadvm_state(QEMUFile *f)
|
||||
while ((section_type = qemu_get_byte(f)) != QEMU_VM_EOF) {
|
||||
uint32_t instance_id, version_id, section_id;
|
||||
SaveStateEntry *se;
|
||||
char idstr[257];
|
||||
int len;
|
||||
char idstr[256];
|
||||
|
||||
trace_qemu_loadvm_state_section(section_type);
|
||||
switch (section_type) {
|
||||
@ -982,9 +981,11 @@ int qemu_loadvm_state(QEMUFile *f)
|
||||
case QEMU_VM_SECTION_FULL:
|
||||
/* Read section start */
|
||||
section_id = qemu_get_be32(f);
|
||||
len = qemu_get_byte(f);
|
||||
qemu_get_buffer(f, (uint8_t *)idstr, len);
|
||||
idstr[len] = 0;
|
||||
if (!qemu_get_counted_string(f, idstr)) {
|
||||
error_report("Unable to read ID string for section %u",
|
||||
section_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
instance_id = qemu_get_be32(f);
|
||||
version_id = qemu_get_be32(f);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user