Received: by 10.213.65.68 with SMTP id h4csp745610imn; Wed, 4 Apr 2018 06:37:28 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+UawRYQqT8Bp9gwLQ9WHQrmMumAUeIvEe548W9HoJWmCvmKqdtviSLaHWlmeyxN3tDYDz/ X-Received: by 2002:a17:902:102a:: with SMTP id b39-v6mr18777811pla.112.1522849048414; Wed, 04 Apr 2018 06:37:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522849048; cv=none; d=google.com; s=arc-20160816; b=o4ZZUjD6hoIohMvJtgbmMvNr82GNa6Ng3H03wlMJnYnxAk/moxqg6tTP03qOJ2ZrFX BC5C6UL61jo411tFdqRsoeWU1uKf3rKHHVR0uhegS6xmujNrtL71MFhlYEnx5I1TRMtZ FHSXddCBffn03eQHCKBWN7U+AKwDPo4tdiDdHQaMsQIwzjQNBzelJbzm9ctiOSSleNjH O2b4K1AYYp7qGd+SFGH+KbH/+0R/o1wAvZEofRLydWaxTLThfNjPywr4GT8/wQjKNXte JrStk6DOiviSWweSbJaU7lY4QzSs2UPDQEeM46U2eVf1dDvLxZM82hOvbFMz+AOGSlGK PWww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=ABWaATXEGBVlwfNqUK7YcH92+YfE9xyZ7QwaAcZXLaI=; b=C37kGlJ5hempe1pn3g42MRSbc5P+4IGz4tvu5MTYWUvRkEMBhQ87/1AKRQhvcpzmj2 mD2vhTc8wQB8+BkZFTeV58vNULvVrX4qVm9zYp0H7goK/gLCvA58ftqXaPLcvE/wGW0x bdyUH5cOQpi9n7bqTLR5nc5N4IY5eH9apBHe03RNgZlnICKhRNUae6TZc0De1P9Vh5nc RyIsOAFahxO3n/TLc5JvtabWLxdx+ix4drVpqET397w1kHVAxUYF5VvE2XuzQHOv0Dms /95C5VOw1mGR3R+rzPoQ/D8IyaWJDhoC+53k5lj5EUVFWd385gLiDEUjYbibErKC4coc lOeA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=NxZjV30a; 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=QUARANTINE 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 q10si3588555pgf.524.2018.04.04.06.37.14; Wed, 04 Apr 2018 06:37:28 -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=NxZjV30a; 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=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751251AbeDDNf7 (ORCPT + 99 others); Wed, 4 Apr 2018 09:35:59 -0400 Received: from mail-oi0-f68.google.com ([209.85.218.68]:43752 "EHLO mail-oi0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750842AbeDDNf5 (ORCPT ); Wed, 4 Apr 2018 09:35:57 -0400 Received: by mail-oi0-f68.google.com with SMTP id u84-v6so19227482oie.10; Wed, 04 Apr 2018 06:35:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ABWaATXEGBVlwfNqUK7YcH92+YfE9xyZ7QwaAcZXLaI=; b=NxZjV30aWVyMOfGfFlbfanN38vvvIQc5M0tWR7QAZg3SYDk/iFA42+gjO4BZIJ29RP w6C38go9kXoj4yVGT4QcuN9FXwbsnvK+g6LZ30iSVQQ9olmQPMGNaF6mMAP5sIYKOAKf wZzPu7kLWtELU/O+lJp9M2TgFMugwTQt7/LTxXnO8G9eOyPatrKCByzTshWFEMqk73bL zWvS3Qb5u6LsgsasiVths3TRKxEWck63sKRx34E9qe1t4AUVdlPFn107cbkQ+8ivsgAj a4vlrnm+3ylwH93sm0ony0RvKe5nvx6MjcuFbZABWJpjvjLcRM1QErcT45WAdwOoN4EI 6GBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ABWaATXEGBVlwfNqUK7YcH92+YfE9xyZ7QwaAcZXLaI=; b=HMe66Z3xFCs+4/QQpCwkkWywMSOTz3FKVv3AtY54RVhFM/5JJUGWERlsD43ig1PcLj MYoRDk88d3bCP3cL30OrOQfI3C5c9oskMgPAifc1gLyDm9NEIotYJfC58stv//hoXANU WMTN+zFVFaQaE8Jx0eoKtBe8d5X6fjxBys1RpBxmCkcBVF4x3Fm7Oc53fDzStCNIcrMw Jnie3Csgkp5ZcgNR5k2v3Pae5uI6/ydv7n5QFun1yv+2INrJEEEcBD2jkhDjWCY4Fn/c k5f8q8WggLQxHw4+j5w3YUDWfjmDebwPEDhP8Avlkgdnr5VjU7PYSP3UetZdKl3P1h05 ma4A== X-Gm-Message-State: ALQs6tBAcIyyeTDsae+zu+dyqwPZslkrpyRAlHsUNsIJJip1gsrgRacp GJGf+wEux5eRDyPZrur335KJZiMQRBGUg/5/8+4= X-Received: by 2002:aca:4f91:: with SMTP id d139-v6mr10562906oib.267.1522848957392; Wed, 04 Apr 2018 06:35:57 -0700 (PDT) MIME-Version: 1.0 Received: by 10.74.210.78 with HTTP; Wed, 4 Apr 2018 06:35:57 -0700 (PDT) In-Reply-To: <48d06146-f508-e883-72cb-881e043f9c72@redhat.com> References: <1522798129-14588-1-git-send-email-wanpengli@tencent.com> <1522798129-14588-3-git-send-email-wanpengli@tencent.com> <48d06146-f508-e883-72cb-881e043f9c72@redhat.com> From: Wanpeng Li Date: Wed, 4 Apr 2018 21:35:57 +0800 Message-ID: Subject: Re: [PATCH v5 2/2] KVM: X86: Add Force Emulation Prefix for "emulate the next instruction" To: David Hildenbrand Cc: LKML , kvm , Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Andrew Cooper , Konrad Rzeszutek Wilk , Liran Alon Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2018-04-04 19:59 GMT+08:00 David Hildenbrand : > >> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c >> index 1eb495e..a55ecef 100644 >> --- a/arch/x86/kvm/x86.c >> +++ b/arch/x86/kvm/x86.c >> @@ -146,6 +146,9 @@ bool __read_mostly enable_vmware_backdoor = false; >> module_param(enable_vmware_backdoor, bool, S_IRUGO); >> EXPORT_SYMBOL_GPL(enable_vmware_backdoor); >> >> +static bool __read_mostly force_emulation_prefix = false; >> +module_param(force_emulation_prefix, bool, S_IRUGO); >> + >> #define KVM_NR_SHARED_MSRS 16 >> >> struct kvm_shared_msrs_global { >> @@ -4844,6 +4847,21 @@ int handle_ud(struct kvm_vcpu *vcpu) >> { >> enum emulation_result er; >> >> + if (force_emulation_prefix) { >> + char sig[5]; /* ud2; .ascii "kvm" */ >> + struct x86_exception e; >> + >> + if (kvm_read_guest_virt(&vcpu->arch.emulate_ctxt, >> + kvm_get_linear_rip(vcpu), sig, sizeof(sig), &e)) >> + goto emulate_ud; >> + >> + if (memcmp(sig, "\xf\xbkvm", sizeof(sig)) == 0) { >> + kvm_rip_write(vcpu, kvm_rip_read(vcpu) + sizeof(sig)); >> + return emulate_instruction(vcpu, 0) == EMULATE_DONE; > > What if we would have an invalid instruction here? Shouldn't you handle > the emulate_instruction() like below? > (e.g. keep a variable with the emulation type (0 vs EMULTYPE_TRAP_UD) > and reuse emulate_ud below) emulate_instruction(vcpu, 0) can handle invalid instruction. Regards, Wanpeng Li