From patchwork Thu Sep 20 23:02:43 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 10608861 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id AA3E3112B for ; Thu, 20 Sep 2018 23:02:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9EEFD2E1A5 for ; Thu, 20 Sep 2018 23:02:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 925F42E1AE; Thu, 20 Sep 2018 23:02:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3F3F92E1A5 for ; Thu, 20 Sep 2018 23:02:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388661AbeIUEsp (ORCPT ); Fri, 21 Sep 2018 00:48:45 -0400 Received: from mail-ua1-f73.google.com ([209.85.222.73]:47599 "EHLO mail-ua1-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725968AbeIUEsp (ORCPT ); Fri, 21 Sep 2018 00:48:45 -0400 Received: by mail-ua1-f73.google.com with SMTP id g19-v6so2623842uan.14 for ; Thu, 20 Sep 2018 16:02:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=kE7Y14JYOIb0IweQ7WmUeDX5ga6ZiuWkcZlmDtILOyU=; b=caSfzZVqVOdErj6CtP8OAT7ZGfT7AmEjRpRk3EQBCSeFlGcneb59IpHxmSJVWDQgDz R4iSfbp62hGkH/krkwU2D6nGjOzMqOBkvN3Gi9SSczseQBOr23VfAyZCgrg5bvXrfLFs vRKjIEYZlATVFjb7Oq8ibzcn0Fw5l2ZVsj4Iv6fouOLkbvvMJZhLHlwZiXeK3kZviOND Jyklqjy9CRgu/zMNDt1cPkOOipEwIEY8q7/ZTsCQmu5iZoquMqt2qr/qzyi5NQPH/HQc Rj/9+MHyy65yniKc1V3j4qGcpD77X9PcYFarH3tRVtk67WPHY7cQNJT4xK2J4hwpdd65 vI+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=kE7Y14JYOIb0IweQ7WmUeDX5ga6ZiuWkcZlmDtILOyU=; b=rBF9pgGMKP4kCAiuWYKwTj8UclOJ58PN0wTtrEOu+S6WfZMFU6HHkMyBinzWRYNGqI pF7VFKgP5T/e47VGwPK9xo5k3Xg2ZEvrYPCAmysZi6sFSv2ucvxn4E0WQnWe8U8MXzuf vBKFaYDiuL3OG3gw8aMEDlGrf+lqExrRRwqWzSW+zsOyxvgkvTgXb7/t6OqEwWSUouGN JKII+r5bEjARCiwgfhEZokyu4L9dkkSHZlWRoNzON40IQhB/ycR8fAgtIJgNaZOkY0r+ Y8op5KG0Hcqayz5XR9ei8WJYCQ1bQWt4hWkX3kI6x43GTfTq4lL1diAXZ6WxFYEv68ri 8+yQ== X-Gm-Message-State: APzg51BQBH/Icce+8tKe3nar4wK8de5Cm8dXo8bnjXkWtPBWR3Fou6Hm fvnhO3c1yog0DXMTlL3i0RNI/bTePbE4/MzdS11qRj3fhQr8fA5mgHel/v38+WseKIMIMHmijS5 bye8hyAnRMPDGD8rPNZKhz92u0n9Z5C4lKZ3AA47PqSEu1+wbQ/yuSlYlt7rMRjA= X-Google-Smtp-Source: ANB0VdYKoQEItPBWZ3Rco6Vuzk9O9v5kXJYU2PDX1ZYG0MWaPxVqq1/DHsEV+jwQf/uL0YkLpnxBM/WU9sCBcQ== X-Received: by 2002:a1f:c8e:: with SMTP id 136-v6mr8661625vkm.41.1537484573932; Thu, 20 Sep 2018 16:02:53 -0700 (PDT) Date: Thu, 20 Sep 2018 16:02:43 -0700 Message-Id: <20180920230243.65915-1-jmattson@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.19.0.444.g18242da7ef-goog Subject: [PATCH] KVM: nVMX: Clear reserved bits of #DB exit qualification From: Jim Mattson To: kvm@vger.kernel.org, Paolo Bonzini Cc: Jim Mattson Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Per volume 2 of the SDM, bits 63:15 and 12:4 of the exit qualification field for debug exceptions are reserved (cleared to 0). There is still an issue with stale DR6 bits potentially being misreported for the current debug exception. DR6 should not have been modified before vectoring the #DB exception, and the "new DR6 bits" should be available somewhere, but it was and they aren't. Fixes: b96fb439774e1 ("KVM: nVMX: fixes to nested virt interrupt injection") Signed-off-by: Jim Mattson --- arch/x86/include/asm/kvm_host.h | 1 + arch/x86/kvm/vmx.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h index 8e90488c3d56..234f7320ba59 100644 --- a/arch/x86/include/asm/kvm_host.h +++ b/arch/x86/include/asm/kvm_host.h @@ -177,6 +177,7 @@ enum { #define DR6_BD (1 << 13) #define DR6_BS (1 << 14) +#define DR6_BT (1 << 15) #define DR6_RTM (1 << 16) #define DR6_FIXED_1 0xfffe0ff0 #define DR6_INIT 0xffff0ff0 diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 533a327372c8..01f729830fd9 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3293,7 +3293,8 @@ static int nested_vmx_check_exception(struct kvm_vcpu *vcpu, unsigned long *exit } else { if (vmcs12->exception_bitmap & (1u << nr)) { if (nr == DB_VECTOR) - *exit_qual = vcpu->arch.dr6; + *exit_qual = vcpu->arch.dr6 & + ~(DR6_FIXED_1 | DR6_BT | DR6_RTM); else *exit_qual = 0; return 1;