From: "Radim Krčmář" <rkrcmar@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
yfu@redhat.com, Eduardo Habkost <ehabkost@redhat.com>,
stable@vger.kernel.org
Subject: Re: [PATCH] KVM: x86: inject exceptions produced by x86_decode_insn
Date: Fri, 10 Nov 2017 22:42:15 +0100 [thread overview]
Message-ID: <20171110214214.GI2189@flask> (raw)
In-Reply-To: <1510307378-97452-1-git-send-email-pbonzini@redhat.com>
2017-11-10 10:49+0100, Paolo Bonzini:
> Sometimes, a processor might execute an instruction while another
> processor is updating the page tables for that instruction's code page,
> but before the TLB shootdown completes. The interesting case happens
> if the page is in the TLB.
>
> In general, the processor will succeed in executing the instruction and
> nothing bad happens. However, what if the instruction is an MMIO access?
> If *that* happens, KVM invokes the emulator, and the emulator gets the
> updated page tables. If the update side had marked the code page as non
> present, the page table walk then will fail and so will x86_decode_insn.
>
> Unfortunately, even though kvm_fetch_guest_virt is correctly returning
> X86EMUL_PROPAGATE_FAULT, x86_decode_insn's caller treats the failure as
> a fatal error if the instruction cannot simply be reexecuted (as is the
> case for MMIO). And this in fact happened sometimes when rebooting
> Windows 2012r2 guests. Just checking ctxt->have_exception and injecting
> the exception if true is enough to fix the case.
>
> Thanks to Eduardo Habkost for helping in the debugging of this issue.
>
> Reported-by: Yanan Fu <yfu@redhat.com>
> Cc: Eduardo Habkost <ehabkost@redhat.com>
> Cc: stable@vger.kernel.org
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
Applied, thanks.
next prev parent reply other threads:[~2017-11-10 21:42 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-10 9:49 [PATCH] KVM: x86: inject exceptions produced by x86_decode_insn Paolo Bonzini
2017-11-10 21:42 ` Radim Krčmář [this message]
2017-11-13 7:15 ` Wanpeng Li
2017-11-13 8:32 ` Paolo Bonzini
2017-11-13 10:09 ` Yanan Fu
2017-11-16 17:12 ` Radim Krčmář
2017-11-29 11:44 ` Eduardo Habkost
2017-11-29 11:44 ` Paolo Bonzini
2017-11-29 18:42 ` Eduardo Habkost
2017-11-29 22:47 ` Paolo Bonzini
2017-11-29 23:10 ` Eduardo Habkost
2017-11-30 16:04 ` Eduardo Habkost
2017-11-30 9:20 ` Wanpeng Li
2017-11-30 16:00 ` Paolo Bonzini
2017-11-30 20:33 ` Eduardo Habkost
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=20171110214214.GI2189@flask \
--to=rkrcmar@redhat.com \
--cc=ehabkost@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=stable@vger.kernel.org \
--cc=yfu@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.