1 // SPDX-License-Identifier: GPL-2.0-only
2 /******************************************************************************
5 * Generic x86 (32-bit and 64-bit) instruction decoder and emulator.
7 * Copyright (c) 2005 Keir Fraser
9 * Linux coding style, mod r/m decoder, segment base fixes, real-mode
10 * privileged instructions:
12 * Copyright (C) 2006 Qumranet
13 * Copyright 2010 Red Hat, Inc. and/or its affiliates.
15 * Avi Kivity <avi@qumranet.com>
16 * Yaniv Kamay <yaniv@qumranet.com>
18 * From: xen-unstable 10676:af9809f51f81a3c43f276f00c81a52ef558afda4
20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
22 #include <linux/kvm_host.h>
23 #include "kvm_cache_regs.h"
24 #include "kvm_emulate.h"
25 #include <linux/stringify.h>
26 #include <asm/debugreg.h>
27 #include <asm/nospec-branch.h>
39 #define OpImplicit 1ull /* No generic decode */
40 #define OpReg 2ull /* Register */
41 #define OpMem 3ull /* Memory */
42 #define OpAcc 4ull /* Accumulator: AL/AX/EAX/RAX */
43 #define OpDI 5ull /* ES:DI/EDI/RDI */
44 #define OpMem64 6ull /* Memory, 64-bit */
45 #define OpImmUByte 7ull /* Zero-extended 8-bit immediate */
46 #define OpDX 8ull /* DX register */
47 #define OpCL 9ull /* CL register (for shifts) */
48 #define OpImmByte 10ull /* 8-bit sign extended immediate */
49 #define OpOne 11ull /* Implied 1 */
50 #define OpImm 12ull /* Sign extended up to 32-bit immediate */
51 #define OpMem16 13ull /* Memory operand (16-bit). */
52 #define OpMem32 14ull /* Memory operand (32-bit). */
53 #define OpImmU 15ull /* Immediate operand, zero extended */
54 #define OpSI 16ull /* SI/ESI/RSI */
55 #define OpImmFAddr 17ull /* Immediate far address */
56 #define OpMemFAddr 18ull /* Far address in memory */
57 #define OpImmU16 19ull /* Immediate operand, 16 bits, zero extended */
58 #define OpES 20ull /* ES */
59 #define OpCS 21ull /* CS */
60 #define OpSS 22ull /* SS */
61 #define OpDS 23ull /* DS */
62 #define OpFS 24ull /* FS */
63 #define OpGS 25ull /* GS */
64 #define OpMem8 26ull /* 8-bit zero extended memory operand */
65 #define OpImm64 27ull /* Sign extended 16/32/64-bit immediate */
66 #define OpXLat 28ull /* memory at BX/EBX/RBX + zero-extended AL */
67 #define OpAccLo 29ull /* Low part of extended acc (AX/AX/EAX/RAX) */
68 #define OpAccHi 30ull /* High part of extended acc (-/DX/EDX/RDX) */
70 #define OpBits 5 /* Width of operand field */
71 #define OpMask ((1ull << OpBits) - 1)
74 * Opcode effective-address decode tables.
75 * Note that we only emulate instructions that have at least one memory
76 * operand (excluding implicit stack references). We assume that stack
77 * references and instruction fetches will never occur in special memory
78 * areas that require emulation. So, for example, 'mov <imm>,<reg>' need
82 /* Operand sizes: 8-bit operands or specified/overridden size. */
83 #define ByteOp (1<<0) /* 8-bit operands. */
84 /* Destination operand type. */
86 #define ImplicitOps (OpImplicit << DstShift)
87 #define DstReg (OpReg << DstShift)
88 #define DstMem (OpMem << DstShift)
89 #define DstAcc (OpAcc << DstShift)
90 #define DstDI (OpDI << DstShift)
91 #define DstMem64 (OpMem64 << DstShift)
92 #define DstMem16 (OpMem16 << DstShift)
93 #define DstImmUByte (OpImmUByte << DstShift)
94 #define DstDX (OpDX << DstShift)
95 #define DstAccLo (OpAccLo << DstShift)
96 #define DstMask (OpMask << DstShift)
97 /* Source operand type. */
99 #define SrcNone (OpNone << SrcShift)
100 #define SrcReg (OpReg << SrcShift)
101 #define SrcMem (OpMem << SrcShift)
102 #define SrcMem16 (OpMem16 << SrcShift)
103 #define SrcMem32 (OpMem32 << SrcShift)
104 #define SrcImm (OpImm << SrcShift)
105 #define SrcImmByte (OpImmByte << SrcShift)
106 #define SrcOne (OpOne << SrcShift)
107 #define SrcImmUByte (OpImmUByte << SrcShift)
108 #define SrcImmU (OpImmU << SrcShift)
109 #define SrcSI (OpSI << SrcShift)
110 #define SrcXLat (OpXLat << SrcShift)
111 #define SrcImmFAddr (OpImmFAddr << SrcShift)
112 #define SrcMemFAddr (OpMemFAddr << SrcShift)
113 #define SrcAcc (OpAcc << SrcShift)
114 #define SrcImmU16 (OpImmU16 << SrcShift)
115 #define SrcImm64 (OpImm64 << SrcShift)
116 #define SrcDX (OpDX << SrcShift)
117 #define SrcMem8 (OpMem8 << SrcShift)
118 #define SrcAccHi (OpAccHi << SrcShift)
119 #define SrcMask (OpMask << SrcShift)
120 #define BitOp (1<<11)
121 #define MemAbs (1<<12) /* Memory operand is absolute displacement */
122 #define String (1<<13) /* String instruction (rep capable) */
123 #define Stack (1<<14) /* Stack instruction (push/pop) */
124 #define GroupMask (7<<15) /* Opcode uses one of the group mechanisms */
125 #define Group (1<<15) /* Bits 3:5 of modrm byte extend opcode */
126 #define GroupDual (2<<15) /* Alternate decoding of mod == 3 */
127 #define Prefix (3<<15) /* Instruction varies with 66/f2/f3 prefix */
128 #define RMExt (4<<15) /* Opcode extension in ModRM r/m if mod == 3 */
129 #define Escape (5<<15) /* Escape to coprocessor instruction */
130 #define InstrDual (6<<15) /* Alternate instruction decoding of mod == 3 */
131 #define ModeDual (7<<15) /* Different instruction for 32/64 bit */
132 #define Sse (1<<18) /* SSE Vector instruction */
133 /* Generic ModRM decode. */
134 #define ModRM (1<<19)
135 /* Destination is only written; never read. */
138 #define Prot (1<<21) /* instruction generates #UD if not in prot-mode */
139 #define EmulateOnUD (1<<22) /* Emulate if unsupported by the host */
140 #define NoAccess (1<<23) /* Don't access memory (lea/invlpg/verr etc) */
141 #define Op3264 (1<<24) /* Operand is 64b in long mode, 32b otherwise */
142 #define Undefined (1<<25) /* No Such Instruction */
143 #define Lock (1<<26) /* lock prefix is allowed for the instruction */
144 #define Priv (1<<27) /* instruction generates #GP if current CPL != 0 */
146 #define PageTable (1 << 29) /* instruction used to write page table */
147 #define NotImpl (1 << 30) /* instruction is not implemented */
148 /* Source 2 operand type */
149 #define Src2Shift (31)
150 #define Src2None (OpNone << Src2Shift)
151 #define Src2Mem (OpMem << Src2Shift)
152 #define Src2CL (OpCL << Src2Shift)
153 #define Src2ImmByte (OpImmByte << Src2Shift)
154 #define Src2One (OpOne << Src2Shift)
155 #define Src2Imm (OpImm << Src2Shift)
156 #define Src2ES (OpES << Src2Shift)
157 #define Src2CS (OpCS << Src2Shift)
158 #define Src2SS (OpSS << Src2Shift)
159 #define Src2DS (OpDS << Src2Shift)
160 #define Src2FS (OpFS << Src2Shift)
161 #define Src2GS (OpGS << Src2Shift)
162 #define Src2Mask (OpMask << Src2Shift)
163 #define Mmx ((u64)1 << 40) /* MMX Vector instruction */
164 #define AlignMask ((u64)7 << 41)
165 #define Aligned ((u64)1 << 41) /* Explicitly aligned (e.g. MOVDQA) */
166 #define Unaligned ((u64)2 << 41) /* Explicitly unaligned (e.g. MOVDQU) */
167 #define Avx ((u64)3 << 41) /* Advanced Vector Extensions */
168 #define Aligned16 ((u64)4 << 41) /* Aligned to 16 byte boundary (e.g. FXSAVE) */
169 #define Fastop ((u64)1 << 44) /* Use opcode::u.fastop */
170 #define NoWrite ((u64)1 << 45) /* No writeback */
171 #define SrcWrite ((u64)1 << 46) /* Write back src operand */
172 #define NoMod ((u64)1 << 47) /* Mod field is ignored */
173 #define Intercept ((u64)1 << 48) /* Has valid intercept field */
174 #define CheckPerm ((u64)1 << 49) /* Has valid check_perm field */
175 #define PrivUD ((u64)1 << 51) /* #UD instead of #GP on CPL > 0 */
176 #define NearBranch ((u64)1 << 52) /* Near branches */
177 #define No16 ((u64)1 << 53) /* No 16 bit operand */
178 #define IncSP ((u64)1 << 54) /* SP is incremented before ModRM calc */
179 #define TwoMemOp ((u64)1 << 55) /* Instruction has two memory operand */
180 #define IsBranch ((u64)1 << 56) /* Instruction is considered a branch. */
182 #define DstXacc (DstAccLo | SrcAccHi | SrcWrite)
184 #define X2(x...) x, x
185 #define X3(x...) X2(x), x
186 #define X4(x...) X2(x), X2(x)
187 #define X5(x...) X4(x), x
188 #define X6(x...) X4(x), X2(x)
189 #define X7(x...) X4(x), X3(x)
190 #define X8(x...) X4(x), X4(x)
191 #define X16(x...) X8(x), X8(x)
198 int (*execute
)(struct x86_emulate_ctxt
*ctxt
);
199 const struct opcode
*group
;
200 const struct group_dual
*gdual
;
201 const struct gprefix
*gprefix
;
202 const struct escape
*esc
;
203 const struct instr_dual
*idual
;
204 const struct mode_dual
*mdual
;
205 void (*fastop
)(struct fastop
*fake
);
207 int (*check_perm
)(struct x86_emulate_ctxt
*ctxt
);
211 struct opcode mod012
[8];
212 struct opcode mod3
[8];
216 struct opcode pfx_no
;
217 struct opcode pfx_66
;
218 struct opcode pfx_f2
;
219 struct opcode pfx_f3
;
224 struct opcode high
[64];
228 struct opcode mod012
;
233 struct opcode mode32
;
234 struct opcode mode64
;
237 #define EFLG_RESERVED_ZEROS_MASK 0xffc0802a
239 enum x86_transfer_type
{
241 X86_TRANSFER_CALL_JMP
,
243 X86_TRANSFER_TASK_SWITCH
,
246 static void writeback_registers(struct x86_emulate_ctxt
*ctxt
)
248 unsigned long dirty
= ctxt
->regs_dirty
;
251 for_each_set_bit(reg
, &dirty
, NR_EMULATOR_GPRS
)
252 ctxt
->ops
->write_gpr(ctxt
, reg
, ctxt
->_regs
[reg
]);
255 static void invalidate_registers(struct x86_emulate_ctxt
*ctxt
)
257 ctxt
->regs_dirty
= 0;
258 ctxt
->regs_valid
= 0;
262 * These EFLAGS bits are restored from saved value during emulation, and
263 * any changes are written back to the saved value after emulation.
265 #define EFLAGS_MASK (X86_EFLAGS_OF|X86_EFLAGS_SF|X86_EFLAGS_ZF|X86_EFLAGS_AF|\
266 X86_EFLAGS_PF|X86_EFLAGS_CF)
275 * fastop functions have a special calling convention:
280 * flags: rflags (in/out)
281 * ex: rsi (in:fastop pointer, out:zero if exception)
283 * Moreover, they are all exactly FASTOP_SIZE bytes long, so functions for
284 * different operand sizes can be reached by calculation, rather than a jump
285 * table (which would be bigger than the code).
287 * The 16 byte alignment, considering 5 bytes for the RET thunk, 3 for ENDBR
288 * and 1 for the straight line speculation INT3, leaves 7 bytes for the
289 * body of the function. Currently none is larger than 4.
291 static int fastop(struct x86_emulate_ctxt
*ctxt
, fastop_t fop
);
293 #define FASTOP_SIZE 16
295 #define __FOP_FUNC(name) \
296 ".align " __stringify(FASTOP_SIZE) " \n\t" \
297 ".type " name ", @function \n\t" \
302 #define FOP_FUNC(name) \
305 #define __FOP_RET(name) \
307 ".size " name ", .-" name "\n\t"
309 #define FOP_RET(name) \
312 #define __FOP_START(op, align) \
313 extern void em_##op(struct fastop *fake); \
314 asm(".pushsection .text, \"ax\" \n\t" \
315 ".global em_" #op " \n\t" \
316 ".align " __stringify(align) " \n\t" \
319 #define FOP_START(op) __FOP_START(op, FASTOP_SIZE)
324 #define __FOPNOP(name) \
329 __FOPNOP(__stringify(__UNIQUE_ID(nop)))
331 #define FOP1E(op, dst) \
332 __FOP_FUNC(#op "_" #dst) \
333 "10: " #op " %" #dst " \n\t" \
334 __FOP_RET(#op "_" #dst)
336 #define FOP1EEX(op, dst) \
337 FOP1E(op, dst) _ASM_EXTABLE_TYPE_REG(10b, 11b, EX_TYPE_ZERO_REG, %%esi)
339 #define FASTOP1(op) \
344 ON64(FOP1E(op##q, rax)) \
347 /* 1-operand, using src2 (for MUL/DIV r/m) */
348 #define FASTOP1SRC2(op, name) \
353 ON64(FOP1E(op, rcx)) \
356 /* 1-operand, using src2 (for MUL/DIV r/m), with exceptions */
357 #define FASTOP1SRC2EX(op, name) \
362 ON64(FOP1EEX(op, rcx)) \
365 #define FOP2E(op, dst, src) \
366 __FOP_FUNC(#op "_" #dst "_" #src) \
367 #op " %" #src ", %" #dst " \n\t" \
368 __FOP_RET(#op "_" #dst "_" #src)
370 #define FASTOP2(op) \
372 FOP2E(op##b, al, dl) \
373 FOP2E(op##w, ax, dx) \
374 FOP2E(op##l, eax, edx) \
375 ON64(FOP2E(op##q, rax, rdx)) \
378 /* 2 operand, word only */
379 #define FASTOP2W(op) \
382 FOP2E(op##w, ax, dx) \
383 FOP2E(op##l, eax, edx) \
384 ON64(FOP2E(op##q, rax, rdx)) \
387 /* 2 operand, src is CL */
388 #define FASTOP2CL(op) \
390 FOP2E(op##b, al, cl) \
391 FOP2E(op##w, ax, cl) \
392 FOP2E(op##l, eax, cl) \
393 ON64(FOP2E(op##q, rax, cl)) \
396 /* 2 operand, src and dest are reversed */
397 #define FASTOP2R(op, name) \
399 FOP2E(op##b, dl, al) \
400 FOP2E(op##w, dx, ax) \
401 FOP2E(op##l, edx, eax) \
402 ON64(FOP2E(op##q, rdx, rax)) \
405 #define FOP3E(op, dst, src, src2) \
406 __FOP_FUNC(#op "_" #dst "_" #src "_" #src2) \
407 #op " %" #src2 ", %" #src ", %" #dst " \n\t"\
408 __FOP_RET(#op "_" #dst "_" #src "_" #src2)
410 /* 3-operand, word-only, src2=cl */
411 #define FASTOP3WCL(op) \
414 FOP3E(op##w, ax, dx, cl) \
415 FOP3E(op##l, eax, edx, cl) \
416 ON64(FOP3E(op##q, rax, rdx, cl)) \
419 /* Special case for SETcc - 1 instruction per cc */
420 #define FOP_SETCC(op) \
446 "pushf; sbb %al, %al; popf \n\t"
451 * XXX: inoutclob user must know where the argument is being expanded.
452 * Using asm goto would allow us to remove _fault.
454 #define asm_safe(insn, inoutclob...) \
458 asm volatile("1:" insn "\n" \
460 _ASM_EXTABLE_TYPE_REG(1b, 2b, EX_TYPE_ONE_REG, %[_fault]) \
461 : [_fault] "+r"(_fault) inoutclob ); \
463 _fault ? X86EMUL_UNHANDLEABLE : X86EMUL_CONTINUE; \
466 static int emulator_check_intercept(struct x86_emulate_ctxt
*ctxt
,
467 enum x86_intercept intercept
,
468 enum x86_intercept_stage stage
)
470 struct x86_instruction_info info
= {
471 .intercept
= intercept
,
472 .rep_prefix
= ctxt
->rep_prefix
,
473 .modrm_mod
= ctxt
->modrm_mod
,
474 .modrm_reg
= ctxt
->modrm_reg
,
475 .modrm_rm
= ctxt
->modrm_rm
,
476 .src_val
= ctxt
->src
.val64
,
477 .dst_val
= ctxt
->dst
.val64
,
478 .src_bytes
= ctxt
->src
.bytes
,
479 .dst_bytes
= ctxt
->dst
.bytes
,
480 .ad_bytes
= ctxt
->ad_bytes
,
481 .next_rip
= ctxt
->eip
,
484 return ctxt
->ops
->intercept(ctxt
, &info
, stage
);
487 static void assign_masked(ulong
*dest
, ulong src
, ulong mask
)
489 *dest
= (*dest
& ~mask
) | (src
& mask
);
492 static void assign_register(unsigned long *reg
, u64 val
, int bytes
)
494 /* The 4-byte case *is* correct: in 64-bit mode we zero-extend. */
497 *(u8
*)reg
= (u8
)val
;
500 *(u16
*)reg
= (u16
)val
;
504 break; /* 64b: zero-extend */
511 static inline unsigned long ad_mask(struct x86_emulate_ctxt
*ctxt
)
513 return (1UL << (ctxt
->ad_bytes
<< 3)) - 1;
516 static ulong
stack_mask(struct x86_emulate_ctxt
*ctxt
)
519 struct desc_struct ss
;
521 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
523 ctxt
->ops
->get_segment(ctxt
, &sel
, &ss
, NULL
, VCPU_SREG_SS
);
524 return ~0U >> ((ss
.d
^ 1) * 16); /* d=0: 0xffff; d=1: 0xffffffff */
527 static int stack_size(struct x86_emulate_ctxt
*ctxt
)
529 return (__fls(stack_mask(ctxt
)) + 1) >> 3;
532 /* Access/update address held in a register, based on addressing mode. */
533 static inline unsigned long
534 address_mask(struct x86_emulate_ctxt
*ctxt
, unsigned long reg
)
536 if (ctxt
->ad_bytes
== sizeof(unsigned long))
539 return reg
& ad_mask(ctxt
);
542 static inline unsigned long
543 register_address(struct x86_emulate_ctxt
*ctxt
, int reg
)
545 return address_mask(ctxt
, reg_read(ctxt
, reg
));
548 static void masked_increment(ulong
*reg
, ulong mask
, int inc
)
550 assign_masked(reg
, *reg
+ inc
, mask
);
554 register_address_increment(struct x86_emulate_ctxt
*ctxt
, int reg
, int inc
)
556 ulong
*preg
= reg_rmw(ctxt
, reg
);
558 assign_register(preg
, *preg
+ inc
, ctxt
->ad_bytes
);
561 static void rsp_increment(struct x86_emulate_ctxt
*ctxt
, int inc
)
563 masked_increment(reg_rmw(ctxt
, VCPU_REGS_RSP
), stack_mask(ctxt
), inc
);
566 static u32
desc_limit_scaled(struct desc_struct
*desc
)
568 u32 limit
= get_desc_limit(desc
);
570 return desc
->g
? (limit
<< 12) | 0xfff : limit
;
573 static unsigned long seg_base(struct x86_emulate_ctxt
*ctxt
, int seg
)
575 if (ctxt
->mode
== X86EMUL_MODE_PROT64
&& seg
< VCPU_SREG_FS
)
578 return ctxt
->ops
->get_cached_segment_base(ctxt
, seg
);
581 static int emulate_exception(struct x86_emulate_ctxt
*ctxt
, int vec
,
582 u32 error
, bool valid
)
584 if (KVM_EMULATOR_BUG_ON(vec
> 0x1f, ctxt
))
585 return X86EMUL_UNHANDLEABLE
;
587 ctxt
->exception
.vector
= vec
;
588 ctxt
->exception
.error_code
= error
;
589 ctxt
->exception
.error_code_valid
= valid
;
590 return X86EMUL_PROPAGATE_FAULT
;
593 static int emulate_db(struct x86_emulate_ctxt
*ctxt
)
595 return emulate_exception(ctxt
, DB_VECTOR
, 0, false);
598 static int emulate_gp(struct x86_emulate_ctxt
*ctxt
, int err
)
600 return emulate_exception(ctxt
, GP_VECTOR
, err
, true);
603 static int emulate_ss(struct x86_emulate_ctxt
*ctxt
, int err
)
605 return emulate_exception(ctxt
, SS_VECTOR
, err
, true);
608 static int emulate_ud(struct x86_emulate_ctxt
*ctxt
)
610 return emulate_exception(ctxt
, UD_VECTOR
, 0, false);
613 static int emulate_ts(struct x86_emulate_ctxt
*ctxt
, int err
)
615 return emulate_exception(ctxt
, TS_VECTOR
, err
, true);
618 static int emulate_de(struct x86_emulate_ctxt
*ctxt
)
620 return emulate_exception(ctxt
, DE_VECTOR
, 0, false);
623 static int emulate_nm(struct x86_emulate_ctxt
*ctxt
)
625 return emulate_exception(ctxt
, NM_VECTOR
, 0, false);
628 static u16
get_segment_selector(struct x86_emulate_ctxt
*ctxt
, unsigned seg
)
631 struct desc_struct desc
;
633 ctxt
->ops
->get_segment(ctxt
, &selector
, &desc
, NULL
, seg
);
637 static void set_segment_selector(struct x86_emulate_ctxt
*ctxt
, u16 selector
,
642 struct desc_struct desc
;
644 ctxt
->ops
->get_segment(ctxt
, &dummy
, &desc
, &base3
, seg
);
645 ctxt
->ops
->set_segment(ctxt
, selector
, &desc
, base3
, seg
);
648 static inline u8
ctxt_virt_addr_bits(struct x86_emulate_ctxt
*ctxt
)
650 return (ctxt
->ops
->get_cr(ctxt
, 4) & X86_CR4_LA57
) ? 57 : 48;
653 static inline bool emul_is_noncanonical_address(u64 la
,
654 struct x86_emulate_ctxt
*ctxt
)
656 return !__is_canonical_address(la
, ctxt_virt_addr_bits(ctxt
));
660 * x86 defines three classes of vector instructions: explicitly
661 * aligned, explicitly unaligned, and the rest, which change behaviour
662 * depending on whether they're AVX encoded or not.
664 * Also included is CMPXCHG16B which is not a vector instruction, yet it is
665 * subject to the same check. FXSAVE and FXRSTOR are checked here too as their
666 * 512 bytes of data must be aligned to a 16 byte boundary.
668 static unsigned insn_alignment(struct x86_emulate_ctxt
*ctxt
, unsigned size
)
670 u64 alignment
= ctxt
->d
& AlignMask
;
672 if (likely(size
< 16))
687 static __always_inline
int __linearize(struct x86_emulate_ctxt
*ctxt
,
688 struct segmented_address addr
,
689 unsigned *max_size
, unsigned size
,
690 enum x86emul_mode mode
, ulong
*linear
,
693 struct desc_struct desc
;
700 la
= seg_base(ctxt
, addr
.seg
) + addr
.ea
;
703 case X86EMUL_MODE_PROT64
:
704 *linear
= la
= ctxt
->ops
->get_untagged_addr(ctxt
, la
, flags
);
705 va_bits
= ctxt_virt_addr_bits(ctxt
);
706 if (!__is_canonical_address(la
, va_bits
))
709 *max_size
= min_t(u64
, ~0u, (1ull << va_bits
) - la
);
710 if (size
> *max_size
)
714 *linear
= la
= (u32
)la
;
715 usable
= ctxt
->ops
->get_segment(ctxt
, &sel
, &desc
, NULL
,
719 /* code segment in protected mode or read-only data segment */
720 if ((((ctxt
->mode
!= X86EMUL_MODE_REAL
) && (desc
.type
& 8)) || !(desc
.type
& 2)) &&
721 (flags
& X86EMUL_F_WRITE
))
723 /* unreadable code segment */
724 if (!(flags
& X86EMUL_F_FETCH
) && (desc
.type
& 8) && !(desc
.type
& 2))
726 lim
= desc_limit_scaled(&desc
);
727 if (!(desc
.type
& 8) && (desc
.type
& 4)) {
728 /* expand-down segment */
731 lim
= desc
.d
? 0xffffffff : 0xffff;
735 if (lim
== 0xffffffff)
738 *max_size
= (u64
)lim
+ 1 - addr
.ea
;
739 if (size
> *max_size
)
744 if (la
& (insn_alignment(ctxt
, size
) - 1))
745 return emulate_gp(ctxt
, 0);
746 return X86EMUL_CONTINUE
;
748 if (addr
.seg
== VCPU_SREG_SS
)
749 return emulate_ss(ctxt
, 0);
751 return emulate_gp(ctxt
, 0);
754 static int linearize(struct x86_emulate_ctxt
*ctxt
,
755 struct segmented_address addr
,
756 unsigned size
, bool write
,
760 return __linearize(ctxt
, addr
, &max_size
, size
, ctxt
->mode
, linear
,
761 write
? X86EMUL_F_WRITE
: 0);
764 static inline int assign_eip(struct x86_emulate_ctxt
*ctxt
, ulong dst
)
769 struct segmented_address addr
= { .seg
= VCPU_SREG_CS
,
772 if (ctxt
->op_bytes
!= sizeof(unsigned long))
773 addr
.ea
= dst
& ((1UL << (ctxt
->op_bytes
<< 3)) - 1);
774 rc
= __linearize(ctxt
, addr
, &max_size
, 1, ctxt
->mode
, &linear
,
776 if (rc
== X86EMUL_CONTINUE
)
777 ctxt
->_eip
= addr
.ea
;
781 static inline int emulator_recalc_and_set_mode(struct x86_emulate_ctxt
*ctxt
)
784 struct desc_struct cs
;
788 ctxt
->ops
->get_msr(ctxt
, MSR_EFER
, &efer
);
790 if (!(ctxt
->ops
->get_cr(ctxt
, 0) & X86_CR0_PE
)) {
791 /* Real mode. cpu must not have long mode active */
793 return X86EMUL_UNHANDLEABLE
;
794 ctxt
->mode
= X86EMUL_MODE_REAL
;
795 return X86EMUL_CONTINUE
;
798 if (ctxt
->eflags
& X86_EFLAGS_VM
) {
799 /* Protected/VM86 mode. cpu must not have long mode active */
801 return X86EMUL_UNHANDLEABLE
;
802 ctxt
->mode
= X86EMUL_MODE_VM86
;
803 return X86EMUL_CONTINUE
;
806 if (!ctxt
->ops
->get_segment(ctxt
, &selector
, &cs
, &base3
, VCPU_SREG_CS
))
807 return X86EMUL_UNHANDLEABLE
;
809 if (efer
& EFER_LMA
) {
811 /* Proper long mode */
812 ctxt
->mode
= X86EMUL_MODE_PROT64
;
814 /* 32 bit compatibility mode*/
815 ctxt
->mode
= X86EMUL_MODE_PROT32
;
817 ctxt
->mode
= X86EMUL_MODE_PROT16
;
820 /* Legacy 32 bit / 16 bit mode */
821 ctxt
->mode
= cs
.d
? X86EMUL_MODE_PROT32
: X86EMUL_MODE_PROT16
;
824 return X86EMUL_CONTINUE
;
827 static inline int assign_eip_near(struct x86_emulate_ctxt
*ctxt
, ulong dst
)
829 return assign_eip(ctxt
, dst
);
832 static int assign_eip_far(struct x86_emulate_ctxt
*ctxt
, ulong dst
)
834 int rc
= emulator_recalc_and_set_mode(ctxt
);
836 if (rc
!= X86EMUL_CONTINUE
)
839 return assign_eip(ctxt
, dst
);
842 static inline int jmp_rel(struct x86_emulate_ctxt
*ctxt
, int rel
)
844 return assign_eip_near(ctxt
, ctxt
->_eip
+ rel
);
847 static int linear_read_system(struct x86_emulate_ctxt
*ctxt
, ulong linear
,
848 void *data
, unsigned size
)
850 return ctxt
->ops
->read_std(ctxt
, linear
, data
, size
, &ctxt
->exception
, true);
853 static int linear_write_system(struct x86_emulate_ctxt
*ctxt
,
854 ulong linear
, void *data
,
857 return ctxt
->ops
->write_std(ctxt
, linear
, data
, size
, &ctxt
->exception
, true);
860 static int segmented_read_std(struct x86_emulate_ctxt
*ctxt
,
861 struct segmented_address addr
,
868 rc
= linearize(ctxt
, addr
, size
, false, &linear
);
869 if (rc
!= X86EMUL_CONTINUE
)
871 return ctxt
->ops
->read_std(ctxt
, linear
, data
, size
, &ctxt
->exception
, false);
874 static int segmented_write_std(struct x86_emulate_ctxt
*ctxt
,
875 struct segmented_address addr
,
882 rc
= linearize(ctxt
, addr
, size
, true, &linear
);
883 if (rc
!= X86EMUL_CONTINUE
)
885 return ctxt
->ops
->write_std(ctxt
, linear
, data
, size
, &ctxt
->exception
, false);
889 * Prefetch the remaining bytes of the instruction without crossing page
890 * boundary if they are not in fetch_cache yet.
892 static int __do_insn_fetch_bytes(struct x86_emulate_ctxt
*ctxt
, int op_size
)
895 unsigned size
, max_size
;
896 unsigned long linear
;
897 int cur_size
= ctxt
->fetch
.end
- ctxt
->fetch
.data
;
898 struct segmented_address addr
= { .seg
= VCPU_SREG_CS
,
899 .ea
= ctxt
->eip
+ cur_size
};
902 * We do not know exactly how many bytes will be needed, and
903 * __linearize is expensive, so fetch as much as possible. We
904 * just have to avoid going beyond the 15 byte limit, the end
905 * of the segment, or the end of the page.
907 * __linearize is called with size 0 so that it does not do any
908 * boundary check itself. Instead, we use max_size to check
911 rc
= __linearize(ctxt
, addr
, &max_size
, 0, ctxt
->mode
, &linear
,
913 if (unlikely(rc
!= X86EMUL_CONTINUE
))
916 size
= min_t(unsigned, 15UL ^ cur_size
, max_size
);
917 size
= min_t(unsigned, size
, PAGE_SIZE
- offset_in_page(linear
));
920 * One instruction can only straddle two pages,
921 * and one has been loaded at the beginning of
922 * x86_decode_insn. So, if not enough bytes
923 * still, we must have hit the 15-byte boundary.
925 if (unlikely(size
< op_size
))
926 return emulate_gp(ctxt
, 0);
928 rc
= ctxt
->ops
->fetch(ctxt
, linear
, ctxt
->fetch
.end
,
929 size
, &ctxt
->exception
);
930 if (unlikely(rc
!= X86EMUL_CONTINUE
))
932 ctxt
->fetch
.end
+= size
;
933 return X86EMUL_CONTINUE
;
936 static __always_inline
int do_insn_fetch_bytes(struct x86_emulate_ctxt
*ctxt
,
939 unsigned done_size
= ctxt
->fetch
.end
- ctxt
->fetch
.ptr
;
941 if (unlikely(done_size
< size
))
942 return __do_insn_fetch_bytes(ctxt
, size
- done_size
);
944 return X86EMUL_CONTINUE
;
947 /* Fetch next part of the instruction being emulated. */
948 #define insn_fetch(_type, _ctxt) \
951 rc = do_insn_fetch_bytes(_ctxt, sizeof(_type)); \
952 if (rc != X86EMUL_CONTINUE) \
954 ctxt->_eip += sizeof(_type); \
955 memcpy(&_x, ctxt->fetch.ptr, sizeof(_type)); \
956 ctxt->fetch.ptr += sizeof(_type); \
960 #define insn_fetch_arr(_arr, _size, _ctxt) \
962 rc = do_insn_fetch_bytes(_ctxt, _size); \
963 if (rc != X86EMUL_CONTINUE) \
965 ctxt->_eip += (_size); \
966 memcpy(_arr, ctxt->fetch.ptr, _size); \
967 ctxt->fetch.ptr += (_size); \
971 * Given the 'reg' portion of a ModRM byte, and a register block, return a
972 * pointer into the block that addresses the relevant register.
973 * @highbyte_regs specifies whether to decode AH,CH,DH,BH.
975 static void *decode_register(struct x86_emulate_ctxt
*ctxt
, u8 modrm_reg
,
979 int highbyte_regs
= (ctxt
->rex_prefix
== 0) && byteop
;
981 if (highbyte_regs
&& modrm_reg
>= 4 && modrm_reg
< 8)
982 p
= (unsigned char *)reg_rmw(ctxt
, modrm_reg
& 3) + 1;
984 p
= reg_rmw(ctxt
, modrm_reg
);
988 static int read_descriptor(struct x86_emulate_ctxt
*ctxt
,
989 struct segmented_address addr
,
990 u16
*size
, unsigned long *address
, int op_bytes
)
997 rc
= segmented_read_std(ctxt
, addr
, size
, 2);
998 if (rc
!= X86EMUL_CONTINUE
)
1001 rc
= segmented_read_std(ctxt
, addr
, address
, op_bytes
);
1015 FASTOP1SRC2(mul
, mul_ex
);
1016 FASTOP1SRC2(imul
, imul_ex
);
1017 FASTOP1SRC2EX(div
, div_ex
);
1018 FASTOP1SRC2EX(idiv
, idiv_ex
);
1047 FASTOP2R(cmp
, cmp_r
);
1049 static int em_bsf_c(struct x86_emulate_ctxt
*ctxt
)
1051 /* If src is zero, do not writeback, but update flags */
1052 if (ctxt
->src
.val
== 0)
1053 ctxt
->dst
.type
= OP_NONE
;
1054 return fastop(ctxt
, em_bsf
);
1057 static int em_bsr_c(struct x86_emulate_ctxt
*ctxt
)
1059 /* If src is zero, do not writeback, but update flags */
1060 if (ctxt
->src
.val
== 0)
1061 ctxt
->dst
.type
= OP_NONE
;
1062 return fastop(ctxt
, em_bsr
);
1065 static __always_inline u8
test_cc(unsigned int condition
, unsigned long flags
)
1068 void (*fop
)(void) = (void *)em_setcc
+ FASTOP_SIZE
* (condition
& 0xf);
1070 flags
= (flags
& EFLAGS_MASK
) | X86_EFLAGS_IF
;
1071 asm("push %[flags]; popf; " CALL_NOSPEC
1072 : "=a"(rc
), ASM_CALL_CONSTRAINT
: [thunk_target
]"r"(fop
), [flags
]"r"(flags
));
1076 static void fetch_register_operand(struct operand
*op
)
1078 switch (op
->bytes
) {
1080 op
->val
= *(u8
*)op
->addr
.reg
;
1083 op
->val
= *(u16
*)op
->addr
.reg
;
1086 op
->val
= *(u32
*)op
->addr
.reg
;
1089 op
->val
= *(u64
*)op
->addr
.reg
;
1094 static int em_fninit(struct x86_emulate_ctxt
*ctxt
)
1096 if (ctxt
->ops
->get_cr(ctxt
, 0) & (X86_CR0_TS
| X86_CR0_EM
))
1097 return emulate_nm(ctxt
);
1100 asm volatile("fninit");
1102 return X86EMUL_CONTINUE
;
1105 static int em_fnstcw(struct x86_emulate_ctxt
*ctxt
)
1109 if (ctxt
->ops
->get_cr(ctxt
, 0) & (X86_CR0_TS
| X86_CR0_EM
))
1110 return emulate_nm(ctxt
);
1113 asm volatile("fnstcw %0": "+m"(fcw
));
1116 ctxt
->dst
.val
= fcw
;
1118 return X86EMUL_CONTINUE
;
1121 static int em_fnstsw(struct x86_emulate_ctxt
*ctxt
)
1125 if (ctxt
->ops
->get_cr(ctxt
, 0) & (X86_CR0_TS
| X86_CR0_EM
))
1126 return emulate_nm(ctxt
);
1129 asm volatile("fnstsw %0": "+m"(fsw
));
1132 ctxt
->dst
.val
= fsw
;
1134 return X86EMUL_CONTINUE
;
1137 static void decode_register_operand(struct x86_emulate_ctxt
*ctxt
,
1142 if (ctxt
->d
& ModRM
)
1143 reg
= ctxt
->modrm_reg
;
1145 reg
= (ctxt
->b
& 7) | ((ctxt
->rex_prefix
& 1) << 3);
1147 if (ctxt
->d
& Sse
) {
1151 kvm_read_sse_reg(reg
, &op
->vec_val
);
1154 if (ctxt
->d
& Mmx
) {
1163 op
->bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
1164 op
->addr
.reg
= decode_register(ctxt
, reg
, ctxt
->d
& ByteOp
);
1166 fetch_register_operand(op
);
1167 op
->orig_val
= op
->val
;
1170 static void adjust_modrm_seg(struct x86_emulate_ctxt
*ctxt
, int base_reg
)
1172 if (base_reg
== VCPU_REGS_RSP
|| base_reg
== VCPU_REGS_RBP
)
1173 ctxt
->modrm_seg
= VCPU_SREG_SS
;
1176 static int decode_modrm(struct x86_emulate_ctxt
*ctxt
,
1180 int index_reg
, base_reg
, scale
;
1181 int rc
= X86EMUL_CONTINUE
;
1184 ctxt
->modrm_reg
= ((ctxt
->rex_prefix
<< 1) & 8); /* REX.R */
1185 index_reg
= (ctxt
->rex_prefix
<< 2) & 8; /* REX.X */
1186 base_reg
= (ctxt
->rex_prefix
<< 3) & 8; /* REX.B */
1188 ctxt
->modrm_mod
= (ctxt
->modrm
& 0xc0) >> 6;
1189 ctxt
->modrm_reg
|= (ctxt
->modrm
& 0x38) >> 3;
1190 ctxt
->modrm_rm
= base_reg
| (ctxt
->modrm
& 0x07);
1191 ctxt
->modrm_seg
= VCPU_SREG_DS
;
1193 if (ctxt
->modrm_mod
== 3 || (ctxt
->d
& NoMod
)) {
1195 op
->bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
1196 op
->addr
.reg
= decode_register(ctxt
, ctxt
->modrm_rm
,
1198 if (ctxt
->d
& Sse
) {
1201 op
->addr
.xmm
= ctxt
->modrm_rm
;
1202 kvm_read_sse_reg(ctxt
->modrm_rm
, &op
->vec_val
);
1205 if (ctxt
->d
& Mmx
) {
1208 op
->addr
.mm
= ctxt
->modrm_rm
& 7;
1211 fetch_register_operand(op
);
1217 if (ctxt
->ad_bytes
== 2) {
1218 unsigned bx
= reg_read(ctxt
, VCPU_REGS_RBX
);
1219 unsigned bp
= reg_read(ctxt
, VCPU_REGS_RBP
);
1220 unsigned si
= reg_read(ctxt
, VCPU_REGS_RSI
);
1221 unsigned di
= reg_read(ctxt
, VCPU_REGS_RDI
);
1223 /* 16-bit ModR/M decode. */
1224 switch (ctxt
->modrm_mod
) {
1226 if (ctxt
->modrm_rm
== 6)
1227 modrm_ea
+= insn_fetch(u16
, ctxt
);
1230 modrm_ea
+= insn_fetch(s8
, ctxt
);
1233 modrm_ea
+= insn_fetch(u16
, ctxt
);
1236 switch (ctxt
->modrm_rm
) {
1238 modrm_ea
+= bx
+ si
;
1241 modrm_ea
+= bx
+ di
;
1244 modrm_ea
+= bp
+ si
;
1247 modrm_ea
+= bp
+ di
;
1256 if (ctxt
->modrm_mod
!= 0)
1263 if (ctxt
->modrm_rm
== 2 || ctxt
->modrm_rm
== 3 ||
1264 (ctxt
->modrm_rm
== 6 && ctxt
->modrm_mod
!= 0))
1265 ctxt
->modrm_seg
= VCPU_SREG_SS
;
1266 modrm_ea
= (u16
)modrm_ea
;
1268 /* 32/64-bit ModR/M decode. */
1269 if ((ctxt
->modrm_rm
& 7) == 4) {
1270 sib
= insn_fetch(u8
, ctxt
);
1271 index_reg
|= (sib
>> 3) & 7;
1272 base_reg
|= sib
& 7;
1275 if ((base_reg
& 7) == 5 && ctxt
->modrm_mod
== 0)
1276 modrm_ea
+= insn_fetch(s32
, ctxt
);
1278 modrm_ea
+= reg_read(ctxt
, base_reg
);
1279 adjust_modrm_seg(ctxt
, base_reg
);
1280 /* Increment ESP on POP [ESP] */
1281 if ((ctxt
->d
& IncSP
) &&
1282 base_reg
== VCPU_REGS_RSP
)
1283 modrm_ea
+= ctxt
->op_bytes
;
1286 modrm_ea
+= reg_read(ctxt
, index_reg
) << scale
;
1287 } else if ((ctxt
->modrm_rm
& 7) == 5 && ctxt
->modrm_mod
== 0) {
1288 modrm_ea
+= insn_fetch(s32
, ctxt
);
1289 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
1290 ctxt
->rip_relative
= 1;
1292 base_reg
= ctxt
->modrm_rm
;
1293 modrm_ea
+= reg_read(ctxt
, base_reg
);
1294 adjust_modrm_seg(ctxt
, base_reg
);
1296 switch (ctxt
->modrm_mod
) {
1298 modrm_ea
+= insn_fetch(s8
, ctxt
);
1301 modrm_ea
+= insn_fetch(s32
, ctxt
);
1305 op
->addr
.mem
.ea
= modrm_ea
;
1306 if (ctxt
->ad_bytes
!= 8)
1307 ctxt
->memop
.addr
.mem
.ea
= (u32
)ctxt
->memop
.addr
.mem
.ea
;
1313 static int decode_abs(struct x86_emulate_ctxt
*ctxt
,
1316 int rc
= X86EMUL_CONTINUE
;
1319 switch (ctxt
->ad_bytes
) {
1321 op
->addr
.mem
.ea
= insn_fetch(u16
, ctxt
);
1324 op
->addr
.mem
.ea
= insn_fetch(u32
, ctxt
);
1327 op
->addr
.mem
.ea
= insn_fetch(u64
, ctxt
);
1334 static void fetch_bit_operand(struct x86_emulate_ctxt
*ctxt
)
1338 if (ctxt
->dst
.type
== OP_MEM
&& ctxt
->src
.type
== OP_REG
) {
1339 mask
= ~((long)ctxt
->dst
.bytes
* 8 - 1);
1341 if (ctxt
->src
.bytes
== 2)
1342 sv
= (s16
)ctxt
->src
.val
& (s16
)mask
;
1343 else if (ctxt
->src
.bytes
== 4)
1344 sv
= (s32
)ctxt
->src
.val
& (s32
)mask
;
1346 sv
= (s64
)ctxt
->src
.val
& (s64
)mask
;
1348 ctxt
->dst
.addr
.mem
.ea
= address_mask(ctxt
,
1349 ctxt
->dst
.addr
.mem
.ea
+ (sv
>> 3));
1352 /* only subword offset */
1353 ctxt
->src
.val
&= (ctxt
->dst
.bytes
<< 3) - 1;
1356 static int read_emulated(struct x86_emulate_ctxt
*ctxt
,
1357 unsigned long addr
, void *dest
, unsigned size
)
1360 struct read_cache
*mc
= &ctxt
->mem_read
;
1362 if (mc
->pos
< mc
->end
)
1365 if (KVM_EMULATOR_BUG_ON((mc
->end
+ size
) >= sizeof(mc
->data
), ctxt
))
1366 return X86EMUL_UNHANDLEABLE
;
1368 rc
= ctxt
->ops
->read_emulated(ctxt
, addr
, mc
->data
+ mc
->end
, size
,
1370 if (rc
!= X86EMUL_CONTINUE
)
1376 memcpy(dest
, mc
->data
+ mc
->pos
, size
);
1378 return X86EMUL_CONTINUE
;
1381 static int segmented_read(struct x86_emulate_ctxt
*ctxt
,
1382 struct segmented_address addr
,
1389 rc
= linearize(ctxt
, addr
, size
, false, &linear
);
1390 if (rc
!= X86EMUL_CONTINUE
)
1392 return read_emulated(ctxt
, linear
, data
, size
);
1395 static int segmented_write(struct x86_emulate_ctxt
*ctxt
,
1396 struct segmented_address addr
,
1403 rc
= linearize(ctxt
, addr
, size
, true, &linear
);
1404 if (rc
!= X86EMUL_CONTINUE
)
1406 return ctxt
->ops
->write_emulated(ctxt
, linear
, data
, size
,
1410 static int segmented_cmpxchg(struct x86_emulate_ctxt
*ctxt
,
1411 struct segmented_address addr
,
1412 const void *orig_data
, const void *data
,
1418 rc
= linearize(ctxt
, addr
, size
, true, &linear
);
1419 if (rc
!= X86EMUL_CONTINUE
)
1421 return ctxt
->ops
->cmpxchg_emulated(ctxt
, linear
, orig_data
, data
,
1422 size
, &ctxt
->exception
);
1425 static int pio_in_emulated(struct x86_emulate_ctxt
*ctxt
,
1426 unsigned int size
, unsigned short port
,
1429 struct read_cache
*rc
= &ctxt
->io_read
;
1431 if (rc
->pos
== rc
->end
) { /* refill pio read ahead */
1432 unsigned int in_page
, n
;
1433 unsigned int count
= ctxt
->rep_prefix
?
1434 address_mask(ctxt
, reg_read(ctxt
, VCPU_REGS_RCX
)) : 1;
1435 in_page
= (ctxt
->eflags
& X86_EFLAGS_DF
) ?
1436 offset_in_page(reg_read(ctxt
, VCPU_REGS_RDI
)) :
1437 PAGE_SIZE
- offset_in_page(reg_read(ctxt
, VCPU_REGS_RDI
));
1438 n
= min3(in_page
, (unsigned int)sizeof(rc
->data
) / size
, count
);
1441 rc
->pos
= rc
->end
= 0;
1442 if (!ctxt
->ops
->pio_in_emulated(ctxt
, size
, port
, rc
->data
, n
))
1447 if (ctxt
->rep_prefix
&& (ctxt
->d
& String
) &&
1448 !(ctxt
->eflags
& X86_EFLAGS_DF
)) {
1449 ctxt
->dst
.data
= rc
->data
+ rc
->pos
;
1450 ctxt
->dst
.type
= OP_MEM_STR
;
1451 ctxt
->dst
.count
= (rc
->end
- rc
->pos
) / size
;
1454 memcpy(dest
, rc
->data
+ rc
->pos
, size
);
1460 static int read_interrupt_descriptor(struct x86_emulate_ctxt
*ctxt
,
1461 u16 index
, struct desc_struct
*desc
)
1466 ctxt
->ops
->get_idt(ctxt
, &dt
);
1468 if (dt
.size
< index
* 8 + 7)
1469 return emulate_gp(ctxt
, index
<< 3 | 0x2);
1471 addr
= dt
.address
+ index
* 8;
1472 return linear_read_system(ctxt
, addr
, desc
, sizeof(*desc
));
1475 static void get_descriptor_table_ptr(struct x86_emulate_ctxt
*ctxt
,
1476 u16 selector
, struct desc_ptr
*dt
)
1478 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
1481 if (selector
& 1 << 2) {
1482 struct desc_struct desc
;
1485 memset(dt
, 0, sizeof(*dt
));
1486 if (!ops
->get_segment(ctxt
, &sel
, &desc
, &base3
,
1490 dt
->size
= desc_limit_scaled(&desc
); /* what if limit > 65535? */
1491 dt
->address
= get_desc_base(&desc
) | ((u64
)base3
<< 32);
1493 ops
->get_gdt(ctxt
, dt
);
1496 static int get_descriptor_ptr(struct x86_emulate_ctxt
*ctxt
,
1497 u16 selector
, ulong
*desc_addr_p
)
1500 u16 index
= selector
>> 3;
1503 get_descriptor_table_ptr(ctxt
, selector
, &dt
);
1505 if (dt
.size
< index
* 8 + 7)
1506 return emulate_gp(ctxt
, selector
& 0xfffc);
1508 addr
= dt
.address
+ index
* 8;
1510 #ifdef CONFIG_X86_64
1511 if (addr
>> 32 != 0) {
1514 ctxt
->ops
->get_msr(ctxt
, MSR_EFER
, &efer
);
1515 if (!(efer
& EFER_LMA
))
1520 *desc_addr_p
= addr
;
1521 return X86EMUL_CONTINUE
;
1524 /* allowed just for 8 bytes segments */
1525 static int read_segment_descriptor(struct x86_emulate_ctxt
*ctxt
,
1526 u16 selector
, struct desc_struct
*desc
,
1531 rc
= get_descriptor_ptr(ctxt
, selector
, desc_addr_p
);
1532 if (rc
!= X86EMUL_CONTINUE
)
1535 return linear_read_system(ctxt
, *desc_addr_p
, desc
, sizeof(*desc
));
1538 /* allowed just for 8 bytes segments */
1539 static int write_segment_descriptor(struct x86_emulate_ctxt
*ctxt
,
1540 u16 selector
, struct desc_struct
*desc
)
1545 rc
= get_descriptor_ptr(ctxt
, selector
, &addr
);
1546 if (rc
!= X86EMUL_CONTINUE
)
1549 return linear_write_system(ctxt
, addr
, desc
, sizeof(*desc
));
1552 static int __load_segment_descriptor(struct x86_emulate_ctxt
*ctxt
,
1553 u16 selector
, int seg
, u8 cpl
,
1554 enum x86_transfer_type transfer
,
1555 struct desc_struct
*desc
)
1557 struct desc_struct seg_desc
, old_desc
;
1559 unsigned err_vec
= GP_VECTOR
;
1561 bool null_selector
= !(selector
& ~0x3); /* 0000-0003 are null */
1567 memset(&seg_desc
, 0, sizeof(seg_desc
));
1569 if (ctxt
->mode
== X86EMUL_MODE_REAL
) {
1570 /* set real mode segment descriptor (keep limit etc. for
1572 ctxt
->ops
->get_segment(ctxt
, &dummy
, &seg_desc
, NULL
, seg
);
1573 set_desc_base(&seg_desc
, selector
<< 4);
1575 } else if (seg
<= VCPU_SREG_GS
&& ctxt
->mode
== X86EMUL_MODE_VM86
) {
1576 /* VM86 needs a clean new segment descriptor */
1577 set_desc_base(&seg_desc
, selector
<< 4);
1578 set_desc_limit(&seg_desc
, 0xffff);
1588 /* TR should be in GDT only */
1589 if (seg
== VCPU_SREG_TR
&& (selector
& (1 << 2)))
1592 /* NULL selector is not valid for TR, CS and (except for long mode) SS */
1593 if (null_selector
) {
1594 if (seg
== VCPU_SREG_CS
|| seg
== VCPU_SREG_TR
)
1597 if (seg
== VCPU_SREG_SS
) {
1598 if (ctxt
->mode
!= X86EMUL_MODE_PROT64
|| rpl
!= cpl
)
1602 * ctxt->ops->set_segment expects the CPL to be in
1603 * SS.DPL, so fake an expand-up 32-bit data segment.
1613 /* Skip all following checks */
1617 ret
= read_segment_descriptor(ctxt
, selector
, &seg_desc
, &desc_addr
);
1618 if (ret
!= X86EMUL_CONTINUE
)
1621 err_code
= selector
& 0xfffc;
1622 err_vec
= (transfer
== X86_TRANSFER_TASK_SWITCH
) ? TS_VECTOR
:
1625 /* can't load system descriptor into segment selector */
1626 if (seg
<= VCPU_SREG_GS
&& !seg_desc
.s
) {
1627 if (transfer
== X86_TRANSFER_CALL_JMP
)
1628 return X86EMUL_UNHANDLEABLE
;
1637 * segment is not a writable data segment or segment
1638 * selector's RPL != CPL or DPL != CPL
1640 if (rpl
!= cpl
|| (seg_desc
.type
& 0xa) != 0x2 || dpl
!= cpl
)
1645 * KVM uses "none" when loading CS as part of emulating Real
1646 * Mode exceptions and IRET (handled above). In all other
1647 * cases, loading CS without a control transfer is a KVM bug.
1649 if (WARN_ON_ONCE(transfer
== X86_TRANSFER_NONE
))
1652 if (!(seg_desc
.type
& 8))
1655 if (transfer
== X86_TRANSFER_RET
) {
1656 /* RET can never return to an inner privilege level. */
1659 /* Outer-privilege level return is not implemented */
1661 return X86EMUL_UNHANDLEABLE
;
1663 if (transfer
== X86_TRANSFER_RET
|| transfer
== X86_TRANSFER_TASK_SWITCH
) {
1664 if (seg_desc
.type
& 4) {
1673 } else { /* X86_TRANSFER_CALL_JMP */
1674 if (seg_desc
.type
& 4) {
1680 if (rpl
> cpl
|| dpl
!= cpl
)
1684 /* in long-mode d/b must be clear if l is set */
1685 if (seg_desc
.d
&& seg_desc
.l
) {
1688 ctxt
->ops
->get_msr(ctxt
, MSR_EFER
, &efer
);
1689 if (efer
& EFER_LMA
)
1693 /* CS(RPL) <- CPL */
1694 selector
= (selector
& 0xfffc) | cpl
;
1697 if (seg_desc
.s
|| (seg_desc
.type
!= 1 && seg_desc
.type
!= 9))
1700 case VCPU_SREG_LDTR
:
1701 if (seg_desc
.s
|| seg_desc
.type
!= 2)
1704 default: /* DS, ES, FS, or GS */
1706 * segment is not a data or readable code segment or
1707 * ((segment is a data or nonconforming code segment)
1708 * and ((RPL > DPL) or (CPL > DPL)))
1710 if ((seg_desc
.type
& 0xa) == 0x8 ||
1711 (((seg_desc
.type
& 0xc) != 0xc) &&
1712 (rpl
> dpl
|| cpl
> dpl
)))
1718 err_vec
= (seg
== VCPU_SREG_SS
) ? SS_VECTOR
: NP_VECTOR
;
1723 /* mark segment as accessed */
1724 if (!(seg_desc
.type
& 1)) {
1726 ret
= write_segment_descriptor(ctxt
, selector
,
1728 if (ret
!= X86EMUL_CONTINUE
)
1731 } else if (ctxt
->mode
== X86EMUL_MODE_PROT64
) {
1732 ret
= linear_read_system(ctxt
, desc_addr
+8, &base3
, sizeof(base3
));
1733 if (ret
!= X86EMUL_CONTINUE
)
1735 if (emul_is_noncanonical_address(get_desc_base(&seg_desc
) |
1736 ((u64
)base3
<< 32), ctxt
))
1737 return emulate_gp(ctxt
, err_code
);
1740 if (seg
== VCPU_SREG_TR
) {
1741 old_desc
= seg_desc
;
1742 seg_desc
.type
|= 2; /* busy */
1743 ret
= ctxt
->ops
->cmpxchg_emulated(ctxt
, desc_addr
, &old_desc
, &seg_desc
,
1744 sizeof(seg_desc
), &ctxt
->exception
);
1745 if (ret
!= X86EMUL_CONTINUE
)
1749 ctxt
->ops
->set_segment(ctxt
, selector
, &seg_desc
, base3
, seg
);
1752 return X86EMUL_CONTINUE
;
1754 return emulate_exception(ctxt
, err_vec
, err_code
, true);
1757 static int load_segment_descriptor(struct x86_emulate_ctxt
*ctxt
,
1758 u16 selector
, int seg
)
1760 u8 cpl
= ctxt
->ops
->cpl(ctxt
);
1763 * None of MOV, POP and LSS can load a NULL selector in CPL=3, but
1764 * they can load it at CPL<3 (Intel's manual says only LSS can,
1767 * However, the Intel manual says that putting IST=1/DPL=3 in
1768 * an interrupt gate will result in SS=3 (the AMD manual instead
1769 * says it doesn't), so allow SS=3 in __load_segment_descriptor
1770 * and only forbid it here.
1772 if (seg
== VCPU_SREG_SS
&& selector
== 3 &&
1773 ctxt
->mode
== X86EMUL_MODE_PROT64
)
1774 return emulate_exception(ctxt
, GP_VECTOR
, 0, true);
1776 return __load_segment_descriptor(ctxt
, selector
, seg
, cpl
,
1777 X86_TRANSFER_NONE
, NULL
);
1780 static void write_register_operand(struct operand
*op
)
1782 return assign_register(op
->addr
.reg
, op
->val
, op
->bytes
);
1785 static int writeback(struct x86_emulate_ctxt
*ctxt
, struct operand
*op
)
1789 write_register_operand(op
);
1792 if (ctxt
->lock_prefix
)
1793 return segmented_cmpxchg(ctxt
,
1799 return segmented_write(ctxt
,
1804 return segmented_write(ctxt
,
1807 op
->bytes
* op
->count
);
1809 kvm_write_sse_reg(op
->addr
.xmm
, &op
->vec_val
);
1812 kvm_write_mmx_reg(op
->addr
.mm
, &op
->mm_val
);
1820 return X86EMUL_CONTINUE
;
1823 static int emulate_push(struct x86_emulate_ctxt
*ctxt
, const void *data
, int len
)
1825 struct segmented_address addr
;
1827 rsp_increment(ctxt
, -len
);
1828 addr
.ea
= reg_read(ctxt
, VCPU_REGS_RSP
) & stack_mask(ctxt
);
1829 addr
.seg
= VCPU_SREG_SS
;
1831 return segmented_write(ctxt
, addr
, data
, len
);
1834 static int em_push(struct x86_emulate_ctxt
*ctxt
)
1836 /* Disable writeback. */
1837 ctxt
->dst
.type
= OP_NONE
;
1838 return emulate_push(ctxt
, &ctxt
->src
.val
, ctxt
->op_bytes
);
1841 static int emulate_pop(struct x86_emulate_ctxt
*ctxt
,
1842 void *dest
, int len
)
1845 struct segmented_address addr
;
1847 addr
.ea
= reg_read(ctxt
, VCPU_REGS_RSP
) & stack_mask(ctxt
);
1848 addr
.seg
= VCPU_SREG_SS
;
1849 rc
= segmented_read(ctxt
, addr
, dest
, len
);
1850 if (rc
!= X86EMUL_CONTINUE
)
1853 rsp_increment(ctxt
, len
);
1857 static int em_pop(struct x86_emulate_ctxt
*ctxt
)
1859 return emulate_pop(ctxt
, &ctxt
->dst
.val
, ctxt
->op_bytes
);
1862 static int emulate_popf(struct x86_emulate_ctxt
*ctxt
,
1863 void *dest
, int len
)
1866 unsigned long val
= 0;
1867 unsigned long change_mask
;
1868 int iopl
= (ctxt
->eflags
& X86_EFLAGS_IOPL
) >> X86_EFLAGS_IOPL_BIT
;
1869 int cpl
= ctxt
->ops
->cpl(ctxt
);
1871 rc
= emulate_pop(ctxt
, &val
, len
);
1872 if (rc
!= X86EMUL_CONTINUE
)
1875 change_mask
= X86_EFLAGS_CF
| X86_EFLAGS_PF
| X86_EFLAGS_AF
|
1876 X86_EFLAGS_ZF
| X86_EFLAGS_SF
| X86_EFLAGS_OF
|
1877 X86_EFLAGS_TF
| X86_EFLAGS_DF
| X86_EFLAGS_NT
|
1878 X86_EFLAGS_AC
| X86_EFLAGS_ID
;
1880 switch(ctxt
->mode
) {
1881 case X86EMUL_MODE_PROT64
:
1882 case X86EMUL_MODE_PROT32
:
1883 case X86EMUL_MODE_PROT16
:
1885 change_mask
|= X86_EFLAGS_IOPL
;
1887 change_mask
|= X86_EFLAGS_IF
;
1889 case X86EMUL_MODE_VM86
:
1891 return emulate_gp(ctxt
, 0);
1892 change_mask
|= X86_EFLAGS_IF
;
1894 default: /* real mode */
1895 change_mask
|= (X86_EFLAGS_IOPL
| X86_EFLAGS_IF
);
1899 *(unsigned long *)dest
=
1900 (ctxt
->eflags
& ~change_mask
) | (val
& change_mask
);
1905 static int em_popf(struct x86_emulate_ctxt
*ctxt
)
1907 ctxt
->dst
.type
= OP_REG
;
1908 ctxt
->dst
.addr
.reg
= &ctxt
->eflags
;
1909 ctxt
->dst
.bytes
= ctxt
->op_bytes
;
1910 return emulate_popf(ctxt
, &ctxt
->dst
.val
, ctxt
->op_bytes
);
1913 static int em_enter(struct x86_emulate_ctxt
*ctxt
)
1916 unsigned frame_size
= ctxt
->src
.val
;
1917 unsigned nesting_level
= ctxt
->src2
.val
& 31;
1921 return X86EMUL_UNHANDLEABLE
;
1923 rbp
= reg_read(ctxt
, VCPU_REGS_RBP
);
1924 rc
= emulate_push(ctxt
, &rbp
, stack_size(ctxt
));
1925 if (rc
!= X86EMUL_CONTINUE
)
1927 assign_masked(reg_rmw(ctxt
, VCPU_REGS_RBP
), reg_read(ctxt
, VCPU_REGS_RSP
),
1929 assign_masked(reg_rmw(ctxt
, VCPU_REGS_RSP
),
1930 reg_read(ctxt
, VCPU_REGS_RSP
) - frame_size
,
1932 return X86EMUL_CONTINUE
;
1935 static int em_leave(struct x86_emulate_ctxt
*ctxt
)
1937 assign_masked(reg_rmw(ctxt
, VCPU_REGS_RSP
), reg_read(ctxt
, VCPU_REGS_RBP
),
1939 return emulate_pop(ctxt
, reg_rmw(ctxt
, VCPU_REGS_RBP
), ctxt
->op_bytes
);
1942 static int em_push_sreg(struct x86_emulate_ctxt
*ctxt
)
1944 int seg
= ctxt
->src2
.val
;
1946 ctxt
->src
.val
= get_segment_selector(ctxt
, seg
);
1947 if (ctxt
->op_bytes
== 4) {
1948 rsp_increment(ctxt
, -2);
1952 return em_push(ctxt
);
1955 static int em_pop_sreg(struct x86_emulate_ctxt
*ctxt
)
1957 int seg
= ctxt
->src2
.val
;
1958 unsigned long selector
= 0;
1961 rc
= emulate_pop(ctxt
, &selector
, 2);
1962 if (rc
!= X86EMUL_CONTINUE
)
1965 if (seg
== VCPU_SREG_SS
)
1966 ctxt
->interruptibility
= KVM_X86_SHADOW_INT_MOV_SS
;
1967 if (ctxt
->op_bytes
> 2)
1968 rsp_increment(ctxt
, ctxt
->op_bytes
- 2);
1970 rc
= load_segment_descriptor(ctxt
, (u16
)selector
, seg
);
1974 static int em_pusha(struct x86_emulate_ctxt
*ctxt
)
1976 unsigned long old_esp
= reg_read(ctxt
, VCPU_REGS_RSP
);
1977 int rc
= X86EMUL_CONTINUE
;
1978 int reg
= VCPU_REGS_RAX
;
1980 while (reg
<= VCPU_REGS_RDI
) {
1981 (reg
== VCPU_REGS_RSP
) ?
1982 (ctxt
->src
.val
= old_esp
) : (ctxt
->src
.val
= reg_read(ctxt
, reg
));
1985 if (rc
!= X86EMUL_CONTINUE
)
1994 static int em_pushf(struct x86_emulate_ctxt
*ctxt
)
1996 ctxt
->src
.val
= (unsigned long)ctxt
->eflags
& ~X86_EFLAGS_VM
;
1997 return em_push(ctxt
);
2000 static int em_popa(struct x86_emulate_ctxt
*ctxt
)
2002 int rc
= X86EMUL_CONTINUE
;
2003 int reg
= VCPU_REGS_RDI
;
2006 while (reg
>= VCPU_REGS_RAX
) {
2007 if (reg
== VCPU_REGS_RSP
) {
2008 rsp_increment(ctxt
, ctxt
->op_bytes
);
2012 rc
= emulate_pop(ctxt
, &val
, ctxt
->op_bytes
);
2013 if (rc
!= X86EMUL_CONTINUE
)
2015 assign_register(reg_rmw(ctxt
, reg
), val
, ctxt
->op_bytes
);
2021 static int __emulate_int_real(struct x86_emulate_ctxt
*ctxt
, int irq
)
2023 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
2030 /* TODO: Add limit checks */
2031 ctxt
->src
.val
= ctxt
->eflags
;
2033 if (rc
!= X86EMUL_CONTINUE
)
2036 ctxt
->eflags
&= ~(X86_EFLAGS_IF
| X86_EFLAGS_TF
| X86_EFLAGS_AC
);
2038 ctxt
->src
.val
= get_segment_selector(ctxt
, VCPU_SREG_CS
);
2040 if (rc
!= X86EMUL_CONTINUE
)
2043 ctxt
->src
.val
= ctxt
->_eip
;
2045 if (rc
!= X86EMUL_CONTINUE
)
2048 ops
->get_idt(ctxt
, &dt
);
2050 eip_addr
= dt
.address
+ (irq
<< 2);
2051 cs_addr
= dt
.address
+ (irq
<< 2) + 2;
2053 rc
= linear_read_system(ctxt
, cs_addr
, &cs
, 2);
2054 if (rc
!= X86EMUL_CONTINUE
)
2057 rc
= linear_read_system(ctxt
, eip_addr
, &eip
, 2);
2058 if (rc
!= X86EMUL_CONTINUE
)
2061 rc
= load_segment_descriptor(ctxt
, cs
, VCPU_SREG_CS
);
2062 if (rc
!= X86EMUL_CONTINUE
)
2070 int emulate_int_real(struct x86_emulate_ctxt
*ctxt
, int irq
)
2074 invalidate_registers(ctxt
);
2075 rc
= __emulate_int_real(ctxt
, irq
);
2076 if (rc
== X86EMUL_CONTINUE
)
2077 writeback_registers(ctxt
);
2081 static int emulate_int(struct x86_emulate_ctxt
*ctxt
, int irq
)
2083 switch(ctxt
->mode
) {
2084 case X86EMUL_MODE_REAL
:
2085 return __emulate_int_real(ctxt
, irq
);
2086 case X86EMUL_MODE_VM86
:
2087 case X86EMUL_MODE_PROT16
:
2088 case X86EMUL_MODE_PROT32
:
2089 case X86EMUL_MODE_PROT64
:
2091 /* Protected mode interrupts unimplemented yet */
2092 return X86EMUL_UNHANDLEABLE
;
2096 static int emulate_iret_real(struct x86_emulate_ctxt
*ctxt
)
2098 int rc
= X86EMUL_CONTINUE
;
2099 unsigned long temp_eip
= 0;
2100 unsigned long temp_eflags
= 0;
2101 unsigned long cs
= 0;
2102 unsigned long mask
= X86_EFLAGS_CF
| X86_EFLAGS_PF
| X86_EFLAGS_AF
|
2103 X86_EFLAGS_ZF
| X86_EFLAGS_SF
| X86_EFLAGS_TF
|
2104 X86_EFLAGS_IF
| X86_EFLAGS_DF
| X86_EFLAGS_OF
|
2105 X86_EFLAGS_IOPL
| X86_EFLAGS_NT
| X86_EFLAGS_RF
|
2106 X86_EFLAGS_AC
| X86_EFLAGS_ID
|
2108 unsigned long vm86_mask
= X86_EFLAGS_VM
| X86_EFLAGS_VIF
|
2111 /* TODO: Add stack limit check */
2113 rc
= emulate_pop(ctxt
, &temp_eip
, ctxt
->op_bytes
);
2115 if (rc
!= X86EMUL_CONTINUE
)
2118 if (temp_eip
& ~0xffff)
2119 return emulate_gp(ctxt
, 0);
2121 rc
= emulate_pop(ctxt
, &cs
, ctxt
->op_bytes
);
2123 if (rc
!= X86EMUL_CONTINUE
)
2126 rc
= emulate_pop(ctxt
, &temp_eflags
, ctxt
->op_bytes
);
2128 if (rc
!= X86EMUL_CONTINUE
)
2131 rc
= load_segment_descriptor(ctxt
, (u16
)cs
, VCPU_SREG_CS
);
2133 if (rc
!= X86EMUL_CONTINUE
)
2136 ctxt
->_eip
= temp_eip
;
2138 if (ctxt
->op_bytes
== 4)
2139 ctxt
->eflags
= ((temp_eflags
& mask
) | (ctxt
->eflags
& vm86_mask
));
2140 else if (ctxt
->op_bytes
== 2) {
2141 ctxt
->eflags
&= ~0xffff;
2142 ctxt
->eflags
|= temp_eflags
;
2145 ctxt
->eflags
&= ~EFLG_RESERVED_ZEROS_MASK
; /* Clear reserved zeros */
2146 ctxt
->eflags
|= X86_EFLAGS_FIXED
;
2147 ctxt
->ops
->set_nmi_mask(ctxt
, false);
2152 static int em_iret(struct x86_emulate_ctxt
*ctxt
)
2154 switch(ctxt
->mode
) {
2155 case X86EMUL_MODE_REAL
:
2156 return emulate_iret_real(ctxt
);
2157 case X86EMUL_MODE_VM86
:
2158 case X86EMUL_MODE_PROT16
:
2159 case X86EMUL_MODE_PROT32
:
2160 case X86EMUL_MODE_PROT64
:
2162 /* iret from protected mode unimplemented yet */
2163 return X86EMUL_UNHANDLEABLE
;
2167 static int em_jmp_far(struct x86_emulate_ctxt
*ctxt
)
2171 struct desc_struct new_desc
;
2172 u8 cpl
= ctxt
->ops
->cpl(ctxt
);
2174 memcpy(&sel
, ctxt
->src
.valptr
+ ctxt
->op_bytes
, 2);
2176 rc
= __load_segment_descriptor(ctxt
, sel
, VCPU_SREG_CS
, cpl
,
2177 X86_TRANSFER_CALL_JMP
,
2179 if (rc
!= X86EMUL_CONTINUE
)
2182 rc
= assign_eip_far(ctxt
, ctxt
->src
.val
);
2183 /* Error handling is not implemented. */
2184 if (rc
!= X86EMUL_CONTINUE
)
2185 return X86EMUL_UNHANDLEABLE
;
2190 static int em_jmp_abs(struct x86_emulate_ctxt
*ctxt
)
2192 return assign_eip_near(ctxt
, ctxt
->src
.val
);
2195 static int em_call_near_abs(struct x86_emulate_ctxt
*ctxt
)
2200 old_eip
= ctxt
->_eip
;
2201 rc
= assign_eip_near(ctxt
, ctxt
->src
.val
);
2202 if (rc
!= X86EMUL_CONTINUE
)
2204 ctxt
->src
.val
= old_eip
;
2209 static int em_cmpxchg8b(struct x86_emulate_ctxt
*ctxt
)
2211 u64 old
= ctxt
->dst
.orig_val64
;
2213 if (ctxt
->dst
.bytes
== 16)
2214 return X86EMUL_UNHANDLEABLE
;
2216 if (((u32
) (old
>> 0) != (u32
) reg_read(ctxt
, VCPU_REGS_RAX
)) ||
2217 ((u32
) (old
>> 32) != (u32
) reg_read(ctxt
, VCPU_REGS_RDX
))) {
2218 *reg_write(ctxt
, VCPU_REGS_RAX
) = (u32
) (old
>> 0);
2219 *reg_write(ctxt
, VCPU_REGS_RDX
) = (u32
) (old
>> 32);
2220 ctxt
->eflags
&= ~X86_EFLAGS_ZF
;
2222 ctxt
->dst
.val64
= ((u64
)reg_read(ctxt
, VCPU_REGS_RCX
) << 32) |
2223 (u32
) reg_read(ctxt
, VCPU_REGS_RBX
);
2225 ctxt
->eflags
|= X86_EFLAGS_ZF
;
2227 return X86EMUL_CONTINUE
;
2230 static int em_ret(struct x86_emulate_ctxt
*ctxt
)
2233 unsigned long eip
= 0;
2235 rc
= emulate_pop(ctxt
, &eip
, ctxt
->op_bytes
);
2236 if (rc
!= X86EMUL_CONTINUE
)
2239 return assign_eip_near(ctxt
, eip
);
2242 static int em_ret_far(struct x86_emulate_ctxt
*ctxt
)
2245 unsigned long eip
= 0;
2246 unsigned long cs
= 0;
2247 int cpl
= ctxt
->ops
->cpl(ctxt
);
2248 struct desc_struct new_desc
;
2250 rc
= emulate_pop(ctxt
, &eip
, ctxt
->op_bytes
);
2251 if (rc
!= X86EMUL_CONTINUE
)
2253 rc
= emulate_pop(ctxt
, &cs
, ctxt
->op_bytes
);
2254 if (rc
!= X86EMUL_CONTINUE
)
2256 rc
= __load_segment_descriptor(ctxt
, (u16
)cs
, VCPU_SREG_CS
, cpl
,
2259 if (rc
!= X86EMUL_CONTINUE
)
2261 rc
= assign_eip_far(ctxt
, eip
);
2262 /* Error handling is not implemented. */
2263 if (rc
!= X86EMUL_CONTINUE
)
2264 return X86EMUL_UNHANDLEABLE
;
2269 static int em_ret_far_imm(struct x86_emulate_ctxt
*ctxt
)
2273 rc
= em_ret_far(ctxt
);
2274 if (rc
!= X86EMUL_CONTINUE
)
2276 rsp_increment(ctxt
, ctxt
->src
.val
);
2277 return X86EMUL_CONTINUE
;
2280 static int em_cmpxchg(struct x86_emulate_ctxt
*ctxt
)
2282 /* Save real source value, then compare EAX against destination. */
2283 ctxt
->dst
.orig_val
= ctxt
->dst
.val
;
2284 ctxt
->dst
.val
= reg_read(ctxt
, VCPU_REGS_RAX
);
2285 ctxt
->src
.orig_val
= ctxt
->src
.val
;
2286 ctxt
->src
.val
= ctxt
->dst
.orig_val
;
2287 fastop(ctxt
, em_cmp
);
2289 if (ctxt
->eflags
& X86_EFLAGS_ZF
) {
2290 /* Success: write back to memory; no update of EAX */
2291 ctxt
->src
.type
= OP_NONE
;
2292 ctxt
->dst
.val
= ctxt
->src
.orig_val
;
2294 /* Failure: write the value we saw to EAX. */
2295 ctxt
->src
.type
= OP_REG
;
2296 ctxt
->src
.addr
.reg
= reg_rmw(ctxt
, VCPU_REGS_RAX
);
2297 ctxt
->src
.val
= ctxt
->dst
.orig_val
;
2298 /* Create write-cycle to dest by writing the same value */
2299 ctxt
->dst
.val
= ctxt
->dst
.orig_val
;
2301 return X86EMUL_CONTINUE
;
2304 static int em_lseg(struct x86_emulate_ctxt
*ctxt
)
2306 int seg
= ctxt
->src2
.val
;
2310 memcpy(&sel
, ctxt
->src
.valptr
+ ctxt
->op_bytes
, 2);
2312 rc
= load_segment_descriptor(ctxt
, sel
, seg
);
2313 if (rc
!= X86EMUL_CONTINUE
)
2316 ctxt
->dst
.val
= ctxt
->src
.val
;
2320 static int em_rsm(struct x86_emulate_ctxt
*ctxt
)
2322 if (!ctxt
->ops
->is_smm(ctxt
))
2323 return emulate_ud(ctxt
);
2325 if (ctxt
->ops
->leave_smm(ctxt
))
2326 ctxt
->ops
->triple_fault(ctxt
);
2328 return emulator_recalc_and_set_mode(ctxt
);
2332 setup_syscalls_segments(struct desc_struct
*cs
, struct desc_struct
*ss
)
2334 cs
->l
= 0; /* will be adjusted later */
2335 set_desc_base(cs
, 0); /* flat segment */
2336 cs
->g
= 1; /* 4kb granularity */
2337 set_desc_limit(cs
, 0xfffff); /* 4GB limit */
2338 cs
->type
= 0x0b; /* Read, Execute, Accessed */
2340 cs
->dpl
= 0; /* will be adjusted later */
2345 set_desc_base(ss
, 0); /* flat segment */
2346 set_desc_limit(ss
, 0xfffff); /* 4GB limit */
2347 ss
->g
= 1; /* 4kb granularity */
2349 ss
->type
= 0x03; /* Read/Write, Accessed */
2350 ss
->d
= 1; /* 32bit stack segment */
2357 static int em_syscall(struct x86_emulate_ctxt
*ctxt
)
2359 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
2360 struct desc_struct cs
, ss
;
2365 /* syscall is not available in real mode */
2366 if (ctxt
->mode
== X86EMUL_MODE_REAL
||
2367 ctxt
->mode
== X86EMUL_MODE_VM86
)
2368 return emulate_ud(ctxt
);
2371 * Intel compatible CPUs only support SYSCALL in 64-bit mode, whereas
2372 * AMD allows SYSCALL in any flavor of protected mode. Note, it's
2373 * infeasible to emulate Intel behavior when running on AMD hardware,
2374 * as SYSCALL won't fault in the "wrong" mode, i.e. there is no #UD
2375 * for KVM to trap-and-emulate, unlike emulating AMD on Intel.
2377 if (ctxt
->mode
!= X86EMUL_MODE_PROT64
&&
2378 ctxt
->ops
->guest_cpuid_is_intel_compatible(ctxt
))
2379 return emulate_ud(ctxt
);
2381 ops
->get_msr(ctxt
, MSR_EFER
, &efer
);
2382 if (!(efer
& EFER_SCE
))
2383 return emulate_ud(ctxt
);
2385 setup_syscalls_segments(&cs
, &ss
);
2386 ops
->get_msr(ctxt
, MSR_STAR
, &msr_data
);
2388 cs_sel
= (u16
)(msr_data
& 0xfffc);
2389 ss_sel
= (u16
)(msr_data
+ 8);
2391 if (efer
& EFER_LMA
) {
2395 ops
->set_segment(ctxt
, cs_sel
, &cs
, 0, VCPU_SREG_CS
);
2396 ops
->set_segment(ctxt
, ss_sel
, &ss
, 0, VCPU_SREG_SS
);
2398 *reg_write(ctxt
, VCPU_REGS_RCX
) = ctxt
->_eip
;
2399 if (efer
& EFER_LMA
) {
2400 #ifdef CONFIG_X86_64
2401 *reg_write(ctxt
, VCPU_REGS_R11
) = ctxt
->eflags
;
2404 ctxt
->mode
== X86EMUL_MODE_PROT64
?
2405 MSR_LSTAR
: MSR_CSTAR
, &msr_data
);
2406 ctxt
->_eip
= msr_data
;
2408 ops
->get_msr(ctxt
, MSR_SYSCALL_MASK
, &msr_data
);
2409 ctxt
->eflags
&= ~msr_data
;
2410 ctxt
->eflags
|= X86_EFLAGS_FIXED
;
2414 ops
->get_msr(ctxt
, MSR_STAR
, &msr_data
);
2415 ctxt
->_eip
= (u32
)msr_data
;
2417 ctxt
->eflags
&= ~(X86_EFLAGS_VM
| X86_EFLAGS_IF
);
2420 ctxt
->tf
= (ctxt
->eflags
& X86_EFLAGS_TF
) != 0;
2421 return X86EMUL_CONTINUE
;
2424 static int em_sysenter(struct x86_emulate_ctxt
*ctxt
)
2426 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
2427 struct desc_struct cs
, ss
;
2432 ops
->get_msr(ctxt
, MSR_EFER
, &efer
);
2433 /* inject #GP if in real mode */
2434 if (ctxt
->mode
== X86EMUL_MODE_REAL
)
2435 return emulate_gp(ctxt
, 0);
2438 * Intel's architecture allows SYSENTER in compatibility mode, but AMD
2439 * does not. Note, AMD does allow SYSENTER in legacy protected mode.
2441 if ((ctxt
->mode
!= X86EMUL_MODE_PROT64
) && (efer
& EFER_LMA
) &&
2442 !ctxt
->ops
->guest_cpuid_is_intel_compatible(ctxt
))
2443 return emulate_ud(ctxt
);
2445 /* sysenter/sysexit have not been tested in 64bit mode. */
2446 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
2447 return X86EMUL_UNHANDLEABLE
;
2449 ops
->get_msr(ctxt
, MSR_IA32_SYSENTER_CS
, &msr_data
);
2450 if ((msr_data
& 0xfffc) == 0x0)
2451 return emulate_gp(ctxt
, 0);
2453 setup_syscalls_segments(&cs
, &ss
);
2454 ctxt
->eflags
&= ~(X86_EFLAGS_VM
| X86_EFLAGS_IF
);
2455 cs_sel
= (u16
)msr_data
& ~SEGMENT_RPL_MASK
;
2456 ss_sel
= cs_sel
+ 8;
2457 if (efer
& EFER_LMA
) {
2462 ops
->set_segment(ctxt
, cs_sel
, &cs
, 0, VCPU_SREG_CS
);
2463 ops
->set_segment(ctxt
, ss_sel
, &ss
, 0, VCPU_SREG_SS
);
2465 ops
->get_msr(ctxt
, MSR_IA32_SYSENTER_EIP
, &msr_data
);
2466 ctxt
->_eip
= (efer
& EFER_LMA
) ? msr_data
: (u32
)msr_data
;
2468 ops
->get_msr(ctxt
, MSR_IA32_SYSENTER_ESP
, &msr_data
);
2469 *reg_write(ctxt
, VCPU_REGS_RSP
) = (efer
& EFER_LMA
) ? msr_data
:
2471 if (efer
& EFER_LMA
)
2472 ctxt
->mode
= X86EMUL_MODE_PROT64
;
2474 return X86EMUL_CONTINUE
;
2477 static int em_sysexit(struct x86_emulate_ctxt
*ctxt
)
2479 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
2480 struct desc_struct cs
, ss
;
2481 u64 msr_data
, rcx
, rdx
;
2483 u16 cs_sel
= 0, ss_sel
= 0;
2485 /* inject #GP if in real mode or Virtual 8086 mode */
2486 if (ctxt
->mode
== X86EMUL_MODE_REAL
||
2487 ctxt
->mode
== X86EMUL_MODE_VM86
)
2488 return emulate_gp(ctxt
, 0);
2490 setup_syscalls_segments(&cs
, &ss
);
2492 if ((ctxt
->rex_prefix
& 0x8) != 0x0)
2493 usermode
= X86EMUL_MODE_PROT64
;
2495 usermode
= X86EMUL_MODE_PROT32
;
2497 rcx
= reg_read(ctxt
, VCPU_REGS_RCX
);
2498 rdx
= reg_read(ctxt
, VCPU_REGS_RDX
);
2502 ops
->get_msr(ctxt
, MSR_IA32_SYSENTER_CS
, &msr_data
);
2504 case X86EMUL_MODE_PROT32
:
2505 cs_sel
= (u16
)(msr_data
+ 16);
2506 if ((msr_data
& 0xfffc) == 0x0)
2507 return emulate_gp(ctxt
, 0);
2508 ss_sel
= (u16
)(msr_data
+ 24);
2512 case X86EMUL_MODE_PROT64
:
2513 cs_sel
= (u16
)(msr_data
+ 32);
2514 if (msr_data
== 0x0)
2515 return emulate_gp(ctxt
, 0);
2516 ss_sel
= cs_sel
+ 8;
2519 if (emul_is_noncanonical_address(rcx
, ctxt
) ||
2520 emul_is_noncanonical_address(rdx
, ctxt
))
2521 return emulate_gp(ctxt
, 0);
2524 cs_sel
|= SEGMENT_RPL_MASK
;
2525 ss_sel
|= SEGMENT_RPL_MASK
;
2527 ops
->set_segment(ctxt
, cs_sel
, &cs
, 0, VCPU_SREG_CS
);
2528 ops
->set_segment(ctxt
, ss_sel
, &ss
, 0, VCPU_SREG_SS
);
2531 ctxt
->mode
= usermode
;
2532 *reg_write(ctxt
, VCPU_REGS_RSP
) = rcx
;
2534 return X86EMUL_CONTINUE
;
2537 static bool emulator_bad_iopl(struct x86_emulate_ctxt
*ctxt
)
2540 if (ctxt
->mode
== X86EMUL_MODE_REAL
)
2542 if (ctxt
->mode
== X86EMUL_MODE_VM86
)
2544 iopl
= (ctxt
->eflags
& X86_EFLAGS_IOPL
) >> X86_EFLAGS_IOPL_BIT
;
2545 return ctxt
->ops
->cpl(ctxt
) > iopl
;
2548 #define VMWARE_PORT_VMPORT (0x5658)
2549 #define VMWARE_PORT_VMRPC (0x5659)
2551 static bool emulator_io_port_access_allowed(struct x86_emulate_ctxt
*ctxt
,
2554 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
2555 struct desc_struct tr_seg
;
2558 u16 tr
, io_bitmap_ptr
, perm
, bit_idx
= port
& 0x7;
2559 unsigned mask
= (1 << len
) - 1;
2563 * VMware allows access to these ports even if denied
2564 * by TSS I/O permission bitmap. Mimic behavior.
2566 if (enable_vmware_backdoor
&&
2567 ((port
== VMWARE_PORT_VMPORT
) || (port
== VMWARE_PORT_VMRPC
)))
2570 ops
->get_segment(ctxt
, &tr
, &tr_seg
, &base3
, VCPU_SREG_TR
);
2573 if (desc_limit_scaled(&tr_seg
) < 103)
2575 base
= get_desc_base(&tr_seg
);
2576 #ifdef CONFIG_X86_64
2577 base
|= ((u64
)base3
) << 32;
2579 r
= ops
->read_std(ctxt
, base
+ 102, &io_bitmap_ptr
, 2, NULL
, true);
2580 if (r
!= X86EMUL_CONTINUE
)
2582 if (io_bitmap_ptr
+ port
/8 > desc_limit_scaled(&tr_seg
))
2584 r
= ops
->read_std(ctxt
, base
+ io_bitmap_ptr
+ port
/8, &perm
, 2, NULL
, true);
2585 if (r
!= X86EMUL_CONTINUE
)
2587 if ((perm
>> bit_idx
) & mask
)
2592 static bool emulator_io_permitted(struct x86_emulate_ctxt
*ctxt
,
2598 if (emulator_bad_iopl(ctxt
))
2599 if (!emulator_io_port_access_allowed(ctxt
, port
, len
))
2602 ctxt
->perm_ok
= true;
2607 static void string_registers_quirk(struct x86_emulate_ctxt
*ctxt
)
2610 * Intel CPUs mask the counter and pointers in quite strange
2611 * manner when ECX is zero due to REP-string optimizations.
2613 #ifdef CONFIG_X86_64
2614 u32 eax
, ebx
, ecx
, edx
;
2616 if (ctxt
->ad_bytes
!= 4)
2620 ctxt
->ops
->get_cpuid(ctxt
, &eax
, &ebx
, &ecx
, &edx
, true);
2621 if (!is_guest_vendor_intel(ebx
, ecx
, edx
))
2624 *reg_write(ctxt
, VCPU_REGS_RCX
) = 0;
2627 case 0xa4: /* movsb */
2628 case 0xa5: /* movsd/w */
2629 *reg_rmw(ctxt
, VCPU_REGS_RSI
) &= (u32
)-1;
2631 case 0xaa: /* stosb */
2632 case 0xab: /* stosd/w */
2633 *reg_rmw(ctxt
, VCPU_REGS_RDI
) &= (u32
)-1;
2638 static void save_state_to_tss16(struct x86_emulate_ctxt
*ctxt
,
2639 struct tss_segment_16
*tss
)
2641 tss
->ip
= ctxt
->_eip
;
2642 tss
->flag
= ctxt
->eflags
;
2643 tss
->ax
= reg_read(ctxt
, VCPU_REGS_RAX
);
2644 tss
->cx
= reg_read(ctxt
, VCPU_REGS_RCX
);
2645 tss
->dx
= reg_read(ctxt
, VCPU_REGS_RDX
);
2646 tss
->bx
= reg_read(ctxt
, VCPU_REGS_RBX
);
2647 tss
->sp
= reg_read(ctxt
, VCPU_REGS_RSP
);
2648 tss
->bp
= reg_read(ctxt
, VCPU_REGS_RBP
);
2649 tss
->si
= reg_read(ctxt
, VCPU_REGS_RSI
);
2650 tss
->di
= reg_read(ctxt
, VCPU_REGS_RDI
);
2652 tss
->es
= get_segment_selector(ctxt
, VCPU_SREG_ES
);
2653 tss
->cs
= get_segment_selector(ctxt
, VCPU_SREG_CS
);
2654 tss
->ss
= get_segment_selector(ctxt
, VCPU_SREG_SS
);
2655 tss
->ds
= get_segment_selector(ctxt
, VCPU_SREG_DS
);
2656 tss
->ldt
= get_segment_selector(ctxt
, VCPU_SREG_LDTR
);
2659 static int load_state_from_tss16(struct x86_emulate_ctxt
*ctxt
,
2660 struct tss_segment_16
*tss
)
2665 ctxt
->_eip
= tss
->ip
;
2666 ctxt
->eflags
= tss
->flag
| 2;
2667 *reg_write(ctxt
, VCPU_REGS_RAX
) = tss
->ax
;
2668 *reg_write(ctxt
, VCPU_REGS_RCX
) = tss
->cx
;
2669 *reg_write(ctxt
, VCPU_REGS_RDX
) = tss
->dx
;
2670 *reg_write(ctxt
, VCPU_REGS_RBX
) = tss
->bx
;
2671 *reg_write(ctxt
, VCPU_REGS_RSP
) = tss
->sp
;
2672 *reg_write(ctxt
, VCPU_REGS_RBP
) = tss
->bp
;
2673 *reg_write(ctxt
, VCPU_REGS_RSI
) = tss
->si
;
2674 *reg_write(ctxt
, VCPU_REGS_RDI
) = tss
->di
;
2677 * SDM says that segment selectors are loaded before segment
2680 set_segment_selector(ctxt
, tss
->ldt
, VCPU_SREG_LDTR
);
2681 set_segment_selector(ctxt
, tss
->es
, VCPU_SREG_ES
);
2682 set_segment_selector(ctxt
, tss
->cs
, VCPU_SREG_CS
);
2683 set_segment_selector(ctxt
, tss
->ss
, VCPU_SREG_SS
);
2684 set_segment_selector(ctxt
, tss
->ds
, VCPU_SREG_DS
);
2689 * Now load segment descriptors. If fault happens at this stage
2690 * it is handled in a context of new task
2692 ret
= __load_segment_descriptor(ctxt
, tss
->ldt
, VCPU_SREG_LDTR
, cpl
,
2693 X86_TRANSFER_TASK_SWITCH
, NULL
);
2694 if (ret
!= X86EMUL_CONTINUE
)
2696 ret
= __load_segment_descriptor(ctxt
, tss
->es
, VCPU_SREG_ES
, cpl
,
2697 X86_TRANSFER_TASK_SWITCH
, NULL
);
2698 if (ret
!= X86EMUL_CONTINUE
)
2700 ret
= __load_segment_descriptor(ctxt
, tss
->cs
, VCPU_SREG_CS
, cpl
,
2701 X86_TRANSFER_TASK_SWITCH
, NULL
);
2702 if (ret
!= X86EMUL_CONTINUE
)
2704 ret
= __load_segment_descriptor(ctxt
, tss
->ss
, VCPU_SREG_SS
, cpl
,
2705 X86_TRANSFER_TASK_SWITCH
, NULL
);
2706 if (ret
!= X86EMUL_CONTINUE
)
2708 ret
= __load_segment_descriptor(ctxt
, tss
->ds
, VCPU_SREG_DS
, cpl
,
2709 X86_TRANSFER_TASK_SWITCH
, NULL
);
2710 if (ret
!= X86EMUL_CONTINUE
)
2713 return X86EMUL_CONTINUE
;
2716 static int task_switch_16(struct x86_emulate_ctxt
*ctxt
, u16 old_tss_sel
,
2717 ulong old_tss_base
, struct desc_struct
*new_desc
)
2719 struct tss_segment_16 tss_seg
;
2721 u32 new_tss_base
= get_desc_base(new_desc
);
2723 ret
= linear_read_system(ctxt
, old_tss_base
, &tss_seg
, sizeof(tss_seg
));
2724 if (ret
!= X86EMUL_CONTINUE
)
2727 save_state_to_tss16(ctxt
, &tss_seg
);
2729 ret
= linear_write_system(ctxt
, old_tss_base
, &tss_seg
, sizeof(tss_seg
));
2730 if (ret
!= X86EMUL_CONTINUE
)
2733 ret
= linear_read_system(ctxt
, new_tss_base
, &tss_seg
, sizeof(tss_seg
));
2734 if (ret
!= X86EMUL_CONTINUE
)
2737 if (old_tss_sel
!= 0xffff) {
2738 tss_seg
.prev_task_link
= old_tss_sel
;
2740 ret
= linear_write_system(ctxt
, new_tss_base
,
2741 &tss_seg
.prev_task_link
,
2742 sizeof(tss_seg
.prev_task_link
));
2743 if (ret
!= X86EMUL_CONTINUE
)
2747 return load_state_from_tss16(ctxt
, &tss_seg
);
2750 static void save_state_to_tss32(struct x86_emulate_ctxt
*ctxt
,
2751 struct tss_segment_32
*tss
)
2753 /* CR3 and ldt selector are not saved intentionally */
2754 tss
->eip
= ctxt
->_eip
;
2755 tss
->eflags
= ctxt
->eflags
;
2756 tss
->eax
= reg_read(ctxt
, VCPU_REGS_RAX
);
2757 tss
->ecx
= reg_read(ctxt
, VCPU_REGS_RCX
);
2758 tss
->edx
= reg_read(ctxt
, VCPU_REGS_RDX
);
2759 tss
->ebx
= reg_read(ctxt
, VCPU_REGS_RBX
);
2760 tss
->esp
= reg_read(ctxt
, VCPU_REGS_RSP
);
2761 tss
->ebp
= reg_read(ctxt
, VCPU_REGS_RBP
);
2762 tss
->esi
= reg_read(ctxt
, VCPU_REGS_RSI
);
2763 tss
->edi
= reg_read(ctxt
, VCPU_REGS_RDI
);
2765 tss
->es
= get_segment_selector(ctxt
, VCPU_SREG_ES
);
2766 tss
->cs
= get_segment_selector(ctxt
, VCPU_SREG_CS
);
2767 tss
->ss
= get_segment_selector(ctxt
, VCPU_SREG_SS
);
2768 tss
->ds
= get_segment_selector(ctxt
, VCPU_SREG_DS
);
2769 tss
->fs
= get_segment_selector(ctxt
, VCPU_SREG_FS
);
2770 tss
->gs
= get_segment_selector(ctxt
, VCPU_SREG_GS
);
2773 static int load_state_from_tss32(struct x86_emulate_ctxt
*ctxt
,
2774 struct tss_segment_32
*tss
)
2779 if (ctxt
->ops
->set_cr(ctxt
, 3, tss
->cr3
))
2780 return emulate_gp(ctxt
, 0);
2781 ctxt
->_eip
= tss
->eip
;
2782 ctxt
->eflags
= tss
->eflags
| 2;
2784 /* General purpose registers */
2785 *reg_write(ctxt
, VCPU_REGS_RAX
) = tss
->eax
;
2786 *reg_write(ctxt
, VCPU_REGS_RCX
) = tss
->ecx
;
2787 *reg_write(ctxt
, VCPU_REGS_RDX
) = tss
->edx
;
2788 *reg_write(ctxt
, VCPU_REGS_RBX
) = tss
->ebx
;
2789 *reg_write(ctxt
, VCPU_REGS_RSP
) = tss
->esp
;
2790 *reg_write(ctxt
, VCPU_REGS_RBP
) = tss
->ebp
;
2791 *reg_write(ctxt
, VCPU_REGS_RSI
) = tss
->esi
;
2792 *reg_write(ctxt
, VCPU_REGS_RDI
) = tss
->edi
;
2795 * SDM says that segment selectors are loaded before segment
2796 * descriptors. This is important because CPL checks will
2799 set_segment_selector(ctxt
, tss
->ldt_selector
, VCPU_SREG_LDTR
);
2800 set_segment_selector(ctxt
, tss
->es
, VCPU_SREG_ES
);
2801 set_segment_selector(ctxt
, tss
->cs
, VCPU_SREG_CS
);
2802 set_segment_selector(ctxt
, tss
->ss
, VCPU_SREG_SS
);
2803 set_segment_selector(ctxt
, tss
->ds
, VCPU_SREG_DS
);
2804 set_segment_selector(ctxt
, tss
->fs
, VCPU_SREG_FS
);
2805 set_segment_selector(ctxt
, tss
->gs
, VCPU_SREG_GS
);
2808 * If we're switching between Protected Mode and VM86, we need to make
2809 * sure to update the mode before loading the segment descriptors so
2810 * that the selectors are interpreted correctly.
2812 if (ctxt
->eflags
& X86_EFLAGS_VM
) {
2813 ctxt
->mode
= X86EMUL_MODE_VM86
;
2816 ctxt
->mode
= X86EMUL_MODE_PROT32
;
2821 * Now load segment descriptors. If fault happens at this stage
2822 * it is handled in a context of new task
2824 ret
= __load_segment_descriptor(ctxt
, tss
->ldt_selector
, VCPU_SREG_LDTR
,
2825 cpl
, X86_TRANSFER_TASK_SWITCH
, NULL
);
2826 if (ret
!= X86EMUL_CONTINUE
)
2828 ret
= __load_segment_descriptor(ctxt
, tss
->es
, VCPU_SREG_ES
, cpl
,
2829 X86_TRANSFER_TASK_SWITCH
, NULL
);
2830 if (ret
!= X86EMUL_CONTINUE
)
2832 ret
= __load_segment_descriptor(ctxt
, tss
->cs
, VCPU_SREG_CS
, cpl
,
2833 X86_TRANSFER_TASK_SWITCH
, NULL
);
2834 if (ret
!= X86EMUL_CONTINUE
)
2836 ret
= __load_segment_descriptor(ctxt
, tss
->ss
, VCPU_SREG_SS
, cpl
,
2837 X86_TRANSFER_TASK_SWITCH
, NULL
);
2838 if (ret
!= X86EMUL_CONTINUE
)
2840 ret
= __load_segment_descriptor(ctxt
, tss
->ds
, VCPU_SREG_DS
, cpl
,
2841 X86_TRANSFER_TASK_SWITCH
, NULL
);
2842 if (ret
!= X86EMUL_CONTINUE
)
2844 ret
= __load_segment_descriptor(ctxt
, tss
->fs
, VCPU_SREG_FS
, cpl
,
2845 X86_TRANSFER_TASK_SWITCH
, NULL
);
2846 if (ret
!= X86EMUL_CONTINUE
)
2848 ret
= __load_segment_descriptor(ctxt
, tss
->gs
, VCPU_SREG_GS
, cpl
,
2849 X86_TRANSFER_TASK_SWITCH
, NULL
);
2854 static int task_switch_32(struct x86_emulate_ctxt
*ctxt
, u16 old_tss_sel
,
2855 ulong old_tss_base
, struct desc_struct
*new_desc
)
2857 struct tss_segment_32 tss_seg
;
2859 u32 new_tss_base
= get_desc_base(new_desc
);
2860 u32 eip_offset
= offsetof(struct tss_segment_32
, eip
);
2861 u32 ldt_sel_offset
= offsetof(struct tss_segment_32
, ldt_selector
);
2863 ret
= linear_read_system(ctxt
, old_tss_base
, &tss_seg
, sizeof(tss_seg
));
2864 if (ret
!= X86EMUL_CONTINUE
)
2867 save_state_to_tss32(ctxt
, &tss_seg
);
2869 /* Only GP registers and segment selectors are saved */
2870 ret
= linear_write_system(ctxt
, old_tss_base
+ eip_offset
, &tss_seg
.eip
,
2871 ldt_sel_offset
- eip_offset
);
2872 if (ret
!= X86EMUL_CONTINUE
)
2875 ret
= linear_read_system(ctxt
, new_tss_base
, &tss_seg
, sizeof(tss_seg
));
2876 if (ret
!= X86EMUL_CONTINUE
)
2879 if (old_tss_sel
!= 0xffff) {
2880 tss_seg
.prev_task_link
= old_tss_sel
;
2882 ret
= linear_write_system(ctxt
, new_tss_base
,
2883 &tss_seg
.prev_task_link
,
2884 sizeof(tss_seg
.prev_task_link
));
2885 if (ret
!= X86EMUL_CONTINUE
)
2889 return load_state_from_tss32(ctxt
, &tss_seg
);
2892 static int emulator_do_task_switch(struct x86_emulate_ctxt
*ctxt
,
2893 u16 tss_selector
, int idt_index
, int reason
,
2894 bool has_error_code
, u32 error_code
)
2896 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
2897 struct desc_struct curr_tss_desc
, next_tss_desc
;
2899 u16 old_tss_sel
= get_segment_selector(ctxt
, VCPU_SREG_TR
);
2900 ulong old_tss_base
=
2901 ops
->get_cached_segment_base(ctxt
, VCPU_SREG_TR
);
2903 ulong desc_addr
, dr7
;
2905 /* FIXME: old_tss_base == ~0 ? */
2907 ret
= read_segment_descriptor(ctxt
, tss_selector
, &next_tss_desc
, &desc_addr
);
2908 if (ret
!= X86EMUL_CONTINUE
)
2910 ret
= read_segment_descriptor(ctxt
, old_tss_sel
, &curr_tss_desc
, &desc_addr
);
2911 if (ret
!= X86EMUL_CONTINUE
)
2914 /* FIXME: check that next_tss_desc is tss */
2917 * Check privileges. The three cases are task switch caused by...
2919 * 1. jmp/call/int to task gate: Check against DPL of the task gate
2920 * 2. Exception/IRQ/iret: No check is performed
2921 * 3. jmp/call to TSS/task-gate: No check is performed since the
2922 * hardware checks it before exiting.
2924 if (reason
== TASK_SWITCH_GATE
) {
2925 if (idt_index
!= -1) {
2926 /* Software interrupts */
2927 struct desc_struct task_gate_desc
;
2930 ret
= read_interrupt_descriptor(ctxt
, idt_index
,
2932 if (ret
!= X86EMUL_CONTINUE
)
2935 dpl
= task_gate_desc
.dpl
;
2936 if ((tss_selector
& 3) > dpl
|| ops
->cpl(ctxt
) > dpl
)
2937 return emulate_gp(ctxt
, (idt_index
<< 3) | 0x2);
2941 desc_limit
= desc_limit_scaled(&next_tss_desc
);
2942 if (!next_tss_desc
.p
||
2943 ((desc_limit
< 0x67 && (next_tss_desc
.type
& 8)) ||
2944 desc_limit
< 0x2b)) {
2945 return emulate_ts(ctxt
, tss_selector
& 0xfffc);
2948 if (reason
== TASK_SWITCH_IRET
|| reason
== TASK_SWITCH_JMP
) {
2949 curr_tss_desc
.type
&= ~(1 << 1); /* clear busy flag */
2950 write_segment_descriptor(ctxt
, old_tss_sel
, &curr_tss_desc
);
2953 if (reason
== TASK_SWITCH_IRET
)
2954 ctxt
->eflags
= ctxt
->eflags
& ~X86_EFLAGS_NT
;
2956 /* set back link to prev task only if NT bit is set in eflags
2957 note that old_tss_sel is not used after this point */
2958 if (reason
!= TASK_SWITCH_CALL
&& reason
!= TASK_SWITCH_GATE
)
2959 old_tss_sel
= 0xffff;
2961 if (next_tss_desc
.type
& 8)
2962 ret
= task_switch_32(ctxt
, old_tss_sel
, old_tss_base
, &next_tss_desc
);
2964 ret
= task_switch_16(ctxt
, old_tss_sel
,
2965 old_tss_base
, &next_tss_desc
);
2966 if (ret
!= X86EMUL_CONTINUE
)
2969 if (reason
== TASK_SWITCH_CALL
|| reason
== TASK_SWITCH_GATE
)
2970 ctxt
->eflags
= ctxt
->eflags
| X86_EFLAGS_NT
;
2972 if (reason
!= TASK_SWITCH_IRET
) {
2973 next_tss_desc
.type
|= (1 << 1); /* set busy flag */
2974 write_segment_descriptor(ctxt
, tss_selector
, &next_tss_desc
);
2977 ops
->set_cr(ctxt
, 0, ops
->get_cr(ctxt
, 0) | X86_CR0_TS
);
2978 ops
->set_segment(ctxt
, tss_selector
, &next_tss_desc
, 0, VCPU_SREG_TR
);
2980 if (has_error_code
) {
2981 ctxt
->op_bytes
= ctxt
->ad_bytes
= (next_tss_desc
.type
& 8) ? 4 : 2;
2982 ctxt
->lock_prefix
= 0;
2983 ctxt
->src
.val
= (unsigned long) error_code
;
2984 ret
= em_push(ctxt
);
2987 dr7
= ops
->get_dr(ctxt
, 7);
2988 ops
->set_dr(ctxt
, 7, dr7
& ~(DR_LOCAL_ENABLE_MASK
| DR_LOCAL_SLOWDOWN
));
2993 int emulator_task_switch(struct x86_emulate_ctxt
*ctxt
,
2994 u16 tss_selector
, int idt_index
, int reason
,
2995 bool has_error_code
, u32 error_code
)
2999 invalidate_registers(ctxt
);
3000 ctxt
->_eip
= ctxt
->eip
;
3001 ctxt
->dst
.type
= OP_NONE
;
3003 rc
= emulator_do_task_switch(ctxt
, tss_selector
, idt_index
, reason
,
3004 has_error_code
, error_code
);
3006 if (rc
== X86EMUL_CONTINUE
) {
3007 ctxt
->eip
= ctxt
->_eip
;
3008 writeback_registers(ctxt
);
3011 return (rc
== X86EMUL_UNHANDLEABLE
) ? EMULATION_FAILED
: EMULATION_OK
;
3014 static void string_addr_inc(struct x86_emulate_ctxt
*ctxt
, int reg
,
3017 int df
= (ctxt
->eflags
& X86_EFLAGS_DF
) ? -op
->count
: op
->count
;
3019 register_address_increment(ctxt
, reg
, df
* op
->bytes
);
3020 op
->addr
.mem
.ea
= register_address(ctxt
, reg
);
3023 static int em_das(struct x86_emulate_ctxt
*ctxt
)
3026 bool af
, cf
, old_cf
;
3028 cf
= ctxt
->eflags
& X86_EFLAGS_CF
;
3034 af
= ctxt
->eflags
& X86_EFLAGS_AF
;
3035 if ((al
& 0x0f) > 9 || af
) {
3037 cf
= old_cf
| (al
>= 250);
3042 if (old_al
> 0x99 || old_cf
) {
3048 /* Set PF, ZF, SF */
3049 ctxt
->src
.type
= OP_IMM
;
3051 ctxt
->src
.bytes
= 1;
3052 fastop(ctxt
, em_or
);
3053 ctxt
->eflags
&= ~(X86_EFLAGS_AF
| X86_EFLAGS_CF
);
3055 ctxt
->eflags
|= X86_EFLAGS_CF
;
3057 ctxt
->eflags
|= X86_EFLAGS_AF
;
3058 return X86EMUL_CONTINUE
;
3061 static int em_aam(struct x86_emulate_ctxt
*ctxt
)
3065 if (ctxt
->src
.val
== 0)
3066 return emulate_de(ctxt
);
3068 al
= ctxt
->dst
.val
& 0xff;
3069 ah
= al
/ ctxt
->src
.val
;
3070 al
%= ctxt
->src
.val
;
3072 ctxt
->dst
.val
= (ctxt
->dst
.val
& 0xffff0000) | al
| (ah
<< 8);
3074 /* Set PF, ZF, SF */
3075 ctxt
->src
.type
= OP_IMM
;
3077 ctxt
->src
.bytes
= 1;
3078 fastop(ctxt
, em_or
);
3080 return X86EMUL_CONTINUE
;
3083 static int em_aad(struct x86_emulate_ctxt
*ctxt
)
3085 u8 al
= ctxt
->dst
.val
& 0xff;
3086 u8 ah
= (ctxt
->dst
.val
>> 8) & 0xff;
3088 al
= (al
+ (ah
* ctxt
->src
.val
)) & 0xff;
3090 ctxt
->dst
.val
= (ctxt
->dst
.val
& 0xffff0000) | al
;
3092 /* Set PF, ZF, SF */
3093 ctxt
->src
.type
= OP_IMM
;
3095 ctxt
->src
.bytes
= 1;
3096 fastop(ctxt
, em_or
);
3098 return X86EMUL_CONTINUE
;
3101 static int em_call(struct x86_emulate_ctxt
*ctxt
)
3104 long rel
= ctxt
->src
.val
;
3106 ctxt
->src
.val
= (unsigned long)ctxt
->_eip
;
3107 rc
= jmp_rel(ctxt
, rel
);
3108 if (rc
!= X86EMUL_CONTINUE
)
3110 return em_push(ctxt
);
3113 static int em_call_far(struct x86_emulate_ctxt
*ctxt
)
3118 struct desc_struct old_desc
, new_desc
;
3119 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
3120 int cpl
= ctxt
->ops
->cpl(ctxt
);
3121 enum x86emul_mode prev_mode
= ctxt
->mode
;
3123 old_eip
= ctxt
->_eip
;
3124 ops
->get_segment(ctxt
, &old_cs
, &old_desc
, NULL
, VCPU_SREG_CS
);
3126 memcpy(&sel
, ctxt
->src
.valptr
+ ctxt
->op_bytes
, 2);
3127 rc
= __load_segment_descriptor(ctxt
, sel
, VCPU_SREG_CS
, cpl
,
3128 X86_TRANSFER_CALL_JMP
, &new_desc
);
3129 if (rc
!= X86EMUL_CONTINUE
)
3132 rc
= assign_eip_far(ctxt
, ctxt
->src
.val
);
3133 if (rc
!= X86EMUL_CONTINUE
)
3136 ctxt
->src
.val
= old_cs
;
3138 if (rc
!= X86EMUL_CONTINUE
)
3141 ctxt
->src
.val
= old_eip
;
3143 /* If we failed, we tainted the memory, but the very least we should
3145 if (rc
!= X86EMUL_CONTINUE
) {
3146 pr_warn_once("faulting far call emulation tainted memory\n");
3151 ops
->set_segment(ctxt
, old_cs
, &old_desc
, 0, VCPU_SREG_CS
);
3152 ctxt
->mode
= prev_mode
;
3157 static int em_ret_near_imm(struct x86_emulate_ctxt
*ctxt
)
3160 unsigned long eip
= 0;
3162 rc
= emulate_pop(ctxt
, &eip
, ctxt
->op_bytes
);
3163 if (rc
!= X86EMUL_CONTINUE
)
3165 rc
= assign_eip_near(ctxt
, eip
);
3166 if (rc
!= X86EMUL_CONTINUE
)
3168 rsp_increment(ctxt
, ctxt
->src
.val
);
3169 return X86EMUL_CONTINUE
;
3172 static int em_xchg(struct x86_emulate_ctxt
*ctxt
)
3174 /* Write back the register source. */
3175 ctxt
->src
.val
= ctxt
->dst
.val
;
3176 write_register_operand(&ctxt
->src
);
3178 /* Write back the memory destination with implicit LOCK prefix. */
3179 ctxt
->dst
.val
= ctxt
->src
.orig_val
;
3180 ctxt
->lock_prefix
= 1;
3181 return X86EMUL_CONTINUE
;
3184 static int em_imul_3op(struct x86_emulate_ctxt
*ctxt
)
3186 ctxt
->dst
.val
= ctxt
->src2
.val
;
3187 return fastop(ctxt
, em_imul
);
3190 static int em_cwd(struct x86_emulate_ctxt
*ctxt
)
3192 ctxt
->dst
.type
= OP_REG
;
3193 ctxt
->dst
.bytes
= ctxt
->src
.bytes
;
3194 ctxt
->dst
.addr
.reg
= reg_rmw(ctxt
, VCPU_REGS_RDX
);
3195 ctxt
->dst
.val
= ~((ctxt
->src
.val
>> (ctxt
->src
.bytes
* 8 - 1)) - 1);
3197 return X86EMUL_CONTINUE
;
3200 static int em_rdpid(struct x86_emulate_ctxt
*ctxt
)
3204 if (!ctxt
->ops
->guest_has_rdpid(ctxt
))
3205 return emulate_ud(ctxt
);
3207 ctxt
->ops
->get_msr(ctxt
, MSR_TSC_AUX
, &tsc_aux
);
3208 ctxt
->dst
.val
= tsc_aux
;
3209 return X86EMUL_CONTINUE
;
3212 static int em_rdtsc(struct x86_emulate_ctxt
*ctxt
)
3216 ctxt
->ops
->get_msr(ctxt
, MSR_IA32_TSC
, &tsc
);
3217 *reg_write(ctxt
, VCPU_REGS_RAX
) = (u32
)tsc
;
3218 *reg_write(ctxt
, VCPU_REGS_RDX
) = tsc
>> 32;
3219 return X86EMUL_CONTINUE
;
3222 static int em_rdpmc(struct x86_emulate_ctxt
*ctxt
)
3226 if (ctxt
->ops
->read_pmc(ctxt
, reg_read(ctxt
, VCPU_REGS_RCX
), &pmc
))
3227 return emulate_gp(ctxt
, 0);
3228 *reg_write(ctxt
, VCPU_REGS_RAX
) = (u32
)pmc
;
3229 *reg_write(ctxt
, VCPU_REGS_RDX
) = pmc
>> 32;
3230 return X86EMUL_CONTINUE
;
3233 static int em_mov(struct x86_emulate_ctxt
*ctxt
)
3235 memcpy(ctxt
->dst
.valptr
, ctxt
->src
.valptr
, sizeof(ctxt
->src
.valptr
));
3236 return X86EMUL_CONTINUE
;
3239 static int em_movbe(struct x86_emulate_ctxt
*ctxt
)
3243 if (!ctxt
->ops
->guest_has_movbe(ctxt
))
3244 return emulate_ud(ctxt
);
3246 switch (ctxt
->op_bytes
) {
3249 * From MOVBE definition: "...When the operand size is 16 bits,
3250 * the upper word of the destination register remains unchanged
3253 * Both casting ->valptr and ->val to u16 breaks strict aliasing
3254 * rules so we have to do the operation almost per hand.
3256 tmp
= (u16
)ctxt
->src
.val
;
3257 ctxt
->dst
.val
&= ~0xffffUL
;
3258 ctxt
->dst
.val
|= (unsigned long)swab16(tmp
);
3261 ctxt
->dst
.val
= swab32((u32
)ctxt
->src
.val
);
3264 ctxt
->dst
.val
= swab64(ctxt
->src
.val
);
3269 return X86EMUL_CONTINUE
;
3272 static int em_cr_write(struct x86_emulate_ctxt
*ctxt
)
3274 int cr_num
= ctxt
->modrm_reg
;
3277 if (ctxt
->ops
->set_cr(ctxt
, cr_num
, ctxt
->src
.val
))
3278 return emulate_gp(ctxt
, 0);
3280 /* Disable writeback. */
3281 ctxt
->dst
.type
= OP_NONE
;
3285 * CR0 write might have updated CR0.PE and/or CR0.PG
3286 * which can affect the cpu's execution mode.
3288 r
= emulator_recalc_and_set_mode(ctxt
);
3289 if (r
!= X86EMUL_CONTINUE
)
3293 return X86EMUL_CONTINUE
;
3296 static int em_dr_write(struct x86_emulate_ctxt
*ctxt
)
3300 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
3301 val
= ctxt
->src
.val
& ~0ULL;
3303 val
= ctxt
->src
.val
& ~0U;
3305 /* #UD condition is already handled. */
3306 if (ctxt
->ops
->set_dr(ctxt
, ctxt
->modrm_reg
, val
) < 0)
3307 return emulate_gp(ctxt
, 0);
3309 /* Disable writeback. */
3310 ctxt
->dst
.type
= OP_NONE
;
3311 return X86EMUL_CONTINUE
;
3314 static int em_wrmsr(struct x86_emulate_ctxt
*ctxt
)
3316 u64 msr_index
= reg_read(ctxt
, VCPU_REGS_RCX
);
3320 msr_data
= (u32
)reg_read(ctxt
, VCPU_REGS_RAX
)
3321 | ((u64
)reg_read(ctxt
, VCPU_REGS_RDX
) << 32);
3322 r
= ctxt
->ops
->set_msr_with_filter(ctxt
, msr_index
, msr_data
);
3324 if (r
== X86EMUL_PROPAGATE_FAULT
)
3325 return emulate_gp(ctxt
, 0);
3330 static int em_rdmsr(struct x86_emulate_ctxt
*ctxt
)
3332 u64 msr_index
= reg_read(ctxt
, VCPU_REGS_RCX
);
3336 r
= ctxt
->ops
->get_msr_with_filter(ctxt
, msr_index
, &msr_data
);
3338 if (r
== X86EMUL_PROPAGATE_FAULT
)
3339 return emulate_gp(ctxt
, 0);
3341 if (r
== X86EMUL_CONTINUE
) {
3342 *reg_write(ctxt
, VCPU_REGS_RAX
) = (u32
)msr_data
;
3343 *reg_write(ctxt
, VCPU_REGS_RDX
) = msr_data
>> 32;
3348 static int em_store_sreg(struct x86_emulate_ctxt
*ctxt
, int segment
)
3350 if (segment
> VCPU_SREG_GS
&&
3351 (ctxt
->ops
->get_cr(ctxt
, 4) & X86_CR4_UMIP
) &&
3352 ctxt
->ops
->cpl(ctxt
) > 0)
3353 return emulate_gp(ctxt
, 0);
3355 ctxt
->dst
.val
= get_segment_selector(ctxt
, segment
);
3356 if (ctxt
->dst
.bytes
== 4 && ctxt
->dst
.type
== OP_MEM
)
3357 ctxt
->dst
.bytes
= 2;
3358 return X86EMUL_CONTINUE
;
3361 static int em_mov_rm_sreg(struct x86_emulate_ctxt
*ctxt
)
3363 if (ctxt
->modrm_reg
> VCPU_SREG_GS
)
3364 return emulate_ud(ctxt
);
3366 return em_store_sreg(ctxt
, ctxt
->modrm_reg
);
3369 static int em_mov_sreg_rm(struct x86_emulate_ctxt
*ctxt
)
3371 u16 sel
= ctxt
->src
.val
;
3373 if (ctxt
->modrm_reg
== VCPU_SREG_CS
|| ctxt
->modrm_reg
> VCPU_SREG_GS
)
3374 return emulate_ud(ctxt
);
3376 if (ctxt
->modrm_reg
== VCPU_SREG_SS
)
3377 ctxt
->interruptibility
= KVM_X86_SHADOW_INT_MOV_SS
;
3379 /* Disable writeback. */
3380 ctxt
->dst
.type
= OP_NONE
;
3381 return load_segment_descriptor(ctxt
, sel
, ctxt
->modrm_reg
);
3384 static int em_sldt(struct x86_emulate_ctxt
*ctxt
)
3386 return em_store_sreg(ctxt
, VCPU_SREG_LDTR
);
3389 static int em_lldt(struct x86_emulate_ctxt
*ctxt
)
3391 u16 sel
= ctxt
->src
.val
;
3393 /* Disable writeback. */
3394 ctxt
->dst
.type
= OP_NONE
;
3395 return load_segment_descriptor(ctxt
, sel
, VCPU_SREG_LDTR
);
3398 static int em_str(struct x86_emulate_ctxt
*ctxt
)
3400 return em_store_sreg(ctxt
, VCPU_SREG_TR
);
3403 static int em_ltr(struct x86_emulate_ctxt
*ctxt
)
3405 u16 sel
= ctxt
->src
.val
;
3407 /* Disable writeback. */
3408 ctxt
->dst
.type
= OP_NONE
;
3409 return load_segment_descriptor(ctxt
, sel
, VCPU_SREG_TR
);
3412 static int em_invlpg(struct x86_emulate_ctxt
*ctxt
)
3416 unsigned int max_size
;
3418 rc
= __linearize(ctxt
, ctxt
->src
.addr
.mem
, &max_size
, 1, ctxt
->mode
,
3419 &linear
, X86EMUL_F_INVLPG
);
3420 if (rc
== X86EMUL_CONTINUE
)
3421 ctxt
->ops
->invlpg(ctxt
, linear
);
3422 /* Disable writeback. */
3423 ctxt
->dst
.type
= OP_NONE
;
3424 return X86EMUL_CONTINUE
;
3427 static int em_clts(struct x86_emulate_ctxt
*ctxt
)
3431 cr0
= ctxt
->ops
->get_cr(ctxt
, 0);
3433 ctxt
->ops
->set_cr(ctxt
, 0, cr0
);
3434 return X86EMUL_CONTINUE
;
3437 static int em_hypercall(struct x86_emulate_ctxt
*ctxt
)
3439 int rc
= ctxt
->ops
->fix_hypercall(ctxt
);
3441 if (rc
!= X86EMUL_CONTINUE
)
3444 /* Let the processor re-execute the fixed hypercall */
3445 ctxt
->_eip
= ctxt
->eip
;
3446 /* Disable writeback. */
3447 ctxt
->dst
.type
= OP_NONE
;
3448 return X86EMUL_CONTINUE
;
3451 static int emulate_store_desc_ptr(struct x86_emulate_ctxt
*ctxt
,
3452 void (*get
)(struct x86_emulate_ctxt
*ctxt
,
3453 struct desc_ptr
*ptr
))
3455 struct desc_ptr desc_ptr
;
3457 if ((ctxt
->ops
->get_cr(ctxt
, 4) & X86_CR4_UMIP
) &&
3458 ctxt
->ops
->cpl(ctxt
) > 0)
3459 return emulate_gp(ctxt
, 0);
3461 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
3463 get(ctxt
, &desc_ptr
);
3464 if (ctxt
->op_bytes
== 2) {
3466 desc_ptr
.address
&= 0x00ffffff;
3468 /* Disable writeback. */
3469 ctxt
->dst
.type
= OP_NONE
;
3470 return segmented_write_std(ctxt
, ctxt
->dst
.addr
.mem
,
3471 &desc_ptr
, 2 + ctxt
->op_bytes
);
3474 static int em_sgdt(struct x86_emulate_ctxt
*ctxt
)
3476 return emulate_store_desc_ptr(ctxt
, ctxt
->ops
->get_gdt
);
3479 static int em_sidt(struct x86_emulate_ctxt
*ctxt
)
3481 return emulate_store_desc_ptr(ctxt
, ctxt
->ops
->get_idt
);
3484 static int em_lgdt_lidt(struct x86_emulate_ctxt
*ctxt
, bool lgdt
)
3486 struct desc_ptr desc_ptr
;
3489 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
3491 rc
= read_descriptor(ctxt
, ctxt
->src
.addr
.mem
,
3492 &desc_ptr
.size
, &desc_ptr
.address
,
3494 if (rc
!= X86EMUL_CONTINUE
)
3496 if (ctxt
->mode
== X86EMUL_MODE_PROT64
&&
3497 emul_is_noncanonical_address(desc_ptr
.address
, ctxt
))
3498 return emulate_gp(ctxt
, 0);
3500 ctxt
->ops
->set_gdt(ctxt
, &desc_ptr
);
3502 ctxt
->ops
->set_idt(ctxt
, &desc_ptr
);
3503 /* Disable writeback. */
3504 ctxt
->dst
.type
= OP_NONE
;
3505 return X86EMUL_CONTINUE
;
3508 static int em_lgdt(struct x86_emulate_ctxt
*ctxt
)
3510 return em_lgdt_lidt(ctxt
, true);
3513 static int em_lidt(struct x86_emulate_ctxt
*ctxt
)
3515 return em_lgdt_lidt(ctxt
, false);
3518 static int em_smsw(struct x86_emulate_ctxt
*ctxt
)
3520 if ((ctxt
->ops
->get_cr(ctxt
, 4) & X86_CR4_UMIP
) &&
3521 ctxt
->ops
->cpl(ctxt
) > 0)
3522 return emulate_gp(ctxt
, 0);
3524 if (ctxt
->dst
.type
== OP_MEM
)
3525 ctxt
->dst
.bytes
= 2;
3526 ctxt
->dst
.val
= ctxt
->ops
->get_cr(ctxt
, 0);
3527 return X86EMUL_CONTINUE
;
3530 static int em_lmsw(struct x86_emulate_ctxt
*ctxt
)
3532 ctxt
->ops
->set_cr(ctxt
, 0, (ctxt
->ops
->get_cr(ctxt
, 0) & ~0x0eul
)
3533 | (ctxt
->src
.val
& 0x0f));
3534 ctxt
->dst
.type
= OP_NONE
;
3535 return X86EMUL_CONTINUE
;
3538 static int em_loop(struct x86_emulate_ctxt
*ctxt
)
3540 int rc
= X86EMUL_CONTINUE
;
3542 register_address_increment(ctxt
, VCPU_REGS_RCX
, -1);
3543 if ((address_mask(ctxt
, reg_read(ctxt
, VCPU_REGS_RCX
)) != 0) &&
3544 (ctxt
->b
== 0xe2 || test_cc(ctxt
->b
^ 0x5, ctxt
->eflags
)))
3545 rc
= jmp_rel(ctxt
, ctxt
->src
.val
);
3550 static int em_jcxz(struct x86_emulate_ctxt
*ctxt
)
3552 int rc
= X86EMUL_CONTINUE
;
3554 if (address_mask(ctxt
, reg_read(ctxt
, VCPU_REGS_RCX
)) == 0)
3555 rc
= jmp_rel(ctxt
, ctxt
->src
.val
);
3560 static int em_in(struct x86_emulate_ctxt
*ctxt
)
3562 if (!pio_in_emulated(ctxt
, ctxt
->dst
.bytes
, ctxt
->src
.val
,
3564 return X86EMUL_IO_NEEDED
;
3566 return X86EMUL_CONTINUE
;
3569 static int em_out(struct x86_emulate_ctxt
*ctxt
)
3571 ctxt
->ops
->pio_out_emulated(ctxt
, ctxt
->src
.bytes
, ctxt
->dst
.val
,
3573 /* Disable writeback. */
3574 ctxt
->dst
.type
= OP_NONE
;
3575 return X86EMUL_CONTINUE
;
3578 static int em_cli(struct x86_emulate_ctxt
*ctxt
)
3580 if (emulator_bad_iopl(ctxt
))
3581 return emulate_gp(ctxt
, 0);
3583 ctxt
->eflags
&= ~X86_EFLAGS_IF
;
3584 return X86EMUL_CONTINUE
;
3587 static int em_sti(struct x86_emulate_ctxt
*ctxt
)
3589 if (emulator_bad_iopl(ctxt
))
3590 return emulate_gp(ctxt
, 0);
3592 ctxt
->interruptibility
= KVM_X86_SHADOW_INT_STI
;
3593 ctxt
->eflags
|= X86_EFLAGS_IF
;
3594 return X86EMUL_CONTINUE
;
3597 static int em_cpuid(struct x86_emulate_ctxt
*ctxt
)
3599 u32 eax
, ebx
, ecx
, edx
;
3602 ctxt
->ops
->get_msr(ctxt
, MSR_MISC_FEATURES_ENABLES
, &msr
);
3603 if (msr
& MSR_MISC_FEATURES_ENABLES_CPUID_FAULT
&&
3604 ctxt
->ops
->cpl(ctxt
)) {
3605 return emulate_gp(ctxt
, 0);
3608 eax
= reg_read(ctxt
, VCPU_REGS_RAX
);
3609 ecx
= reg_read(ctxt
, VCPU_REGS_RCX
);
3610 ctxt
->ops
->get_cpuid(ctxt
, &eax
, &ebx
, &ecx
, &edx
, false);
3611 *reg_write(ctxt
, VCPU_REGS_RAX
) = eax
;
3612 *reg_write(ctxt
, VCPU_REGS_RBX
) = ebx
;
3613 *reg_write(ctxt
, VCPU_REGS_RCX
) = ecx
;
3614 *reg_write(ctxt
, VCPU_REGS_RDX
) = edx
;
3615 return X86EMUL_CONTINUE
;
3618 static int em_sahf(struct x86_emulate_ctxt
*ctxt
)
3622 flags
= X86_EFLAGS_CF
| X86_EFLAGS_PF
| X86_EFLAGS_AF
| X86_EFLAGS_ZF
|
3624 flags
&= *reg_rmw(ctxt
, VCPU_REGS_RAX
) >> 8;
3626 ctxt
->eflags
&= ~0xffUL
;
3627 ctxt
->eflags
|= flags
| X86_EFLAGS_FIXED
;
3628 return X86EMUL_CONTINUE
;
3631 static int em_lahf(struct x86_emulate_ctxt
*ctxt
)
3633 *reg_rmw(ctxt
, VCPU_REGS_RAX
) &= ~0xff00UL
;
3634 *reg_rmw(ctxt
, VCPU_REGS_RAX
) |= (ctxt
->eflags
& 0xff) << 8;
3635 return X86EMUL_CONTINUE
;
3638 static int em_bswap(struct x86_emulate_ctxt
*ctxt
)
3640 switch (ctxt
->op_bytes
) {
3641 #ifdef CONFIG_X86_64
3643 asm("bswap %0" : "+r"(ctxt
->dst
.val
));
3647 asm("bswap %0" : "+r"(*(u32
*)&ctxt
->dst
.val
));
3650 return X86EMUL_CONTINUE
;
3653 static int em_clflush(struct x86_emulate_ctxt
*ctxt
)
3655 /* emulating clflush regardless of cpuid */
3656 return X86EMUL_CONTINUE
;
3659 static int em_clflushopt(struct x86_emulate_ctxt
*ctxt
)
3661 /* emulating clflushopt regardless of cpuid */
3662 return X86EMUL_CONTINUE
;
3665 static int em_movsxd(struct x86_emulate_ctxt
*ctxt
)
3667 ctxt
->dst
.val
= (s32
) ctxt
->src
.val
;
3668 return X86EMUL_CONTINUE
;
3671 static int check_fxsr(struct x86_emulate_ctxt
*ctxt
)
3673 if (!ctxt
->ops
->guest_has_fxsr(ctxt
))
3674 return emulate_ud(ctxt
);
3676 if (ctxt
->ops
->get_cr(ctxt
, 0) & (X86_CR0_TS
| X86_CR0_EM
))
3677 return emulate_nm(ctxt
);
3680 * Don't emulate a case that should never be hit, instead of working
3681 * around a lack of fxsave64/fxrstor64 on old compilers.
3683 if (ctxt
->mode
>= X86EMUL_MODE_PROT64
)
3684 return X86EMUL_UNHANDLEABLE
;
3686 return X86EMUL_CONTINUE
;
3690 * Hardware doesn't save and restore XMM 0-7 without CR4.OSFXSR, but does save
3691 * and restore MXCSR.
3693 static size_t __fxstate_size(int nregs
)
3695 return offsetof(struct fxregs_state
, xmm_space
[0]) + nregs
* 16;
3698 static inline size_t fxstate_size(struct x86_emulate_ctxt
*ctxt
)
3701 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
3702 return __fxstate_size(16);
3704 cr4_osfxsr
= ctxt
->ops
->get_cr(ctxt
, 4) & X86_CR4_OSFXSR
;
3705 return __fxstate_size(cr4_osfxsr
? 8 : 0);
3709 * FXSAVE and FXRSTOR have 4 different formats depending on execution mode,
3712 * - like (1), but FIP and FDP (foo) are only 16 bit. At least Intel CPUs
3713 * preserve whole 32 bit values, though, so (1) and (2) are the same wrt.
3715 * 3) 64-bit mode with REX.W prefix
3716 * - like (2), but XMM 8-15 are being saved and restored
3717 * 4) 64-bit mode without REX.W prefix
3718 * - like (3), but FIP and FDP are 64 bit
3720 * Emulation uses (3) for (1) and (2) and preserves XMM 8-15 to reach the
3721 * desired result. (4) is not emulated.
3723 * Note: Guest and host CPUID.(EAX=07H,ECX=0H):EBX[bit 13] (deprecate FPU CS
3724 * and FPU DS) should match.
3726 static int em_fxsave(struct x86_emulate_ctxt
*ctxt
)
3728 struct fxregs_state fx_state
;
3731 rc
= check_fxsr(ctxt
);
3732 if (rc
!= X86EMUL_CONTINUE
)
3737 rc
= asm_safe("fxsave %[fx]", , [fx
] "+m"(fx_state
));
3741 if (rc
!= X86EMUL_CONTINUE
)
3744 return segmented_write_std(ctxt
, ctxt
->memop
.addr
.mem
, &fx_state
,
3745 fxstate_size(ctxt
));
3749 * FXRSTOR might restore XMM registers not provided by the guest. Fill
3750 * in the host registers (via FXSAVE) instead, so they won't be modified.
3751 * (preemption has to stay disabled until FXRSTOR).
3753 * Use noinline to keep the stack for other functions called by callers small.
3755 static noinline
int fxregs_fixup(struct fxregs_state
*fx_state
,
3756 const size_t used_size
)
3758 struct fxregs_state fx_tmp
;
3761 rc
= asm_safe("fxsave %[fx]", , [fx
] "+m"(fx_tmp
));
3762 memcpy((void *)fx_state
+ used_size
, (void *)&fx_tmp
+ used_size
,
3763 __fxstate_size(16) - used_size
);
3768 static int em_fxrstor(struct x86_emulate_ctxt
*ctxt
)
3770 struct fxregs_state fx_state
;
3774 rc
= check_fxsr(ctxt
);
3775 if (rc
!= X86EMUL_CONTINUE
)
3778 size
= fxstate_size(ctxt
);
3779 rc
= segmented_read_std(ctxt
, ctxt
->memop
.addr
.mem
, &fx_state
, size
);
3780 if (rc
!= X86EMUL_CONTINUE
)
3785 if (size
< __fxstate_size(16)) {
3786 rc
= fxregs_fixup(&fx_state
, size
);
3787 if (rc
!= X86EMUL_CONTINUE
)
3791 if (fx_state
.mxcsr
>> 16) {
3792 rc
= emulate_gp(ctxt
, 0);
3796 if (rc
== X86EMUL_CONTINUE
)
3797 rc
= asm_safe("fxrstor %[fx]", : [fx
] "m"(fx_state
));
3805 static int em_xsetbv(struct x86_emulate_ctxt
*ctxt
)
3809 if (!(ctxt
->ops
->get_cr(ctxt
, 4) & X86_CR4_OSXSAVE
))
3810 return emulate_ud(ctxt
);
3812 eax
= reg_read(ctxt
, VCPU_REGS_RAX
);
3813 edx
= reg_read(ctxt
, VCPU_REGS_RDX
);
3814 ecx
= reg_read(ctxt
, VCPU_REGS_RCX
);
3816 if (ctxt
->ops
->set_xcr(ctxt
, ecx
, ((u64
)edx
<< 32) | eax
))
3817 return emulate_gp(ctxt
, 0);
3819 return X86EMUL_CONTINUE
;
3822 static bool valid_cr(int nr
)
3834 static int check_cr_access(struct x86_emulate_ctxt
*ctxt
)
3836 if (!valid_cr(ctxt
->modrm_reg
))
3837 return emulate_ud(ctxt
);
3839 return X86EMUL_CONTINUE
;
3842 static int check_dr_read(struct x86_emulate_ctxt
*ctxt
)
3844 int dr
= ctxt
->modrm_reg
;
3848 return emulate_ud(ctxt
);
3850 cr4
= ctxt
->ops
->get_cr(ctxt
, 4);
3851 if ((cr4
& X86_CR4_DE
) && (dr
== 4 || dr
== 5))
3852 return emulate_ud(ctxt
);
3854 if (ctxt
->ops
->get_dr(ctxt
, 7) & DR7_GD
) {
3857 dr6
= ctxt
->ops
->get_dr(ctxt
, 6);
3858 dr6
&= ~DR_TRAP_BITS
;
3859 dr6
|= DR6_BD
| DR6_ACTIVE_LOW
;
3860 ctxt
->ops
->set_dr(ctxt
, 6, dr6
);
3861 return emulate_db(ctxt
);
3864 return X86EMUL_CONTINUE
;
3867 static int check_dr_write(struct x86_emulate_ctxt
*ctxt
)
3869 u64 new_val
= ctxt
->src
.val64
;
3870 int dr
= ctxt
->modrm_reg
;
3872 if ((dr
== 6 || dr
== 7) && (new_val
& 0xffffffff00000000ULL
))
3873 return emulate_gp(ctxt
, 0);
3875 return check_dr_read(ctxt
);
3878 static int check_svme(struct x86_emulate_ctxt
*ctxt
)
3882 ctxt
->ops
->get_msr(ctxt
, MSR_EFER
, &efer
);
3884 if (!(efer
& EFER_SVME
))
3885 return emulate_ud(ctxt
);
3887 return X86EMUL_CONTINUE
;
3890 static int check_svme_pa(struct x86_emulate_ctxt
*ctxt
)
3892 u64 rax
= reg_read(ctxt
, VCPU_REGS_RAX
);
3894 /* Valid physical address? */
3895 if (rax
& 0xffff000000000000ULL
)
3896 return emulate_gp(ctxt
, 0);
3898 return check_svme(ctxt
);
3901 static int check_rdtsc(struct x86_emulate_ctxt
*ctxt
)
3903 u64 cr4
= ctxt
->ops
->get_cr(ctxt
, 4);
3905 if (cr4
& X86_CR4_TSD
&& ctxt
->ops
->cpl(ctxt
))
3906 return emulate_gp(ctxt
, 0);
3908 return X86EMUL_CONTINUE
;
3911 static int check_rdpmc(struct x86_emulate_ctxt
*ctxt
)
3913 u64 cr4
= ctxt
->ops
->get_cr(ctxt
, 4);
3914 u64 rcx
= reg_read(ctxt
, VCPU_REGS_RCX
);
3917 * VMware allows access to these Pseduo-PMCs even when read via RDPMC
3918 * in Ring3 when CR4.PCE=0.
3920 if (enable_vmware_backdoor
&& is_vmware_backdoor_pmc(rcx
))
3921 return X86EMUL_CONTINUE
;
3924 * If CR4.PCE is set, the SDM requires CPL=0 or CR0.PE=0. The CR0.PE
3925 * check however is unnecessary because CPL is always 0 outside
3928 if ((!(cr4
& X86_CR4_PCE
) && ctxt
->ops
->cpl(ctxt
)) ||
3929 ctxt
->ops
->check_rdpmc_early(ctxt
, rcx
))
3930 return emulate_gp(ctxt
, 0);
3932 return X86EMUL_CONTINUE
;
3935 static int check_perm_in(struct x86_emulate_ctxt
*ctxt
)
3937 ctxt
->dst
.bytes
= min(ctxt
->dst
.bytes
, 4u);
3938 if (!emulator_io_permitted(ctxt
, ctxt
->src
.val
, ctxt
->dst
.bytes
))
3939 return emulate_gp(ctxt
, 0);
3941 return X86EMUL_CONTINUE
;
3944 static int check_perm_out(struct x86_emulate_ctxt
*ctxt
)
3946 ctxt
->src
.bytes
= min(ctxt
->src
.bytes
, 4u);
3947 if (!emulator_io_permitted(ctxt
, ctxt
->dst
.val
, ctxt
->src
.bytes
))
3948 return emulate_gp(ctxt
, 0);
3950 return X86EMUL_CONTINUE
;
3953 #define D(_y) { .flags = (_y) }
3954 #define DI(_y, _i) { .flags = (_y)|Intercept, .intercept = x86_intercept_##_i }
3955 #define DIP(_y, _i, _p) { .flags = (_y)|Intercept|CheckPerm, \
3956 .intercept = x86_intercept_##_i, .check_perm = (_p) }
3957 #define N D(NotImpl)
3958 #define EXT(_f, _e) { .flags = ((_f) | RMExt), .u.group = (_e) }
3959 #define G(_f, _g) { .flags = ((_f) | Group | ModRM), .u.group = (_g) }
3960 #define GD(_f, _g) { .flags = ((_f) | GroupDual | ModRM), .u.gdual = (_g) }
3961 #define ID(_f, _i) { .flags = ((_f) | InstrDual | ModRM), .u.idual = (_i) }
3962 #define MD(_f, _m) { .flags = ((_f) | ModeDual), .u.mdual = (_m) }
3963 #define E(_f, _e) { .flags = ((_f) | Escape | ModRM), .u.esc = (_e) }
3964 #define I(_f, _e) { .flags = (_f), .u.execute = (_e) }
3965 #define F(_f, _e) { .flags = (_f) | Fastop, .u.fastop = (_e) }
3966 #define II(_f, _e, _i) \
3967 { .flags = (_f)|Intercept, .u.execute = (_e), .intercept = x86_intercept_##_i }
3968 #define IIP(_f, _e, _i, _p) \
3969 { .flags = (_f)|Intercept|CheckPerm, .u.execute = (_e), \
3970 .intercept = x86_intercept_##_i, .check_perm = (_p) }
3971 #define GP(_f, _g) { .flags = ((_f) | Prefix), .u.gprefix = (_g) }
3973 #define D2bv(_f) D((_f) | ByteOp), D(_f)
3974 #define D2bvIP(_f, _i, _p) DIP((_f) | ByteOp, _i, _p), DIP(_f, _i, _p)
3975 #define I2bv(_f, _e) I((_f) | ByteOp, _e), I(_f, _e)
3976 #define F2bv(_f, _e) F((_f) | ByteOp, _e), F(_f, _e)
3977 #define I2bvIP(_f, _e, _i, _p) \
3978 IIP((_f) | ByteOp, _e, _i, _p), IIP(_f, _e, _i, _p)
3980 #define F6ALU(_f, _e) F2bv((_f) | DstMem | SrcReg | ModRM, _e), \
3981 F2bv(((_f) | DstReg | SrcMem | ModRM) & ~Lock, _e), \
3982 F2bv(((_f) & ~Lock) | DstAcc | SrcImm, _e)
3984 static const struct opcode group7_rm0
[] = {
3986 I(SrcNone
| Priv
| EmulateOnUD
, em_hypercall
),
3990 static const struct opcode group7_rm1
[] = {
3991 DI(SrcNone
| Priv
, monitor
),
3992 DI(SrcNone
| Priv
, mwait
),
3996 static const struct opcode group7_rm2
[] = {
3998 II(ImplicitOps
| Priv
, em_xsetbv
, xsetbv
),
4002 static const struct opcode group7_rm3
[] = {
4003 DIP(SrcNone
| Prot
| Priv
, vmrun
, check_svme_pa
),
4004 II(SrcNone
| Prot
| EmulateOnUD
, em_hypercall
, vmmcall
),
4005 DIP(SrcNone
| Prot
| Priv
, vmload
, check_svme_pa
),
4006 DIP(SrcNone
| Prot
| Priv
, vmsave
, check_svme_pa
),
4007 DIP(SrcNone
| Prot
| Priv
, stgi
, check_svme
),
4008 DIP(SrcNone
| Prot
| Priv
, clgi
, check_svme
),
4009 DIP(SrcNone
| Prot
| Priv
, skinit
, check_svme
),
4010 DIP(SrcNone
| Prot
| Priv
, invlpga
, check_svme
),
4013 static const struct opcode group7_rm7
[] = {
4015 DIP(SrcNone
, rdtscp
, check_rdtsc
),
4019 static const struct opcode group1
[] = {
4021 F(Lock
| PageTable
, em_or
),
4024 F(Lock
| PageTable
, em_and
),
4030 static const struct opcode group1A
[] = {
4031 I(DstMem
| SrcNone
| Mov
| Stack
| IncSP
| TwoMemOp
, em_pop
), N
, N
, N
, N
, N
, N
, N
,
4034 static const struct opcode group2
[] = {
4035 F(DstMem
| ModRM
, em_rol
),
4036 F(DstMem
| ModRM
, em_ror
),
4037 F(DstMem
| ModRM
, em_rcl
),
4038 F(DstMem
| ModRM
, em_rcr
),
4039 F(DstMem
| ModRM
, em_shl
),
4040 F(DstMem
| ModRM
, em_shr
),
4041 F(DstMem
| ModRM
, em_shl
),
4042 F(DstMem
| ModRM
, em_sar
),
4045 static const struct opcode group3
[] = {
4046 F(DstMem
| SrcImm
| NoWrite
, em_test
),
4047 F(DstMem
| SrcImm
| NoWrite
, em_test
),
4048 F(DstMem
| SrcNone
| Lock
, em_not
),
4049 F(DstMem
| SrcNone
| Lock
, em_neg
),
4050 F(DstXacc
| Src2Mem
, em_mul_ex
),
4051 F(DstXacc
| Src2Mem
, em_imul_ex
),
4052 F(DstXacc
| Src2Mem
, em_div_ex
),
4053 F(DstXacc
| Src2Mem
, em_idiv_ex
),
4056 static const struct opcode group4
[] = {
4057 F(ByteOp
| DstMem
| SrcNone
| Lock
, em_inc
),
4058 F(ByteOp
| DstMem
| SrcNone
| Lock
, em_dec
),
4062 static const struct opcode group5
[] = {
4063 F(DstMem
| SrcNone
| Lock
, em_inc
),
4064 F(DstMem
| SrcNone
| Lock
, em_dec
),
4065 I(SrcMem
| NearBranch
| IsBranch
, em_call_near_abs
),
4066 I(SrcMemFAddr
| ImplicitOps
| IsBranch
, em_call_far
),
4067 I(SrcMem
| NearBranch
| IsBranch
, em_jmp_abs
),
4068 I(SrcMemFAddr
| ImplicitOps
| IsBranch
, em_jmp_far
),
4069 I(SrcMem
| Stack
| TwoMemOp
, em_push
), D(Undefined
),
4072 static const struct opcode group6
[] = {
4073 II(Prot
| DstMem
, em_sldt
, sldt
),
4074 II(Prot
| DstMem
, em_str
, str
),
4075 II(Prot
| Priv
| SrcMem16
, em_lldt
, lldt
),
4076 II(Prot
| Priv
| SrcMem16
, em_ltr
, ltr
),
4080 static const struct group_dual group7
= { {
4081 II(Mov
| DstMem
, em_sgdt
, sgdt
),
4082 II(Mov
| DstMem
, em_sidt
, sidt
),
4083 II(SrcMem
| Priv
, em_lgdt
, lgdt
),
4084 II(SrcMem
| Priv
, em_lidt
, lidt
),
4085 II(SrcNone
| DstMem
| Mov
, em_smsw
, smsw
), N
,
4086 II(SrcMem16
| Mov
| Priv
, em_lmsw
, lmsw
),
4087 II(SrcMem
| ByteOp
| Priv
| NoAccess
, em_invlpg
, invlpg
),
4093 II(SrcNone
| DstMem
| Mov
, em_smsw
, smsw
), N
,
4094 II(SrcMem16
| Mov
| Priv
, em_lmsw
, lmsw
),
4098 static const struct opcode group8
[] = {
4100 F(DstMem
| SrcImmByte
| NoWrite
, em_bt
),
4101 F(DstMem
| SrcImmByte
| Lock
| PageTable
, em_bts
),
4102 F(DstMem
| SrcImmByte
| Lock
, em_btr
),
4103 F(DstMem
| SrcImmByte
| Lock
| PageTable
, em_btc
),
4107 * The "memory" destination is actually always a register, since we come
4108 * from the register case of group9.
4110 static const struct gprefix pfx_0f_c7_7
= {
4111 N
, N
, N
, II(DstMem
| ModRM
| Op3264
| EmulateOnUD
, em_rdpid
, rdpid
),
4115 static const struct group_dual group9
= { {
4116 N
, I(DstMem64
| Lock
| PageTable
, em_cmpxchg8b
), N
, N
, N
, N
, N
, N
,
4118 N
, N
, N
, N
, N
, N
, N
,
4119 GP(0, &pfx_0f_c7_7
),
4122 static const struct opcode group11
[] = {
4123 I(DstMem
| SrcImm
| Mov
| PageTable
, em_mov
),
4127 static const struct gprefix pfx_0f_ae_7
= {
4128 I(SrcMem
| ByteOp
, em_clflush
), I(SrcMem
| ByteOp
, em_clflushopt
), N
, N
,
4131 static const struct group_dual group15
= { {
4132 I(ModRM
| Aligned16
, em_fxsave
),
4133 I(ModRM
| Aligned16
, em_fxrstor
),
4134 N
, N
, N
, N
, N
, GP(0, &pfx_0f_ae_7
),
4136 N
, N
, N
, N
, N
, N
, N
, N
,
4139 static const struct gprefix pfx_0f_6f_0f_7f
= {
4140 I(Mmx
, em_mov
), I(Sse
| Aligned
, em_mov
), N
, I(Sse
| Unaligned
, em_mov
),
4143 static const struct instr_dual instr_dual_0f_2b
= {
4147 static const struct gprefix pfx_0f_2b
= {
4148 ID(0, &instr_dual_0f_2b
), ID(0, &instr_dual_0f_2b
), N
, N
,
4151 static const struct gprefix pfx_0f_10_0f_11
= {
4152 I(Unaligned
, em_mov
), I(Unaligned
, em_mov
), N
, N
,
4155 static const struct gprefix pfx_0f_28_0f_29
= {
4156 I(Aligned
, em_mov
), I(Aligned
, em_mov
), N
, N
,
4159 static const struct gprefix pfx_0f_e7
= {
4160 N
, I(Sse
, em_mov
), N
, N
,
4163 static const struct escape escape_d9
= { {
4164 N
, N
, N
, N
, N
, N
, N
, I(DstMem16
| Mov
, em_fnstcw
),
4167 N
, N
, N
, N
, N
, N
, N
, N
,
4169 N
, N
, N
, N
, N
, N
, N
, N
,
4171 N
, N
, N
, N
, N
, N
, N
, N
,
4173 N
, N
, N
, N
, N
, N
, N
, N
,
4175 N
, N
, N
, N
, N
, N
, N
, N
,
4177 N
, N
, N
, N
, N
, N
, N
, N
,
4179 N
, N
, N
, N
, N
, N
, N
, N
,
4181 N
, N
, N
, N
, N
, N
, N
, N
,
4184 static const struct escape escape_db
= { {
4185 N
, N
, N
, N
, N
, N
, N
, N
,
4188 N
, N
, N
, N
, N
, N
, N
, N
,
4190 N
, N
, N
, N
, N
, N
, N
, N
,
4192 N
, N
, N
, N
, N
, N
, N
, N
,
4194 N
, N
, N
, N
, N
, N
, N
, N
,
4196 N
, N
, N
, I(ImplicitOps
, em_fninit
), N
, N
, N
, N
,
4198 N
, N
, N
, N
, N
, N
, N
, N
,
4200 N
, N
, N
, N
, N
, N
, N
, N
,
4202 N
, N
, N
, N
, N
, N
, N
, N
,
4205 static const struct escape escape_dd
= { {
4206 N
, N
, N
, N
, N
, N
, N
, I(DstMem16
| Mov
, em_fnstsw
),
4209 N
, N
, N
, N
, N
, N
, N
, N
,
4211 N
, N
, N
, N
, N
, N
, N
, N
,
4213 N
, N
, N
, N
, N
, N
, N
, N
,
4215 N
, N
, N
, N
, N
, N
, N
, N
,
4217 N
, N
, N
, N
, N
, N
, N
, N
,
4219 N
, N
, N
, N
, N
, N
, N
, N
,
4221 N
, N
, N
, N
, N
, N
, N
, N
,
4223 N
, N
, N
, N
, N
, N
, N
, N
,
4226 static const struct instr_dual instr_dual_0f_c3
= {
4227 I(DstMem
| SrcReg
| ModRM
| No16
| Mov
, em_mov
), N
4230 static const struct mode_dual mode_dual_63
= {
4231 N
, I(DstReg
| SrcMem32
| ModRM
| Mov
, em_movsxd
)
4234 static const struct instr_dual instr_dual_8d
= {
4235 D(DstReg
| SrcMem
| ModRM
| NoAccess
), N
4238 static const struct opcode opcode_table
[256] = {
4240 F6ALU(Lock
, em_add
),
4241 I(ImplicitOps
| Stack
| No64
| Src2ES
, em_push_sreg
),
4242 I(ImplicitOps
| Stack
| No64
| Src2ES
, em_pop_sreg
),
4244 F6ALU(Lock
| PageTable
, em_or
),
4245 I(ImplicitOps
| Stack
| No64
| Src2CS
, em_push_sreg
),
4248 F6ALU(Lock
, em_adc
),
4249 I(ImplicitOps
| Stack
| No64
| Src2SS
, em_push_sreg
),
4250 I(ImplicitOps
| Stack
| No64
| Src2SS
, em_pop_sreg
),
4252 F6ALU(Lock
, em_sbb
),
4253 I(ImplicitOps
| Stack
| No64
| Src2DS
, em_push_sreg
),
4254 I(ImplicitOps
| Stack
| No64
| Src2DS
, em_pop_sreg
),
4256 F6ALU(Lock
| PageTable
, em_and
), N
, N
,
4258 F6ALU(Lock
, em_sub
), N
, I(ByteOp
| DstAcc
| No64
, em_das
),
4260 F6ALU(Lock
, em_xor
), N
, N
,
4262 F6ALU(NoWrite
, em_cmp
), N
, N
,
4264 X8(F(DstReg
, em_inc
)), X8(F(DstReg
, em_dec
)),
4266 X8(I(SrcReg
| Stack
, em_push
)),
4268 X8(I(DstReg
| Stack
, em_pop
)),
4270 I(ImplicitOps
| Stack
| No64
, em_pusha
),
4271 I(ImplicitOps
| Stack
| No64
, em_popa
),
4272 N
, MD(ModRM
, &mode_dual_63
),
4275 I(SrcImm
| Mov
| Stack
, em_push
),
4276 I(DstReg
| SrcMem
| ModRM
| Src2Imm
, em_imul_3op
),
4277 I(SrcImmByte
| Mov
| Stack
, em_push
),
4278 I(DstReg
| SrcMem
| ModRM
| Src2ImmByte
, em_imul_3op
),
4279 I2bvIP(DstDI
| SrcDX
| Mov
| String
| Unaligned
, em_in
, ins
, check_perm_in
), /* insb, insw/insd */
4280 I2bvIP(SrcSI
| DstDX
| String
, em_out
, outs
, check_perm_out
), /* outsb, outsw/outsd */
4282 X16(D(SrcImmByte
| NearBranch
| IsBranch
)),
4284 G(ByteOp
| DstMem
| SrcImm
, group1
),
4285 G(DstMem
| SrcImm
, group1
),
4286 G(ByteOp
| DstMem
| SrcImm
| No64
, group1
),
4287 G(DstMem
| SrcImmByte
, group1
),
4288 F2bv(DstMem
| SrcReg
| ModRM
| NoWrite
, em_test
),
4289 I2bv(DstMem
| SrcReg
| ModRM
| Lock
| PageTable
, em_xchg
),
4291 I2bv(DstMem
| SrcReg
| ModRM
| Mov
| PageTable
, em_mov
),
4292 I2bv(DstReg
| SrcMem
| ModRM
| Mov
, em_mov
),
4293 I(DstMem
| SrcNone
| ModRM
| Mov
| PageTable
, em_mov_rm_sreg
),
4294 ID(0, &instr_dual_8d
),
4295 I(ImplicitOps
| SrcMem16
| ModRM
, em_mov_sreg_rm
),
4298 DI(SrcAcc
| DstReg
, pause
), X7(D(SrcAcc
| DstReg
)),
4300 D(DstAcc
| SrcNone
), I(ImplicitOps
| SrcAcc
, em_cwd
),
4301 I(SrcImmFAddr
| No64
| IsBranch
, em_call_far
), N
,
4302 II(ImplicitOps
| Stack
, em_pushf
, pushf
),
4303 II(ImplicitOps
| Stack
, em_popf
, popf
),
4304 I(ImplicitOps
, em_sahf
), I(ImplicitOps
, em_lahf
),
4306 I2bv(DstAcc
| SrcMem
| Mov
| MemAbs
, em_mov
),
4307 I2bv(DstMem
| SrcAcc
| Mov
| MemAbs
| PageTable
, em_mov
),
4308 I2bv(SrcSI
| DstDI
| Mov
| String
| TwoMemOp
, em_mov
),
4309 F2bv(SrcSI
| DstDI
| String
| NoWrite
| TwoMemOp
, em_cmp_r
),
4311 F2bv(DstAcc
| SrcImm
| NoWrite
, em_test
),
4312 I2bv(SrcAcc
| DstDI
| Mov
| String
, em_mov
),
4313 I2bv(SrcSI
| DstAcc
| Mov
| String
, em_mov
),
4314 F2bv(SrcAcc
| DstDI
| String
| NoWrite
, em_cmp_r
),
4316 X8(I(ByteOp
| DstReg
| SrcImm
| Mov
, em_mov
)),
4318 X8(I(DstReg
| SrcImm64
| Mov
, em_mov
)),
4320 G(ByteOp
| Src2ImmByte
, group2
), G(Src2ImmByte
, group2
),
4321 I(ImplicitOps
| NearBranch
| SrcImmU16
| IsBranch
, em_ret_near_imm
),
4322 I(ImplicitOps
| NearBranch
| IsBranch
, em_ret
),
4323 I(DstReg
| SrcMemFAddr
| ModRM
| No64
| Src2ES
, em_lseg
),
4324 I(DstReg
| SrcMemFAddr
| ModRM
| No64
| Src2DS
, em_lseg
),
4325 G(ByteOp
, group11
), G(0, group11
),
4327 I(Stack
| SrcImmU16
| Src2ImmByte
| IsBranch
, em_enter
),
4328 I(Stack
| IsBranch
, em_leave
),
4329 I(ImplicitOps
| SrcImmU16
| IsBranch
, em_ret_far_imm
),
4330 I(ImplicitOps
| IsBranch
, em_ret_far
),
4331 D(ImplicitOps
| IsBranch
), DI(SrcImmByte
| IsBranch
, intn
),
4332 D(ImplicitOps
| No64
| IsBranch
),
4333 II(ImplicitOps
| IsBranch
, em_iret
, iret
),
4335 G(Src2One
| ByteOp
, group2
), G(Src2One
, group2
),
4336 G(Src2CL
| ByteOp
, group2
), G(Src2CL
, group2
),
4337 I(DstAcc
| SrcImmUByte
| No64
, em_aam
),
4338 I(DstAcc
| SrcImmUByte
| No64
, em_aad
),
4339 F(DstAcc
| ByteOp
| No64
, em_salc
),
4340 I(DstAcc
| SrcXLat
| ByteOp
, em_mov
),
4342 N
, E(0, &escape_d9
), N
, E(0, &escape_db
), N
, E(0, &escape_dd
), N
, N
,
4344 X3(I(SrcImmByte
| NearBranch
| IsBranch
, em_loop
)),
4345 I(SrcImmByte
| NearBranch
| IsBranch
, em_jcxz
),
4346 I2bvIP(SrcImmUByte
| DstAcc
, em_in
, in
, check_perm_in
),
4347 I2bvIP(SrcAcc
| DstImmUByte
, em_out
, out
, check_perm_out
),
4349 I(SrcImm
| NearBranch
| IsBranch
, em_call
),
4350 D(SrcImm
| ImplicitOps
| NearBranch
| IsBranch
),
4351 I(SrcImmFAddr
| No64
| IsBranch
, em_jmp_far
),
4352 D(SrcImmByte
| ImplicitOps
| NearBranch
| IsBranch
),
4353 I2bvIP(SrcDX
| DstAcc
, em_in
, in
, check_perm_in
),
4354 I2bvIP(SrcAcc
| DstDX
, em_out
, out
, check_perm_out
),
4356 N
, DI(ImplicitOps
, icebp
), N
, N
,
4357 DI(ImplicitOps
| Priv
, hlt
), D(ImplicitOps
),
4358 G(ByteOp
, group3
), G(0, group3
),
4360 D(ImplicitOps
), D(ImplicitOps
),
4361 I(ImplicitOps
, em_cli
), I(ImplicitOps
, em_sti
),
4362 D(ImplicitOps
), D(ImplicitOps
), G(0, group4
), G(0, group5
),
4365 static const struct opcode twobyte_table
[256] = {
4367 G(0, group6
), GD(0, &group7
), N
, N
,
4368 N
, I(ImplicitOps
| EmulateOnUD
| IsBranch
, em_syscall
),
4369 II(ImplicitOps
| Priv
, em_clts
, clts
), N
,
4370 DI(ImplicitOps
| Priv
, invd
), DI(ImplicitOps
| Priv
, wbinvd
), N
, N
,
4371 N
, D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), N
, N
,
4373 GP(ModRM
| DstReg
| SrcMem
| Mov
| Sse
, &pfx_0f_10_0f_11
),
4374 GP(ModRM
| DstMem
| SrcReg
| Mov
| Sse
, &pfx_0f_10_0f_11
),
4376 D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), /* 4 * prefetch + 4 * reserved NOP */
4377 D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), N
, N
,
4378 D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), /* 8 * reserved NOP */
4379 D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), /* 8 * reserved NOP */
4380 D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), /* 8 * reserved NOP */
4381 D(ImplicitOps
| ModRM
| SrcMem
| NoAccess
), /* NOP + 7 * reserved NOP */
4383 DIP(ModRM
| DstMem
| Priv
| Op3264
| NoMod
, cr_read
, check_cr_access
),
4384 DIP(ModRM
| DstMem
| Priv
| Op3264
| NoMod
, dr_read
, check_dr_read
),
4385 IIP(ModRM
| SrcMem
| Priv
| Op3264
| NoMod
, em_cr_write
, cr_write
,
4387 IIP(ModRM
| SrcMem
| Priv
| Op3264
| NoMod
, em_dr_write
, dr_write
,
4390 GP(ModRM
| DstReg
| SrcMem
| Mov
| Sse
, &pfx_0f_28_0f_29
),
4391 GP(ModRM
| DstMem
| SrcReg
| Mov
| Sse
, &pfx_0f_28_0f_29
),
4392 N
, GP(ModRM
| DstMem
| SrcReg
| Mov
| Sse
, &pfx_0f_2b
),
4395 II(ImplicitOps
| Priv
, em_wrmsr
, wrmsr
),
4396 IIP(ImplicitOps
, em_rdtsc
, rdtsc
, check_rdtsc
),
4397 II(ImplicitOps
| Priv
, em_rdmsr
, rdmsr
),
4398 IIP(ImplicitOps
, em_rdpmc
, rdpmc
, check_rdpmc
),
4399 I(ImplicitOps
| EmulateOnUD
| IsBranch
, em_sysenter
),
4400 I(ImplicitOps
| Priv
| EmulateOnUD
| IsBranch
, em_sysexit
),
4402 N
, N
, N
, N
, N
, N
, N
, N
,
4404 X16(D(DstReg
| SrcMem
| ModRM
)),
4406 N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
,
4411 N
, N
, N
, GP(SrcMem
| DstReg
| ModRM
| Mov
, &pfx_0f_6f_0f_7f
),
4416 N
, N
, N
, GP(SrcReg
| DstMem
| ModRM
| Mov
, &pfx_0f_6f_0f_7f
),
4418 X16(D(SrcImm
| NearBranch
| IsBranch
)),
4420 X16(D(ByteOp
| DstMem
| SrcNone
| ModRM
| Mov
)),
4422 I(Stack
| Src2FS
, em_push_sreg
), I(Stack
| Src2FS
, em_pop_sreg
),
4423 II(ImplicitOps
, em_cpuid
, cpuid
),
4424 F(DstMem
| SrcReg
| ModRM
| BitOp
| NoWrite
, em_bt
),
4425 F(DstMem
| SrcReg
| Src2ImmByte
| ModRM
, em_shld
),
4426 F(DstMem
| SrcReg
| Src2CL
| ModRM
, em_shld
), N
, N
,
4428 I(Stack
| Src2GS
, em_push_sreg
), I(Stack
| Src2GS
, em_pop_sreg
),
4429 II(EmulateOnUD
| ImplicitOps
, em_rsm
, rsm
),
4430 F(DstMem
| SrcReg
| ModRM
| BitOp
| Lock
| PageTable
, em_bts
),
4431 F(DstMem
| SrcReg
| Src2ImmByte
| ModRM
, em_shrd
),
4432 F(DstMem
| SrcReg
| Src2CL
| ModRM
, em_shrd
),
4433 GD(0, &group15
), F(DstReg
| SrcMem
| ModRM
, em_imul
),
4435 I2bv(DstMem
| SrcReg
| ModRM
| Lock
| PageTable
| SrcWrite
, em_cmpxchg
),
4436 I(DstReg
| SrcMemFAddr
| ModRM
| Src2SS
, em_lseg
),
4437 F(DstMem
| SrcReg
| ModRM
| BitOp
| Lock
, em_btr
),
4438 I(DstReg
| SrcMemFAddr
| ModRM
| Src2FS
, em_lseg
),
4439 I(DstReg
| SrcMemFAddr
| ModRM
| Src2GS
, em_lseg
),
4440 D(DstReg
| SrcMem8
| ModRM
| Mov
), D(DstReg
| SrcMem16
| ModRM
| Mov
),
4444 F(DstMem
| SrcReg
| ModRM
| BitOp
| Lock
| PageTable
, em_btc
),
4445 I(DstReg
| SrcMem
| ModRM
, em_bsf_c
),
4446 I(DstReg
| SrcMem
| ModRM
, em_bsr_c
),
4447 D(DstReg
| SrcMem8
| ModRM
| Mov
), D(DstReg
| SrcMem16
| ModRM
| Mov
),
4449 F2bv(DstMem
| SrcReg
| ModRM
| SrcWrite
| Lock
, em_xadd
),
4450 N
, ID(0, &instr_dual_0f_c3
),
4451 N
, N
, N
, GD(0, &group9
),
4453 X8(I(DstReg
, em_bswap
)),
4455 N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
,
4457 N
, N
, N
, N
, N
, N
, N
, GP(SrcReg
| DstMem
| ModRM
| Mov
, &pfx_0f_e7
),
4458 N
, N
, N
, N
, N
, N
, N
, N
,
4460 N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
, N
4463 static const struct instr_dual instr_dual_0f_38_f0
= {
4464 I(DstReg
| SrcMem
| Mov
, em_movbe
), N
4467 static const struct instr_dual instr_dual_0f_38_f1
= {
4468 I(DstMem
| SrcReg
| Mov
, em_movbe
), N
4471 static const struct gprefix three_byte_0f_38_f0
= {
4472 ID(0, &instr_dual_0f_38_f0
), ID(0, &instr_dual_0f_38_f0
), N
, N
4475 static const struct gprefix three_byte_0f_38_f1
= {
4476 ID(0, &instr_dual_0f_38_f1
), ID(0, &instr_dual_0f_38_f1
), N
, N
4480 * Insns below are selected by the prefix which indexed by the third opcode
4483 static const struct opcode opcode_map_0f_38
[256] = {
4485 X16(N
), X16(N
), X16(N
), X16(N
), X16(N
), X16(N
), X16(N
), X16(N
),
4487 X16(N
), X16(N
), X16(N
), X16(N
), X16(N
), X16(N
), X16(N
),
4489 GP(EmulateOnUD
| ModRM
, &three_byte_0f_38_f0
),
4490 GP(EmulateOnUD
| ModRM
, &three_byte_0f_38_f1
),
4511 static unsigned imm_size(struct x86_emulate_ctxt
*ctxt
)
4515 size
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
4521 static int decode_imm(struct x86_emulate_ctxt
*ctxt
, struct operand
*op
,
4522 unsigned size
, bool sign_extension
)
4524 int rc
= X86EMUL_CONTINUE
;
4528 op
->addr
.mem
.ea
= ctxt
->_eip
;
4529 /* NB. Immediates are sign-extended as necessary. */
4530 switch (op
->bytes
) {
4532 op
->val
= insn_fetch(s8
, ctxt
);
4535 op
->val
= insn_fetch(s16
, ctxt
);
4538 op
->val
= insn_fetch(s32
, ctxt
);
4541 op
->val
= insn_fetch(s64
, ctxt
);
4544 if (!sign_extension
) {
4545 switch (op
->bytes
) {
4553 op
->val
&= 0xffffffff;
4561 static int decode_operand(struct x86_emulate_ctxt
*ctxt
, struct operand
*op
,
4564 int rc
= X86EMUL_CONTINUE
;
4568 decode_register_operand(ctxt
, op
);
4571 rc
= decode_imm(ctxt
, op
, 1, false);
4574 ctxt
->memop
.bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
4578 if (ctxt
->d
& BitOp
)
4579 fetch_bit_operand(ctxt
);
4580 op
->orig_val
= op
->val
;
4583 ctxt
->memop
.bytes
= (ctxt
->op_bytes
== 8) ? 16 : 8;
4587 op
->bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
4588 op
->addr
.reg
= reg_rmw(ctxt
, VCPU_REGS_RAX
);
4589 fetch_register_operand(op
);
4590 op
->orig_val
= op
->val
;
4594 op
->bytes
= (ctxt
->d
& ByteOp
) ? 2 : ctxt
->op_bytes
;
4595 op
->addr
.reg
= reg_rmw(ctxt
, VCPU_REGS_RAX
);
4596 fetch_register_operand(op
);
4597 op
->orig_val
= op
->val
;
4600 if (ctxt
->d
& ByteOp
) {
4605 op
->bytes
= ctxt
->op_bytes
;
4606 op
->addr
.reg
= reg_rmw(ctxt
, VCPU_REGS_RDX
);
4607 fetch_register_operand(op
);
4608 op
->orig_val
= op
->val
;
4612 op
->bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
4614 register_address(ctxt
, VCPU_REGS_RDI
);
4615 op
->addr
.mem
.seg
= VCPU_SREG_ES
;
4622 op
->addr
.reg
= reg_rmw(ctxt
, VCPU_REGS_RDX
);
4623 fetch_register_operand(op
);
4628 op
->val
= reg_read(ctxt
, VCPU_REGS_RCX
) & 0xff;
4631 rc
= decode_imm(ctxt
, op
, 1, true);
4639 rc
= decode_imm(ctxt
, op
, imm_size(ctxt
), true);
4642 rc
= decode_imm(ctxt
, op
, ctxt
->op_bytes
, true);
4645 ctxt
->memop
.bytes
= 1;
4646 if (ctxt
->memop
.type
== OP_REG
) {
4647 ctxt
->memop
.addr
.reg
= decode_register(ctxt
,
4648 ctxt
->modrm_rm
, true);
4649 fetch_register_operand(&ctxt
->memop
);
4653 ctxt
->memop
.bytes
= 2;
4656 ctxt
->memop
.bytes
= 4;
4659 rc
= decode_imm(ctxt
, op
, 2, false);
4662 rc
= decode_imm(ctxt
, op
, imm_size(ctxt
), false);
4666 op
->bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
4668 register_address(ctxt
, VCPU_REGS_RSI
);
4669 op
->addr
.mem
.seg
= ctxt
->seg_override
;
4675 op
->bytes
= (ctxt
->d
& ByteOp
) ? 1 : ctxt
->op_bytes
;
4678 reg_read(ctxt
, VCPU_REGS_RBX
) +
4679 (reg_read(ctxt
, VCPU_REGS_RAX
) & 0xff));
4680 op
->addr
.mem
.seg
= ctxt
->seg_override
;
4685 op
->addr
.mem
.ea
= ctxt
->_eip
;
4686 op
->bytes
= ctxt
->op_bytes
+ 2;
4687 insn_fetch_arr(op
->valptr
, op
->bytes
, ctxt
);
4690 ctxt
->memop
.bytes
= ctxt
->op_bytes
+ 2;
4694 op
->val
= VCPU_SREG_ES
;
4698 op
->val
= VCPU_SREG_CS
;
4702 op
->val
= VCPU_SREG_SS
;
4706 op
->val
= VCPU_SREG_DS
;
4710 op
->val
= VCPU_SREG_FS
;
4714 op
->val
= VCPU_SREG_GS
;
4717 /* Special instructions do their own operand decoding. */
4719 op
->type
= OP_NONE
; /* Disable writeback. */
4727 int x86_decode_insn(struct x86_emulate_ctxt
*ctxt
, void *insn
, int insn_len
, int emulation_type
)
4729 int rc
= X86EMUL_CONTINUE
;
4730 int mode
= ctxt
->mode
;
4731 int def_op_bytes
, def_ad_bytes
, goffset
, simd_prefix
;
4732 bool op_prefix
= false;
4733 bool has_seg_override
= false;
4734 struct opcode opcode
;
4736 struct desc_struct desc
;
4738 ctxt
->memop
.type
= OP_NONE
;
4739 ctxt
->memopp
= NULL
;
4740 ctxt
->_eip
= ctxt
->eip
;
4741 ctxt
->fetch
.ptr
= ctxt
->fetch
.data
;
4742 ctxt
->fetch
.end
= ctxt
->fetch
.data
+ insn_len
;
4743 ctxt
->opcode_len
= 1;
4744 ctxt
->intercept
= x86_intercept_none
;
4746 memcpy(ctxt
->fetch
.data
, insn
, insn_len
);
4748 rc
= __do_insn_fetch_bytes(ctxt
, 1);
4749 if (rc
!= X86EMUL_CONTINUE
)
4754 case X86EMUL_MODE_REAL
:
4755 case X86EMUL_MODE_VM86
:
4756 def_op_bytes
= def_ad_bytes
= 2;
4757 ctxt
->ops
->get_segment(ctxt
, &dummy
, &desc
, NULL
, VCPU_SREG_CS
);
4759 def_op_bytes
= def_ad_bytes
= 4;
4761 case X86EMUL_MODE_PROT16
:
4762 def_op_bytes
= def_ad_bytes
= 2;
4764 case X86EMUL_MODE_PROT32
:
4765 def_op_bytes
= def_ad_bytes
= 4;
4767 #ifdef CONFIG_X86_64
4768 case X86EMUL_MODE_PROT64
:
4774 return EMULATION_FAILED
;
4777 ctxt
->op_bytes
= def_op_bytes
;
4778 ctxt
->ad_bytes
= def_ad_bytes
;
4780 /* Legacy prefixes. */
4782 switch (ctxt
->b
= insn_fetch(u8
, ctxt
)) {
4783 case 0x66: /* operand-size override */
4785 /* switch between 2/4 bytes */
4786 ctxt
->op_bytes
= def_op_bytes
^ 6;
4788 case 0x67: /* address-size override */
4789 if (mode
== X86EMUL_MODE_PROT64
)
4790 /* switch between 4/8 bytes */
4791 ctxt
->ad_bytes
= def_ad_bytes
^ 12;
4793 /* switch between 2/4 bytes */
4794 ctxt
->ad_bytes
= def_ad_bytes
^ 6;
4796 case 0x26: /* ES override */
4797 has_seg_override
= true;
4798 ctxt
->seg_override
= VCPU_SREG_ES
;
4800 case 0x2e: /* CS override */
4801 has_seg_override
= true;
4802 ctxt
->seg_override
= VCPU_SREG_CS
;
4804 case 0x36: /* SS override */
4805 has_seg_override
= true;
4806 ctxt
->seg_override
= VCPU_SREG_SS
;
4808 case 0x3e: /* DS override */
4809 has_seg_override
= true;
4810 ctxt
->seg_override
= VCPU_SREG_DS
;
4812 case 0x64: /* FS override */
4813 has_seg_override
= true;
4814 ctxt
->seg_override
= VCPU_SREG_FS
;
4816 case 0x65: /* GS override */
4817 has_seg_override
= true;
4818 ctxt
->seg_override
= VCPU_SREG_GS
;
4820 case 0x40 ... 0x4f: /* REX */
4821 if (mode
!= X86EMUL_MODE_PROT64
)
4823 ctxt
->rex_prefix
= ctxt
->b
;
4825 case 0xf0: /* LOCK */
4826 ctxt
->lock_prefix
= 1;
4828 case 0xf2: /* REPNE/REPNZ */
4829 case 0xf3: /* REP/REPE/REPZ */
4830 ctxt
->rep_prefix
= ctxt
->b
;
4836 /* Any legacy prefix after a REX prefix nullifies its effect. */
4838 ctxt
->rex_prefix
= 0;
4844 if (ctxt
->rex_prefix
& 8)
4845 ctxt
->op_bytes
= 8; /* REX.W */
4847 /* Opcode byte(s). */
4848 opcode
= opcode_table
[ctxt
->b
];
4849 /* Two-byte opcode? */
4850 if (ctxt
->b
== 0x0f) {
4851 ctxt
->opcode_len
= 2;
4852 ctxt
->b
= insn_fetch(u8
, ctxt
);
4853 opcode
= twobyte_table
[ctxt
->b
];
4855 /* 0F_38 opcode map */
4856 if (ctxt
->b
== 0x38) {
4857 ctxt
->opcode_len
= 3;
4858 ctxt
->b
= insn_fetch(u8
, ctxt
);
4859 opcode
= opcode_map_0f_38
[ctxt
->b
];
4862 ctxt
->d
= opcode
.flags
;
4864 if (ctxt
->d
& ModRM
)
4865 ctxt
->modrm
= insn_fetch(u8
, ctxt
);
4867 /* vex-prefix instructions are not implemented */
4868 if (ctxt
->opcode_len
== 1 && (ctxt
->b
== 0xc5 || ctxt
->b
== 0xc4) &&
4869 (mode
== X86EMUL_MODE_PROT64
|| (ctxt
->modrm
& 0xc0) == 0xc0)) {
4873 while (ctxt
->d
& GroupMask
) {
4874 switch (ctxt
->d
& GroupMask
) {
4876 goffset
= (ctxt
->modrm
>> 3) & 7;
4877 opcode
= opcode
.u
.group
[goffset
];
4880 goffset
= (ctxt
->modrm
>> 3) & 7;
4881 if ((ctxt
->modrm
>> 6) == 3)
4882 opcode
= opcode
.u
.gdual
->mod3
[goffset
];
4884 opcode
= opcode
.u
.gdual
->mod012
[goffset
];
4887 goffset
= ctxt
->modrm
& 7;
4888 opcode
= opcode
.u
.group
[goffset
];
4891 if (ctxt
->rep_prefix
&& op_prefix
)
4892 return EMULATION_FAILED
;
4893 simd_prefix
= op_prefix
? 0x66 : ctxt
->rep_prefix
;
4894 switch (simd_prefix
) {
4895 case 0x00: opcode
= opcode
.u
.gprefix
->pfx_no
; break;
4896 case 0x66: opcode
= opcode
.u
.gprefix
->pfx_66
; break;
4897 case 0xf2: opcode
= opcode
.u
.gprefix
->pfx_f2
; break;
4898 case 0xf3: opcode
= opcode
.u
.gprefix
->pfx_f3
; break;
4902 if (ctxt
->modrm
> 0xbf) {
4903 size_t size
= ARRAY_SIZE(opcode
.u
.esc
->high
);
4904 u32 index
= array_index_nospec(
4905 ctxt
->modrm
- 0xc0, size
);
4907 opcode
= opcode
.u
.esc
->high
[index
];
4909 opcode
= opcode
.u
.esc
->op
[(ctxt
->modrm
>> 3) & 7];
4913 if ((ctxt
->modrm
>> 6) == 3)
4914 opcode
= opcode
.u
.idual
->mod3
;
4916 opcode
= opcode
.u
.idual
->mod012
;
4919 if (ctxt
->mode
== X86EMUL_MODE_PROT64
)
4920 opcode
= opcode
.u
.mdual
->mode64
;
4922 opcode
= opcode
.u
.mdual
->mode32
;
4925 return EMULATION_FAILED
;
4928 ctxt
->d
&= ~(u64
)GroupMask
;
4929 ctxt
->d
|= opcode
.flags
;
4932 ctxt
->is_branch
= opcode
.flags
& IsBranch
;
4936 return EMULATION_FAILED
;
4938 ctxt
->execute
= opcode
.u
.execute
;
4940 if (unlikely(emulation_type
& EMULTYPE_TRAP_UD
) &&
4941 likely(!(ctxt
->d
& EmulateOnUD
)))
4942 return EMULATION_FAILED
;
4944 if (unlikely(ctxt
->d
&
4945 (NotImpl
|Stack
|Op3264
|Sse
|Mmx
|Intercept
|CheckPerm
|NearBranch
|
4948 * These are copied unconditionally here, and checked unconditionally
4949 * in x86_emulate_insn.
4951 ctxt
->check_perm
= opcode
.check_perm
;
4952 ctxt
->intercept
= opcode
.intercept
;
4954 if (ctxt
->d
& NotImpl
)
4955 return EMULATION_FAILED
;
4957 if (mode
== X86EMUL_MODE_PROT64
) {
4958 if (ctxt
->op_bytes
== 4 && (ctxt
->d
& Stack
))
4960 else if (ctxt
->d
& NearBranch
)
4964 if (ctxt
->d
& Op3264
) {
4965 if (mode
== X86EMUL_MODE_PROT64
)
4971 if ((ctxt
->d
& No16
) && ctxt
->op_bytes
== 2)
4975 ctxt
->op_bytes
= 16;
4976 else if (ctxt
->d
& Mmx
)
4980 /* ModRM and SIB bytes. */
4981 if (ctxt
->d
& ModRM
) {
4982 rc
= decode_modrm(ctxt
, &ctxt
->memop
);
4983 if (!has_seg_override
) {
4984 has_seg_override
= true;
4985 ctxt
->seg_override
= ctxt
->modrm_seg
;
4987 } else if (ctxt
->d
& MemAbs
)
4988 rc
= decode_abs(ctxt
, &ctxt
->memop
);
4989 if (rc
!= X86EMUL_CONTINUE
)
4992 if (!has_seg_override
)
4993 ctxt
->seg_override
= VCPU_SREG_DS
;
4995 ctxt
->memop
.addr
.mem
.seg
= ctxt
->seg_override
;
4998 * Decode and fetch the source operand: register, memory
5001 rc
= decode_operand(ctxt
, &ctxt
->src
, (ctxt
->d
>> SrcShift
) & OpMask
);
5002 if (rc
!= X86EMUL_CONTINUE
)
5006 * Decode and fetch the second source operand: register, memory
5009 rc
= decode_operand(ctxt
, &ctxt
->src2
, (ctxt
->d
>> Src2Shift
) & OpMask
);
5010 if (rc
!= X86EMUL_CONTINUE
)
5013 /* Decode and fetch the destination operand: register or memory. */
5014 rc
= decode_operand(ctxt
, &ctxt
->dst
, (ctxt
->d
>> DstShift
) & OpMask
);
5016 if (ctxt
->rip_relative
&& likely(ctxt
->memopp
))
5017 ctxt
->memopp
->addr
.mem
.ea
= address_mask(ctxt
,
5018 ctxt
->memopp
->addr
.mem
.ea
+ ctxt
->_eip
);
5021 if (rc
== X86EMUL_PROPAGATE_FAULT
)
5022 ctxt
->have_exception
= true;
5023 return (rc
!= X86EMUL_CONTINUE
) ? EMULATION_FAILED
: EMULATION_OK
;
5026 bool x86_page_table_writing_insn(struct x86_emulate_ctxt
*ctxt
)
5028 return ctxt
->d
& PageTable
;
5031 static bool string_insn_completed(struct x86_emulate_ctxt
*ctxt
)
5033 /* The second termination condition only applies for REPE
5034 * and REPNE. Test if the repeat string operation prefix is
5035 * REPE/REPZ or REPNE/REPNZ and if it's the case it tests the
5036 * corresponding termination condition according to:
5037 * - if REPE/REPZ and ZF = 0 then done
5038 * - if REPNE/REPNZ and ZF = 1 then done
5040 if (((ctxt
->b
== 0xa6) || (ctxt
->b
== 0xa7) ||
5041 (ctxt
->b
== 0xae) || (ctxt
->b
== 0xaf))
5042 && (((ctxt
->rep_prefix
== REPE_PREFIX
) &&
5043 ((ctxt
->eflags
& X86_EFLAGS_ZF
) == 0))
5044 || ((ctxt
->rep_prefix
== REPNE_PREFIX
) &&
5045 ((ctxt
->eflags
& X86_EFLAGS_ZF
) == X86_EFLAGS_ZF
))))
5051 static int flush_pending_x87_faults(struct x86_emulate_ctxt
*ctxt
)
5056 rc
= asm_safe("fwait");
5059 if (unlikely(rc
!= X86EMUL_CONTINUE
))
5060 return emulate_exception(ctxt
, MF_VECTOR
, 0, false);
5062 return X86EMUL_CONTINUE
;
5065 static void fetch_possible_mmx_operand(struct operand
*op
)
5067 if (op
->type
== OP_MM
)
5068 kvm_read_mmx_reg(op
->addr
.mm
, &op
->mm_val
);
5071 static int fastop(struct x86_emulate_ctxt
*ctxt
, fastop_t fop
)
5073 ulong flags
= (ctxt
->eflags
& EFLAGS_MASK
) | X86_EFLAGS_IF
;
5075 if (!(ctxt
->d
& ByteOp
))
5076 fop
+= __ffs(ctxt
->dst
.bytes
) * FASTOP_SIZE
;
5078 asm("push %[flags]; popf; " CALL_NOSPEC
" ; pushf; pop %[flags]\n"
5079 : "+a"(ctxt
->dst
.val
), "+d"(ctxt
->src
.val
), [flags
]"+D"(flags
),
5080 [thunk_target
]"+S"(fop
), ASM_CALL_CONSTRAINT
5081 : "c"(ctxt
->src2
.val
));
5083 ctxt
->eflags
= (ctxt
->eflags
& ~EFLAGS_MASK
) | (flags
& EFLAGS_MASK
);
5084 if (!fop
) /* exception is returned in fop variable */
5085 return emulate_de(ctxt
);
5086 return X86EMUL_CONTINUE
;
5089 void init_decode_cache(struct x86_emulate_ctxt
*ctxt
)
5091 /* Clear fields that are set conditionally but read without a guard. */
5092 ctxt
->rip_relative
= false;
5093 ctxt
->rex_prefix
= 0;
5094 ctxt
->lock_prefix
= 0;
5095 ctxt
->rep_prefix
= 0;
5096 ctxt
->regs_valid
= 0;
5097 ctxt
->regs_dirty
= 0;
5099 ctxt
->io_read
.pos
= 0;
5100 ctxt
->io_read
.end
= 0;
5101 ctxt
->mem_read
.end
= 0;
5104 int x86_emulate_insn(struct x86_emulate_ctxt
*ctxt
)
5106 const struct x86_emulate_ops
*ops
= ctxt
->ops
;
5107 int rc
= X86EMUL_CONTINUE
;
5108 int saved_dst_type
= ctxt
->dst
.type
;
5109 bool is_guest_mode
= ctxt
->ops
->is_guest_mode(ctxt
);
5111 ctxt
->mem_read
.pos
= 0;
5113 /* LOCK prefix is allowed only with some instructions */
5114 if (ctxt
->lock_prefix
&& (!(ctxt
->d
& Lock
) || ctxt
->dst
.type
!= OP_MEM
)) {
5115 rc
= emulate_ud(ctxt
);
5119 if ((ctxt
->d
& SrcMask
) == SrcMemFAddr
&& ctxt
->src
.type
!= OP_MEM
) {
5120 rc
= emulate_ud(ctxt
);
5124 if (unlikely(ctxt
->d
&
5125 (No64
|Undefined
|Sse
|Mmx
|Intercept
|CheckPerm
|Priv
|Prot
|String
))) {
5126 if ((ctxt
->mode
== X86EMUL_MODE_PROT64
&& (ctxt
->d
& No64
)) ||
5127 (ctxt
->d
& Undefined
)) {
5128 rc
= emulate_ud(ctxt
);
5132 if (((ctxt
->d
& (Sse
|Mmx
)) && ((ops
->get_cr(ctxt
, 0) & X86_CR0_EM
)))
5133 || ((ctxt
->d
& Sse
) && !(ops
->get_cr(ctxt
, 4) & X86_CR4_OSFXSR
))) {
5134 rc
= emulate_ud(ctxt
);
5138 if ((ctxt
->d
& (Sse
|Mmx
)) && (ops
->get_cr(ctxt
, 0) & X86_CR0_TS
)) {
5139 rc
= emulate_nm(ctxt
);
5143 if (ctxt
->d
& Mmx
) {
5144 rc
= flush_pending_x87_faults(ctxt
);
5145 if (rc
!= X86EMUL_CONTINUE
)
5148 * Now that we know the fpu is exception safe, we can fetch
5151 fetch_possible_mmx_operand(&ctxt
->src
);
5152 fetch_possible_mmx_operand(&ctxt
->src2
);
5153 if (!(ctxt
->d
& Mov
))
5154 fetch_possible_mmx_operand(&ctxt
->dst
);
5157 if (unlikely(is_guest_mode
) && ctxt
->intercept
) {
5158 rc
= emulator_check_intercept(ctxt
, ctxt
->intercept
,
5159 X86_ICPT_PRE_EXCEPT
);
5160 if (rc
!= X86EMUL_CONTINUE
)
5164 /* Instruction can only be executed in protected mode */
5165 if ((ctxt
->d
& Prot
) && ctxt
->mode
< X86EMUL_MODE_PROT16
) {
5166 rc
= emulate_ud(ctxt
);
5170 /* Privileged instruction can be executed only in CPL=0 */
5171 if ((ctxt
->d
& Priv
) && ops
->cpl(ctxt
)) {
5172 if (ctxt
->d
& PrivUD
)
5173 rc
= emulate_ud(ctxt
);
5175 rc
= emulate_gp(ctxt
, 0);
5179 /* Do instruction specific permission checks */
5180 if (ctxt
->d
& CheckPerm
) {
5181 rc
= ctxt
->check_perm(ctxt
);
5182 if (rc
!= X86EMUL_CONTINUE
)
5186 if (unlikely(is_guest_mode
) && (ctxt
->d
& Intercept
)) {
5187 rc
= emulator_check_intercept(ctxt
, ctxt
->intercept
,
5188 X86_ICPT_POST_EXCEPT
);
5189 if (rc
!= X86EMUL_CONTINUE
)
5193 if (ctxt
->rep_prefix
&& (ctxt
->d
& String
)) {
5194 /* All REP prefixes have the same first termination condition */
5195 if (address_mask(ctxt
, reg_read(ctxt
, VCPU_REGS_RCX
)) == 0) {
5196 string_registers_quirk(ctxt
);
5197 ctxt
->eip
= ctxt
->_eip
;
5198 ctxt
->eflags
&= ~X86_EFLAGS_RF
;
5204 if ((ctxt
->src
.type
== OP_MEM
) && !(ctxt
->d
& NoAccess
)) {
5205 rc
= segmented_read(ctxt
, ctxt
->src
.addr
.mem
,
5206 ctxt
->src
.valptr
, ctxt
->src
.bytes
);
5207 if (rc
!= X86EMUL_CONTINUE
)
5209 ctxt
->src
.orig_val64
= ctxt
->src
.val64
;
5212 if (ctxt
->src2
.type
== OP_MEM
) {
5213 rc
= segmented_read(ctxt
, ctxt
->src2
.addr
.mem
,
5214 &ctxt
->src2
.val
, ctxt
->src2
.bytes
);
5215 if (rc
!= X86EMUL_CONTINUE
)
5219 if ((ctxt
->d
& DstMask
) == ImplicitOps
)
5223 if ((ctxt
->dst
.type
== OP_MEM
) && !(ctxt
->d
& Mov
)) {
5224 /* optimisation - avoid slow emulated read if Mov */
5225 rc
= segmented_read(ctxt
, ctxt
->dst
.addr
.mem
,
5226 &ctxt
->dst
.val
, ctxt
->dst
.bytes
);
5227 if (rc
!= X86EMUL_CONTINUE
) {
5228 if (!(ctxt
->d
& NoWrite
) &&
5229 rc
== X86EMUL_PROPAGATE_FAULT
&&
5230 ctxt
->exception
.vector
== PF_VECTOR
)
5231 ctxt
->exception
.error_code
|= PFERR_WRITE_MASK
;
5235 /* Copy full 64-bit value for CMPXCHG8B. */
5236 ctxt
->dst
.orig_val64
= ctxt
->dst
.val64
;
5240 if (unlikely(is_guest_mode
) && (ctxt
->d
& Intercept
)) {
5241 rc
= emulator_check_intercept(ctxt
, ctxt
->intercept
,
5242 X86_ICPT_POST_MEMACCESS
);
5243 if (rc
!= X86EMUL_CONTINUE
)
5247 if (ctxt
->rep_prefix
&& (ctxt
->d
& String
))
5248 ctxt
->eflags
|= X86_EFLAGS_RF
;
5250 ctxt
->eflags
&= ~X86_EFLAGS_RF
;
5252 if (ctxt
->execute
) {
5253 if (ctxt
->d
& Fastop
)
5254 rc
= fastop(ctxt
, ctxt
->fop
);
5256 rc
= ctxt
->execute(ctxt
);
5257 if (rc
!= X86EMUL_CONTINUE
)
5262 if (ctxt
->opcode_len
== 2)
5264 else if (ctxt
->opcode_len
== 3)
5265 goto threebyte_insn
;
5268 case 0x70 ... 0x7f: /* jcc (short) */
5269 if (test_cc(ctxt
->b
, ctxt
->eflags
))
5270 rc
= jmp_rel(ctxt
, ctxt
->src
.val
);
5272 case 0x8d: /* lea r16/r32, m */
5273 ctxt
->dst
.val
= ctxt
->src
.addr
.mem
.ea
;
5275 case 0x90 ... 0x97: /* nop / xchg reg, rax */
5276 if (ctxt
->dst
.addr
.reg
== reg_rmw(ctxt
, VCPU_REGS_RAX
))
5277 ctxt
->dst
.type
= OP_NONE
;
5281 case 0x98: /* cbw/cwde/cdqe */
5282 switch (ctxt
->op_bytes
) {
5283 case 2: ctxt
->dst
.val
= (s8
)ctxt
->dst
.val
; break;
5284 case 4: ctxt
->dst
.val
= (s16
)ctxt
->dst
.val
; break;
5285 case 8: ctxt
->dst
.val
= (s32
)ctxt
->dst
.val
; break;
5288 case 0xcc: /* int3 */
5289 rc
= emulate_int(ctxt
, 3);
5291 case 0xcd: /* int n */
5292 rc
= emulate_int(ctxt
, ctxt
->src
.val
);
5294 case 0xce: /* into */
5295 if (ctxt
->eflags
& X86_EFLAGS_OF
)
5296 rc
= emulate_int(ctxt
, 4);
5298 case 0xe9: /* jmp rel */
5299 case 0xeb: /* jmp rel short */
5300 rc
= jmp_rel(ctxt
, ctxt
->src
.val
);
5301 ctxt
->dst
.type
= OP_NONE
; /* Disable writeback. */
5303 case 0xf4: /* hlt */
5304 ctxt
->ops
->halt(ctxt
);
5306 case 0xf5: /* cmc */
5307 /* complement carry flag from eflags reg */
5308 ctxt
->eflags
^= X86_EFLAGS_CF
;
5310 case 0xf8: /* clc */
5311 ctxt
->eflags
&= ~X86_EFLAGS_CF
;
5313 case 0xf9: /* stc */
5314 ctxt
->eflags
|= X86_EFLAGS_CF
;
5316 case 0xfc: /* cld */
5317 ctxt
->eflags
&= ~X86_EFLAGS_DF
;
5319 case 0xfd: /* std */
5320 ctxt
->eflags
|= X86_EFLAGS_DF
;
5323 goto cannot_emulate
;
5326 if (rc
!= X86EMUL_CONTINUE
)
5330 if (ctxt
->d
& SrcWrite
) {
5331 BUG_ON(ctxt
->src
.type
== OP_MEM
|| ctxt
->src
.type
== OP_MEM_STR
);
5332 rc
= writeback(ctxt
, &ctxt
->src
);
5333 if (rc
!= X86EMUL_CONTINUE
)
5336 if (!(ctxt
->d
& NoWrite
)) {
5337 rc
= writeback(ctxt
, &ctxt
->dst
);
5338 if (rc
!= X86EMUL_CONTINUE
)
5343 * restore dst type in case the decoding will be reused
5344 * (happens for string instruction )
5346 ctxt
->dst
.type
= saved_dst_type
;
5348 if ((ctxt
->d
& SrcMask
) == SrcSI
)
5349 string_addr_inc(ctxt
, VCPU_REGS_RSI
, &ctxt
->src
);
5351 if ((ctxt
->d
& DstMask
) == DstDI
)
5352 string_addr_inc(ctxt
, VCPU_REGS_RDI
, &ctxt
->dst
);
5354 if (ctxt
->rep_prefix
&& (ctxt
->d
& String
)) {
5356 struct read_cache
*r
= &ctxt
->io_read
;
5357 if ((ctxt
->d
& SrcMask
) == SrcSI
)
5358 count
= ctxt
->src
.count
;
5360 count
= ctxt
->dst
.count
;
5361 register_address_increment(ctxt
, VCPU_REGS_RCX
, -count
);
5363 if (!string_insn_completed(ctxt
)) {
5365 * Re-enter guest when pio read ahead buffer is empty
5366 * or, if it is not used, after each 1024 iteration.
5368 if ((r
->end
!= 0 || reg_read(ctxt
, VCPU_REGS_RCX
) & 0x3ff) &&
5369 (r
->end
== 0 || r
->end
!= r
->pos
)) {
5371 * Reset read cache. Usually happens before
5372 * decode, but since instruction is restarted
5373 * we have to do it here.
5375 ctxt
->mem_read
.end
= 0;
5376 writeback_registers(ctxt
);
5377 return EMULATION_RESTART
;
5379 goto done
; /* skip rip writeback */
5381 ctxt
->eflags
&= ~X86_EFLAGS_RF
;
5384 ctxt
->eip
= ctxt
->_eip
;
5385 if (ctxt
->mode
!= X86EMUL_MODE_PROT64
)
5386 ctxt
->eip
= (u32
)ctxt
->_eip
;
5389 if (rc
== X86EMUL_PROPAGATE_FAULT
) {
5390 if (KVM_EMULATOR_BUG_ON(ctxt
->exception
.vector
> 0x1f, ctxt
))
5391 return EMULATION_FAILED
;
5392 ctxt
->have_exception
= true;
5394 if (rc
== X86EMUL_INTERCEPTED
)
5395 return EMULATION_INTERCEPTED
;
5397 if (rc
== X86EMUL_CONTINUE
)
5398 writeback_registers(ctxt
);
5400 return (rc
== X86EMUL_UNHANDLEABLE
) ? EMULATION_FAILED
: EMULATION_OK
;
5404 case 0x09: /* wbinvd */
5405 (ctxt
->ops
->wbinvd
)(ctxt
);
5407 case 0x08: /* invd */
5408 case 0x0d: /* GrpP (prefetch) */
5409 case 0x18: /* Grp16 (prefetch/nop) */
5410 case 0x1f: /* nop */
5412 case 0x20: /* mov cr, reg */
5413 ctxt
->dst
.val
= ops
->get_cr(ctxt
, ctxt
->modrm_reg
);
5415 case 0x21: /* mov from dr to reg */
5416 ctxt
->dst
.val
= ops
->get_dr(ctxt
, ctxt
->modrm_reg
);
5418 case 0x40 ... 0x4f: /* cmov */
5419 if (test_cc(ctxt
->b
, ctxt
->eflags
))
5420 ctxt
->dst
.val
= ctxt
->src
.val
;
5421 else if (ctxt
->op_bytes
!= 4)
5422 ctxt
->dst
.type
= OP_NONE
; /* no writeback */
5424 case 0x80 ... 0x8f: /* jnz rel, etc*/
5425 if (test_cc(ctxt
->b
, ctxt
->eflags
))
5426 rc
= jmp_rel(ctxt
, ctxt
->src
.val
);
5428 case 0x90 ... 0x9f: /* setcc r/m8 */
5429 ctxt
->dst
.val
= test_cc(ctxt
->b
, ctxt
->eflags
);
5431 case 0xb6 ... 0xb7: /* movzx */
5432 ctxt
->dst
.bytes
= ctxt
->op_bytes
;
5433 ctxt
->dst
.val
= (ctxt
->src
.bytes
== 1) ? (u8
) ctxt
->src
.val
5434 : (u16
) ctxt
->src
.val
;
5436 case 0xbe ... 0xbf: /* movsx */
5437 ctxt
->dst
.bytes
= ctxt
->op_bytes
;
5438 ctxt
->dst
.val
= (ctxt
->src
.bytes
== 1) ? (s8
) ctxt
->src
.val
:
5439 (s16
) ctxt
->src
.val
;
5442 goto cannot_emulate
;
5447 if (rc
!= X86EMUL_CONTINUE
)
5453 return EMULATION_FAILED
;
5456 void emulator_invalidate_register_cache(struct x86_emulate_ctxt
*ctxt
)
5458 invalidate_registers(ctxt
);
5461 void emulator_writeback_register_cache(struct x86_emulate_ctxt
*ctxt
)
5463 writeback_registers(ctxt
);
5466 bool emulator_can_use_gpa(struct x86_emulate_ctxt
*ctxt
)
5468 if (ctxt
->rep_prefix
&& (ctxt
->d
& String
))
5471 if (ctxt
->d
& TwoMemOp
)