Refresh bugfix/x86/KVM-x86-Emulator-fixes-for-eip-canonical-checks-on-n.patch
svn path=/dists/sid/linux/; revision=22000
This commit is contained in:
parent
8a49cecdb0
commit
784da3f721
|
@ -22,11 +22,9 @@ Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|||
arch/x86/kvm/emulate.c | 78 ++++++++++++++++++++++++++++++++++----------------
|
||||
1 file changed, 54 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c
|
||||
index 0476989..a1b9139 100644
|
||||
--- a/arch/x86/kvm/emulate.c
|
||||
+++ b/arch/x86/kvm/emulate.c
|
||||
@@ -564,7 +564,8 @@ static int emulate_nm(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -572,7 +572,8 @@ static int emulate_nm(struct x86_emulate
|
||||
return emulate_exception(ctxt, NM_VECTOR, 0, false);
|
||||
}
|
||||
|
||||
|
@ -36,7 +34,7 @@ index 0476989..a1b9139 100644
|
|||
{
|
||||
switch (ctxt->op_bytes) {
|
||||
case 2:
|
||||
@@ -574,16 +575,25 @@ static inline void assign_eip_near(struct x86_emulate_ctxt *ctxt, ulong dst)
|
||||
@@ -582,16 +583,25 @@ static inline void assign_eip_near(struc
|
||||
ctxt->_eip = (u32)dst;
|
||||
break;
|
||||
case 8:
|
||||
|
@ -64,7 +62,7 @@ index 0476989..a1b9139 100644
|
|||
}
|
||||
|
||||
static u16 get_segment_selector(struct x86_emulate_ctxt *ctxt, unsigned seg)
|
||||
@@ -1998,13 +2008,15 @@ static int em_grp45(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2004,13 +2014,15 @@ static int em_grp45(struct x86_emulate_c
|
||||
case 2: /* call near abs */ {
|
||||
long int old_eip;
|
||||
old_eip = ctxt->_eip;
|
||||
|
@ -82,7 +80,7 @@ index 0476989..a1b9139 100644
|
|||
break;
|
||||
case 5: /* jmp far */
|
||||
rc = em_jmp_far(ctxt);
|
||||
@@ -2039,10 +2051,14 @@ static int em_cmpxchg8b(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2042,10 +2054,14 @@ static int em_cmpxchg8b(struct x86_emula
|
||||
|
||||
static int em_ret(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
|
@ -101,7 +99,7 @@ index 0476989..a1b9139 100644
|
|||
}
|
||||
|
||||
static int em_ret_far(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2323,7 +2339,7 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2336,7 +2352,7 @@ static int em_sysexit(struct x86_emulate
|
||||
{
|
||||
const struct x86_emulate_ops *ops = ctxt->ops;
|
||||
struct desc_struct cs, ss;
|
||||
|
@ -110,7 +108,7 @@ index 0476989..a1b9139 100644
|
|||
int usermode;
|
||||
u16 cs_sel = 0, ss_sel = 0;
|
||||
|
||||
@@ -2339,6 +2355,9 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2352,6 +2368,9 @@ static int em_sysexit(struct x86_emulate
|
||||
else
|
||||
usermode = X86EMUL_MODE_PROT32;
|
||||
|
||||
|
@ -120,7 +118,7 @@ index 0476989..a1b9139 100644
|
|||
cs.dpl = 3;
|
||||
ss.dpl = 3;
|
||||
ops->get_msr(ctxt, MSR_IA32_SYSENTER_CS, &msr_data);
|
||||
@@ -2356,6 +2375,9 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2369,6 +2388,9 @@ static int em_sysexit(struct x86_emulate
|
||||
ss_sel = cs_sel + 8;
|
||||
cs.d = 0;
|
||||
cs.l = 1;
|
||||
|
@ -130,7 +128,7 @@ index 0476989..a1b9139 100644
|
|||
break;
|
||||
}
|
||||
cs_sel |= SELECTOR_RPL_MASK;
|
||||
@@ -2364,8 +2386,8 @@ static int em_sysexit(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2377,8 +2399,8 @@ static int em_sysexit(struct x86_emulate
|
||||
ops->set_segment(ctxt, cs_sel, &cs, 0, VCPU_SREG_CS);
|
||||
ops->set_segment(ctxt, ss_sel, &ss, 0, VCPU_SREG_SS);
|
||||
|
||||
|
@ -141,7 +139,7 @@ index 0476989..a1b9139 100644
|
|||
|
||||
return X86EMUL_CONTINUE;
|
||||
}
|
||||
@@ -2905,10 +2927,13 @@ static int em_aad(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2931,10 +2953,13 @@ static int em_aad(struct x86_emulate_ctx
|
||||
|
||||
static int em_call(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
|
@ -156,7 +154,7 @@ index 0476989..a1b9139 100644
|
|||
return em_push(ctxt);
|
||||
}
|
||||
|
||||
@@ -2940,11 +2965,12 @@ static int em_call_far(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -2981,11 +3006,12 @@ fail:
|
||||
static int em_ret_near_imm(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
int rc;
|
||||
|
@ -173,7 +171,7 @@ index 0476989..a1b9139 100644
|
|||
if (rc != X86EMUL_CONTINUE)
|
||||
return rc;
|
||||
rsp_increment(ctxt, ctxt->src.val);
|
||||
@@ -3271,20 +3297,24 @@ static int em_lmsw(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -3315,20 +3341,24 @@ static int em_lmsw(struct x86_emulate_ct
|
||||
|
||||
static int em_loop(struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
|
@ -202,7 +200,7 @@ index 0476989..a1b9139 100644
|
|||
}
|
||||
|
||||
static int em_in(struct x86_emulate_ctxt *ctxt)
|
||||
@@ -4743,7 +4773,7 @@ special_insn:
|
||||
@@ -4729,7 +4759,7 @@ special_insn:
|
||||
break;
|
||||
case 0x70 ... 0x7f: /* jcc (short) */
|
||||
if (test_cc(ctxt->b, ctxt->eflags))
|
||||
|
@ -211,7 +209,7 @@ index 0476989..a1b9139 100644
|
|||
break;
|
||||
case 0x8d: /* lea r16/r32, m */
|
||||
ctxt->dst.val = ctxt->src.addr.mem.ea;
|
||||
@@ -4773,7 +4803,7 @@ special_insn:
|
||||
@@ -4758,7 +4788,7 @@ special_insn:
|
||||
break;
|
||||
case 0xe9: /* jmp rel */
|
||||
case 0xeb: /* jmp rel short */
|
||||
|
@ -220,7 +218,7 @@ index 0476989..a1b9139 100644
|
|||
ctxt->dst.type = OP_NONE; /* Disable writeback. */
|
||||
break;
|
||||
case 0xf4: /* hlt */
|
||||
@@ -4898,7 +4928,7 @@ twobyte_insn:
|
||||
@@ -4878,7 +4908,7 @@ twobyte_insn:
|
||||
break;
|
||||
case 0x80 ... 0x8f: /* jnz rel, etc*/
|
||||
if (test_cc(ctxt->b, ctxt->eflags))
|
||||
|
|
Loading…
Reference in New Issue