Messages in this thread | | | Subject | Re: [PATCH 1/2] KVM: Exception during emulation decode should propagate | From | Nadav Amit <> | Date | Thu, 12 Jan 2012 11:07:09 +0200 |
| |
On Jan 12, 2012, at 2:26 AM, Takuya Yoshikawa wrote:
> (2012/01/12 7:11), Takuya Yoshikawa wrote: >> On Wed, 11 Jan 2012 18:53:30 +0200 >> Nadav Amit<namit@cs.technion.ac.il> wrote: >> >>> An exception might occur during decode (e.g., #PF during fetch). >>> Currently, the exception is ignored and emulation is performed. > > Note that the decode/emulation will not be continued in such a case. > > insn_fetch() is a bit tricky macro and it contains "goto done" to outside. > So if an error happens during fetching the instruction, x86_decode_insn() > will handle the X86EMUL_* fault value and returns FAIL immediately.
You got a point. Yet, a problem still exists. I now notice I was originally working on previous version (3.0.0) where the return-code of x86_decode_insn is handled differently. Nonetheless, I think the current implementation might report emulation error in such a scenario (instead of triggering #PF/#GP in the guest).
>> >> When I cleaned up insn_fetch(), I thought that fetching the instruction >> which is being executed by the guest cannot cause #PF. >> >> The possibility that a meaningless userspace might similtaneously unmap >> the page, noted by Avi IIRC, was ignored intentionally, so we just fail >> in such a case. >> >> Did you see any real problem?
Well, I run some research project for which I emulate instructions quite often. I do see a real problem with Linux 3.0.0. Please note AFAIK #GP might occur as well during instruction fetch. I don't think failing is the right behavior in such case - there is no real reason to fail.
Please tell me whether you are OK with KVM failing in such a scenario. If not - I'll send an updated patch (in which x86_decode_insn returns EMULATION_OK when rc == X86EMUL_PROPAGATE_FAULT).
Regards, Nadav
| |