Received: by 10.223.164.221 with SMTP id h29csp1840462wrb; Thu, 2 Nov 2017 01:34:50 -0700 (PDT) X-Google-Smtp-Source: ABhQp+QsM8lJw++g5z8rJ1Jbr9wJu4iz6/H+UzWPStZU1hSsCpKux94oXJnC2RhxzCCsCWrERiAw X-Received: by 10.84.174.67 with SMTP id q61mr2507311plb.184.1509611690663; Thu, 02 Nov 2017 01:34:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1509611690; cv=none; d=google.com; s=arc-20160816; b=zci9n+l5zaoh/mZkZ5/W+3qfeKmKxIh+VSvNTsQMvBtiJjerDUqmNahspPCYIY+J3L WoDY9jWPS9UUC2Ayir2Dc1WXLoy0ELOuc2H9sNO6jl+lhqJ2BbI4XFmwl2omMa/nTrtk rJhzts3nLhINMPq3i3qh+g1KMqa533iHQAFBlyAy/qbHTKtHViPDvKPL/sOCPdxmz1QO 5EONIpWxE6KpQkMVUXx1djl5+2B+MN/X5UvcHCqkxFvIUDOUixKS27MB6faiR9MEED// uQZpB6GgzznoK/gN12QETIgSLxVcsdmo/bcXFNI4tYidTk9rJ6RijBr2VWL0ozuh/52S LLFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=F3E28woNz+KvFs7/jxv/lY/9XLgoDBigJud3RRm20U8=; b=aO5J8HyzQ1o04xM5zqOylXbj2iyINLQoKkQu7PXOfJFxa6BVOp3FbX1zcVBq7myAwq kRN5pr0uMFWRmBVjgJvmlEtjJum+tUOg58GZnDFl09lJviAH6zBvDgcHrVmBn2tgSAOa XHXDuUS9d7JrkY4Chf8nmHLR3I9Y6BvyXusznFGgf8VghdkxUmlCgOq0cj9ngqSqF/t0 j5skKpbNVcH1qY0d2QBEKirZ5FxETo4KBkA1/dWtoXi4Fat0o2lACzYd22T/2CuMn6EU j0aO65Qy8EkqGYleQZbhjsQ8c4YCgwkwVhPlGF9SELgQmSJuOwgp8fq/lJIewmcIKhAw zDqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qY8CTyuJ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i186si2972739pge.117.2017.11.02.01.34.37; Thu, 02 Nov 2017 01:34:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=qY8CTyuJ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755317AbdKBIbq (ORCPT + 99 others); Thu, 2 Nov 2017 04:31:46 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:51093 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752547AbdKBIbn (ORCPT ); Thu, 2 Nov 2017 04:31:43 -0400 Received: by mail-pf0-f196.google.com with SMTP id b6so4047630pfh.7; Thu, 02 Nov 2017 01:31:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=F3E28woNz+KvFs7/jxv/lY/9XLgoDBigJud3RRm20U8=; b=qY8CTyuJSfJR8BqZDD88ZCFkh4zulXFcvEceqwZfqSX/rAyqLbNhWig26mrf5gf9mK mDErXt6C0I/Cm5X+MhWpR1RRUlhIfmOUGNPOKuzuSH19Vw88w10vQjqw6DfWf33YSxTC n8MEnoJbxQcOQHo15YaBK8gwYt39l69yc4SidYXFT9u6rQ9ofePzzw9IZ/JDZhw/7vDm jo0EmvbySD7RqFq/vBE0ap6gBtJ7yrvOE9cGJmywkt0jvop3v45v2OpGQIhR4+Qma4Wg HGUGpe1j13wwYkt7NBj0HxjrrcFVf9jTo4gCPCI5YdwB7NeJTBh/cLbC2Ly9FWchkAwH WwmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=F3E28woNz+KvFs7/jxv/lY/9XLgoDBigJud3RRm20U8=; b=DP3quKemWaTBBWIICHMNcQwsWRv0SQhoifG1GAeyMiellHuEEcGrsz7kDm4T4/nMjP U6+s1xIEMoLc7tfaQkjO5Q2xkEWvX+9Y/dBpR7x24pptd8/fz1BvRgcdXpVOeRZVV8yl g5p5IMwWIANfKOWRGzX3h//1jHsCnD5GLIZMShGcUvpMoej5ApcyNqSAIsDVsXFOjEcV KRcfFzxvigRvMkAnvRgfwjbw6D8PiBMdmli7XdIPeLw3gU0HvHN9SLgr9vRykaDN584d 50eRZfP4GhD4PTr0jgVtEr5H9VX/Su6W9oqjtDQpOOcBniw3i+ovFfkay5sRU9i8mZMZ nnug== X-Gm-Message-State: AMCzsaW/n8Kg5TNfFHGRBsBbYUBiwaQbIIYQHPyh/WQFry92P1KXepqY E+qiBU1EUvJiT9PFsZT0AUP2bA== X-Received: by 10.99.97.147 with SMTP id v141mr2678391pgb.92.1509611502634; Thu, 02 Nov 2017 01:31:42 -0700 (PDT) Received: from localhost ([203.205.141.123]) by smtp.gmail.com with ESMTPSA id n3sm4307468pgp.61.2017.11.02.01.31.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 02 Nov 2017 01:31:42 -0700 (PDT) From: Wanpeng Li X-Google-Original-From: Wanpeng Li To: linux-kernel@vger.kernel.org, kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Wanpeng Li , Nadav Amit , Pedro Fonseca Subject: [PATCH v3 1/3] KVM: X86: Fix operand size during instruction decoding Date: Thu, 2 Nov 2017 01:31:37 -0700 Message-Id: <1509611499-9401-1-git-send-email-wanpeng.li@hotmail.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wanpeng Li Pedro reported: During tests that we conducted on KVM, we noticed that executing a "PUSH %ES" instruction under KVM produces different results on both memory and the SP register depending on whether EPT support is enabled. With EPT the SP is reduced by 4 bytes (and the written value is 0-padded) but without EPT support it is only reduced by 2 bytes. The difference can be observed when the CS.DB field is 1 (32-bit) but not when it's 0 (16-bit). The internal segment descriptor cache exist even in real/vm8096 mode. The CS.D also should be respected instead of just default operand-size/66H prefix during instruction decoding. This patch fixes it by also adjusting operand-size according to CS.D. Reported-by: Pedro Fonseca Tested-by: Pedro Fonseca Cc: Paolo Bonzini Cc: Radim Krčmář Cc: Nadav Amit Cc: Pedro Fonseca Signed-off-by: Wanpeng Li --- v2 -> v3: * cleanup the codes v1 -> v2: * respect cs.d for real/vm8096, other modes have already been considered in init_emulate_ctxt(). arch/x86/kvm/emulate.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c index 8079d14..6ebc4cb 100644 --- a/arch/x86/kvm/emulate.c +++ b/arch/x86/kvm/emulate.c @@ -5000,6 +5000,8 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) bool op_prefix = false; bool has_seg_override = false; struct opcode opcode; + u16 dummy; + struct desc_struct desc; ctxt->memop.type = OP_NONE; ctxt->memopp = NULL; @@ -5020,6 +5022,11 @@ int x86_decode_insn(struct x86_emulate_ctxt *ctxt, void *insn, int insn_len) case X86EMUL_MODE_VM86: case X86EMUL_MODE_PROT16: def_op_bytes = def_ad_bytes = 2; + if (mode < X86EMUL_MODE_PROT16) { + ctxt->ops->get_segment(ctxt, &dummy, &desc, NULL, VCPU_SREG_CS); + if (desc.d) + def_op_bytes = 4; + } break; case X86EMUL_MODE_PROT32: def_op_bytes = def_ad_bytes = 4; -- 2.7.4 From 1582915622519508071@xxx Thu Nov 02 01:26:14 +0000 2017 X-GM-THRID: 1582915622519508071 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread