From: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org, quintela@redhat.com
Subject: Re: [Qemu-devel] Re: [PATCH] savevm: fix corruption in vmstate_subsection_load().
Date: Thu, 20 Jan 2011 19:23:07 +0900 [thread overview]
Message-ID: <AANLkTikewwAZNDC9J6pC5c2_2CWiwQtjq2nwE8GFNBqK@mail.gmail.com> (raw)
In-Reply-To: <4D37FB2F.1050803@redhat.com>
2011/1/20 Paolo Bonzini <pbonzini@redhat.com>:
> On 01/20/2011 09:57 AM, Yoshiaki Tamura wrote:
>>
>> 2011/1/20 Paolo Bonzini<pbonzini@redhat.com>:
>>>
>>> On 12/14/2010 10:07 AM, Yoshiaki Tamura wrote:
>>>>
>>>> Although it's rare to happen in live migration, when the head of a
>>>> byte stream contains 0x05
>>>
>>> IIUC, this happens if you have VMS_STRUCT and the field after the
>>> VMS_STRUCT
>>> starts with 0x5.
>>>
>>> I think you should also add this in vmstate_subsection_load:
>>>
>>> sub_vmsd = vmstate_get_subsection(sub, idstr);
>>> if (sub_vmsd == NULL) {
>>> return -ENOENT;
>>> }
>>> + assert (!sub_vmsd->subsections);
>>> ret = vmstate_load_state(f, sub_vmsd, opaque, version_id);
>>>
>>> and this in vmstate_load_state:
>>>
>>> if (field->flags& VMS_STRUCT) {
>>> + assert (!vmsd->subsections);
>>> ret = vmstate_load_state(f, field->vmsd, addr,
>>> field->vmsd->version_id);
>>> }
>>
>> Hi Paolo,
>>
>> You mean, having subsection nested and under VMS_STRUCT are
>> violations?
>
> I believe so, because the protocol doesn't allow you to distinguish:
>
> - in the case of nested subsections, whether 2 consecutive subsections are
> siblings, or the second is nested into the first. In fact, your patch also
> fixes a latent bug in case a device supports more than one subsection, and
> both are present in the data stream. When vmstate_subsection_load is called
> for the first subsection, it would see a 0x5 byte (the beginning of the
> second subsection), eat it and then fail with ENOENT. The second subsection
> would then fail to load.
>
> - in the case of VMS_STRUCT, whether a 0x5 byte after the VMS_STRUCT is a
> subsection or part of the parent data stream. This is, I believe, the
> source of your bug.
Thank you for the explanation. It's very helpful because I
didn't know the background of subsection. Kemari is kind of
stress test of live migration.
> I don't think it is possible to fix these problems in the file format while
> preserving backwards compatibility with pre-subsection QEMU (which was a
> fundamental requirement of subsections). So, I think your patch is correct
> and fixes the practical bugs. However, we can be even stronger and assert
> that the problematic vmstate descriptions are not used.
>
> Even better, asserts matching the ones above could be added to
> vmstate_subsection_save and vmstate_save_state, as well.
I see. Let me fold the assertion you pointed to the original
patch for now. Because I'm not an expert in subsection, I would
like to leave further improvements to the others.
Yoshi
>
> Paolo
>
>
next prev parent reply other threads:[~2011-01-20 10:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-12-14 9:07 [Qemu-devel] [PATCH] savevm: fix corruption in vmstate_subsection_load() Yoshiaki Tamura
2011-01-20 2:09 ` Yoshiaki Tamura
2011-01-20 8:27 ` [Qemu-devel] " Paolo Bonzini
2011-01-20 8:57 ` Yoshiaki Tamura
2011-01-20 9:06 ` Paolo Bonzini
2011-01-20 10:23 ` Yoshiaki Tamura [this message]
2011-01-24 8:48 ` Yoshiaki Tamura
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=AANLkTikewwAZNDC9J6pC5c2_2CWiwQtjq2nwE8GFNBqK@mail.gmail.com \
--to=tamura.yoshiaki@lab.ntt.co.jp \
--cc=aliguori@us.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).