From: Peter Xu <peterx@redhat.com>
To: Fabiano Rosas <farosas@suse.de>
Cc: qemu-devel@nongnu.org, Thomas Huth <thuth@redhat.com>
Subject: Re: [PATCH 3/7] migration: Document the effect of vmstate_info_nullptr
Date: Tue, 7 Jan 2025 16:24:32 -0500 [thread overview]
Message-ID: <Z32bkFa4snLklsbj@x1n> (raw)
In-Reply-To: <20250107195025.9951-4-farosas@suse.de>
On Tue, Jan 07, 2025 at 04:50:21PM -0300, Fabiano Rosas wrote:
> The migration stream lacks magic numbers at some key points. It's easy
> to mis-parse data. Unfortunately, the VMS_NULLPTR_MARKER continues
> with the trend. A '0' byte is ambiguous and could be interpreted as a
> valid 0x30.
>
> It is maybe not worth trying to change this while keeping backward
> compatibility, so add some words of documentation to clarify.
>
> Signed-off-by: Fabiano Rosas <farosas@suse.de>
> ---
> migration/vmstate-types.c | 6 ++++++
> scripts/analyze-migration.py | 9 +++++++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/migration/vmstate-types.c b/migration/vmstate-types.c
> index e83bfccb9e..08ed059f87 100644
> --- a/migration/vmstate-types.c
> +++ b/migration/vmstate-types.c
> @@ -339,6 +339,12 @@ static int put_nullptr(QEMUFile *f, void *pv, size_t size,
>
> const VMStateInfo vmstate_info_nullptr = {
> .name = "uint64",
Ouch.. So I overlooked this line and this explains why it didn't go via
VMSDFieldGeneric already.
Instead of below comment, do we still have chance to change this to
something like "uint8"? Then I suppose the script will be able to identify
this properly.
> +
> + /*
> + * Ideally these would actually read/write the size of a pointer,
> + * but we're stuck with just a byte now for backward
> + * compatibility.
> + */
> .get = get_nullptr,
> .put = put_nullptr,
> };
> diff --git a/scripts/analyze-migration.py b/scripts/analyze-migration.py
> index f2457b1dde..4292fde424 100755
> --- a/scripts/analyze-migration.py
> +++ b/scripts/analyze-migration.py
> @@ -388,12 +388,21 @@ def read(self):
> return self.data
>
> class VMSDFieldUInt(VMSDFieldInt):
> + NULL_PTR_MARKER = 0x30
> +
> def __init__(self, desc, file):
> super(VMSDFieldUInt, self).__init__(desc, file)
>
> def read(self):
> super(VMSDFieldUInt, self).read()
> self.data = self.udata
> +
> + if self.data == self.NULL_PTR_MARKER:
> + # The migration stream encodes NULL pointers as '0' so any
> + # 0x30 in the stream could be a NULL. There's not much we
> + # can do without breaking backward compatibility.
> + pass
So this change doesn't do anything, right?
It'll be weird here having it "uint64" but the super().read() will actually
only read 1 byte.. I assume the oneliner change of s/uint64/uint8/ could
be a replacement of this patch, and I hope that'll work too for the script.
So we will still see a bunch of 0x30s but I assume it's ok.
> +
> return self.data
>
> class VMSDFieldIntLE(VMSDFieldInt):
> --
> 2.35.3
>
--
Peter Xu
next prev parent reply other threads:[~2025-01-07 21:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-07 19:50 [PATCH 0/7] migration: Fix s390 regressions + migration script Fabiano Rosas
2025-01-07 19:50 ` [PATCH 1/7] migration: Add more error handling to analyze-migration.py Fabiano Rosas
2025-01-07 19:50 ` [PATCH 2/7] migration: Remove unused argument in vmsd_desc_field_end Fabiano Rosas
2025-01-07 21:14 ` Peter Xu
2025-01-07 19:50 ` [PATCH 3/7] migration: Document the effect of vmstate_info_nullptr Fabiano Rosas
2025-01-07 21:24 ` Peter Xu [this message]
2025-01-08 13:31 ` Fabiano Rosas
2025-01-08 13:48 ` Peter Xu
2025-01-08 14:37 ` Fabiano Rosas
2025-01-07 19:50 ` [PATCH 4/7] migration: Fix parsing of s390 stream Fabiano Rosas
2025-01-07 19:50 ` [PATCH 5/7] migration: Dump correct JSON format for nullptr replacement Fabiano Rosas
2025-01-07 19:50 ` [PATCH 6/7] migration: Fix arrays of pointers in JSON writer Fabiano Rosas
2025-01-07 23:25 ` Peter Xu
2025-01-08 13:52 ` Fabiano Rosas
2025-01-08 16:14 ` Peter Xu
2025-01-08 17:15 ` Fabiano Rosas
2025-01-08 17:56 ` Peter Xu
2025-01-07 19:50 ` [PATCH 7/7] s390x: Fix CSS migration Fabiano Rosas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z32bkFa4snLklsbj@x1n \
--to=peterx@redhat.com \
--cc=farosas@suse.de \
--cc=qemu-devel@nongnu.org \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.