From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Xu <peterx@redhat.com>, qemu-devel@nongnu.org
Cc: Hyman Huang <huangy81@chinatelecom.cn>,
"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [PATCH] KVM: Fix dirty ring mmap incorrect size due to renaming accident
Date: Wed, 9 Jun 2021 09:51:52 +0200 [thread overview]
Message-ID: <17006e0c-72ff-3c8a-dd72-b4054020eb38@redhat.com> (raw)
In-Reply-To: <20210609014355.217110-1-peterx@redhat.com>
On 09/06/21 03:43, Peter Xu wrote:
> Found this when I wanted to try the per-vcpu dirty rate series out, then I
> found that it's not really working and it can quickly hang death a guest. I
> found strange errors (e.g. guest crash after migration) happens even without
> the per-vcpu dirty rate series.
>
> When merging dirty ring, probably no one notice that the trivial renaming diff
> [1] missed two existing references of kvm_dirty_ring_sizes; they do matter
> since otherwise we'll mmap() a shorter range of memory after the renaming.
>
> I think it didn't SIGBUS for me easily simply because some other stuff within
> qemu mmap()ed right after the dirty rings (e.g. when testing 4096 slots, it
> aligned with one small page on x86), so when we access the rings we've been
> reading/writting to random memory elsewhere of qemu.
>
> Fix the two sizes when map/unmap the shared dirty gfn memory.
>
> [1] https://lore.kernel.org/qemu-devel/dac5f0c6-1bca-3daf-e5d2-6451dbbaca93@redhat.com/
>
> Cc: Hyman Huang <huangy81@chinatelecom.cn>
> Cc: Paolo Bonzini <pbonzini@redhat.com>
> Cc: Dr. David Alan Gilbert <dgilbert@redhat.com>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
> accel/kvm/kvm-all.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
> index c7ec5388500..e5b10dd129c 100644
> --- a/accel/kvm/kvm-all.c
> +++ b/accel/kvm/kvm-all.c
> @@ -411,7 +411,7 @@ static int do_kvm_destroy_vcpu(CPUState *cpu)
> }
>
> if (cpu->kvm_dirty_gfns) {
> - ret = munmap(cpu->kvm_dirty_gfns, s->kvm_dirty_ring_size);
> + ret = munmap(cpu->kvm_dirty_gfns, s->kvm_dirty_ring_bytes);
> if (ret < 0) {
> goto err;
> }
> @@ -495,7 +495,7 @@ int kvm_init_vcpu(CPUState *cpu, Error **errp)
>
> if (s->kvm_dirty_ring_size) {
> /* Use MAP_SHARED to share pages with the kernel */
> - cpu->kvm_dirty_gfns = mmap(NULL, s->kvm_dirty_ring_size,
> + cpu->kvm_dirty_gfns = mmap(NULL, s->kvm_dirty_ring_bytes,
> PROT_READ | PROT_WRITE, MAP_SHARED,
> cpu->kvm_fd,
> PAGE_SIZE * KVM_DIRTY_LOG_PAGE_OFFSET);
>
Oops, sorry. I queued it.
Paolo
prev parent reply other threads:[~2021-06-09 7:52 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-09 1:43 [PATCH] KVM: Fix dirty ring mmap incorrect size due to renaming accident Peter Xu
2021-06-09 7:51 ` Paolo Bonzini [this message]
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=17006e0c-72ff-3c8a-dd72-b4054020eb38@redhat.com \
--to=pbonzini@redhat.com \
--cc=dgilbert@redhat.com \
--cc=huangy81@chinatelecom.cn \
--cc=peterx@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).