Re: [PATCH 1/2] KVM: Exception during emulation decode should propagate

From: Takuya Yoshikawa
Date: Thu Jan 12 2012 - 04:13:12 EST


(2012/01/12 18:07), Nadav Amit wrote:

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@xxxxxxxxxxxxxxxxx> 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).

It's me who did that fix.



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).

You need comments from maintainers.

Takuya
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/