From: "Denis V. Lunev" <[email protected]> A counted string carries its length in one byte, so the buffer that qemu_get_counted_string() fills must hold 256 bytes. The dirty bitmap load state spells that size as a bare 256 for both of its alias buffers. Name it next to the qemu_get_counted_string() prototype and use it there, in the length assert of qemu_put_counted_string() and in DBMLoadState.
Suggested-by: Eric Blake <[email protected]> Signed-off-by: Denis V. Lunev <[email protected]> Cc: Peter Xu <[email protected]> Cc: Fabiano Rosas <[email protected]> Cc: Eric Blake <[email protected]> Cc: Vladimir Sementsov-Ogievskiy <[email protected]> Cc: [email protected] Message-ID: <[email protected]> Reviewed-by: Eric Blake <[email protected]> Signed-off-by: Eric Blake <[email protected]> (cherry picked from commit 319cd41f110ada2cbb7dd17700893327a3cb925e) Signed-off-by: Michael Tokarev <[email protected]> diff --git a/include/migration/qemu-file-types.h b/include/migration/qemu-file-types.h index adec5abc071..2a073bed299 100644 --- a/include/migration/qemu-file-types.h +++ b/include/migration/qemu-file-types.h @@ -163,7 +163,11 @@ static inline void qemu_get_sbe64s(QEMUFile *f, int64_t *pv) qemu_get_be64s(f, (uint64_t *)pv); } -size_t coroutine_mixed_fn qemu_get_counted_string(QEMUFile *f, char buf[256]); +/* Buffer size for a string whose length is sent as a single byte */ +#define QEMU_COUNTED_STRING_SIZE 256 + +size_t coroutine_mixed_fn +qemu_get_counted_string(QEMUFile *f, char buf[QEMU_COUNTED_STRING_SIZE]); void qemu_put_counted_string(QEMUFile *f, const char *name); diff --git a/migration/block-dirty-bitmap.c b/migration/block-dirty-bitmap.c index ceec6fabf92..702e761c0ed 100644 --- a/migration/block-dirty-bitmap.c +++ b/migration/block-dirty-bitmap.c @@ -145,8 +145,8 @@ typedef struct LoadBitmapState { /* State of the dirty bitmap migration (DBM) during load process */ typedef struct DBMLoadState { uint32_t flags; - char node_alias[256]; - char bitmap_alias[256]; + char node_alias[QEMU_COUNTED_STRING_SIZE]; + char bitmap_alias[QEMU_COUNTED_STRING_SIZE]; char bitmap_name[BDRV_BITMAP_MAX_NAME_SIZE + 1]; BlockDriverState *bs; BdrvDirtyBitmap *bitmap; diff --git a/migration/qemu-file.c b/migration/qemu-file.c index 45c330b6d32..cfc19bf9c7a 100644 --- a/migration/qemu-file.c +++ b/migration/qemu-file.c @@ -860,7 +860,8 @@ uint64_t qemu_get_be64(QEMUFile *f) * else 0 * (Note a 0 length string will return 0 either way) */ -size_t coroutine_mixed_fn qemu_get_counted_string(QEMUFile *f, char buf[256]) +size_t coroutine_mixed_fn +qemu_get_counted_string(QEMUFile *f, char buf[QEMU_COUNTED_STRING_SIZE]) { size_t len = qemu_get_byte(f); size_t res = qemu_get_buffer(f, (uint8_t *)buf, len); @@ -878,7 +879,7 @@ void qemu_put_counted_string(QEMUFile *f, const char *str) { size_t len = strlen(str); - assert(len < 256); + assert(len < QEMU_COUNTED_STRING_SIZE); qemu_put_byte(f, len); qemu_put_buffer(f, (const uint8_t *)str, len); } -- 2.47.3
