Re: [PATCH] KVM: emulator: Use linearize() when fetching instructions.

From: Avi Kivity
Date: Sun Apr 17 2011 - 08:27:00 EST


On 04/15/2011 06:27 AM, Nelson Elhage wrote:
This means that the truncation behavior in linearize needs to grow an additional
slight piece of complexity: when fetching, truncation is dependent on the
execution mode, instead of the current address size.

diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
index a5f63d4..d3d43a7 100644
--- a/arch/x86/kvm/emulate.c
+++ b/arch/x86/kvm/emulate.c
@@ -542,7 +542,7 @@ static int emulate_nm(struct x86_emulate_ctxt *ctxt)

static int linearize(struct x86_emulate_ctxt *ctxt,
struct segmented_address addr,
- unsigned size, bool write,
+ unsigned size, bool write, bool fetch,

Calls to functions with strings of bool arguments are confusing. Please make this __linearize, and introduce a new linearize() which doesn't have a fetch argument.

ulong *linear)
{
struct decode_cache *c =&ctxt->decode;
@@ -602,7 +602,7 @@ static int linearize(struct x86_emulate_ctxt *ctxt,
}
break;
}

linearize() will currently fault on an unreadable code segment. Need to avoid that on instruction fetches.

- if (c->ad_bytes != 8)
+ if (fetch ? ctxt->mode != X86EMUL_MODE_PROT64 : c->ad_bytes != 8)
la&= (u32)-1;
*linear = la;
return X86EMUL_CONTINUE;

--
error compiling committee.c: too many arguments to function

--
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/