x86-64, espfix: Don't leak bits 31:16 of %esp returning to 16-bit stack
[firefly-linux-kernel-4.4.55.git] / arch / x86 / kvm / emulate.c
index 5953dcea752d08e950d62293abbdec94ae95f62b..5484d54582ca75e9eee093fa3f69996ac9bb9889 100644 (file)
@@ -4207,7 +4207,10 @@ static int decode_operand(struct x86_emulate_ctxt *ctxt, struct operand *op,
        case OpMem8:
                ctxt->memop.bytes = 1;
                if (ctxt->memop.type == OP_REG) {
-                       ctxt->memop.addr.reg = decode_register(ctxt, ctxt->modrm_rm, 1);
+                       int highbyte_regs = ctxt->rex_prefix == 0;
+
+                       ctxt->memop.addr.reg = decode_register(ctxt, ctxt->modrm_rm,
+                                              highbyte_regs);
                        fetch_register_operand(&ctxt->memop);
                }
                goto mem_common;