From patchwork Wed Jul 19 11:57:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Cooper X-Patchwork-Id: 9851873 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C775360392 for ; Wed, 19 Jul 2017 12:00:15 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B44F7274D0 for ; Wed, 19 Jul 2017 12:00:15 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A92A828426; Wed, 19 Jul 2017 12:00:15 +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=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 617E9274D0 for ; Wed, 19 Jul 2017 12:00:15 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dXncG-0005Pw-5V; Wed, 19 Jul 2017 11:58:08 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dXncE-0005NG-9k for xen-devel@lists.xen.org; Wed, 19 Jul 2017 11:58:06 +0000 Received: from [85.158.139.211] by server-17.bemta-5.messagelabs.com id 57/09-18997-D494F695; Wed, 19 Jul 2017 11:58:05 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprIIsWRWlGSWpSXmKPExsXitHRDpK6XZ36 kwc5uQ4slHxezODB6HN39mymAMYo1My8pvyKBNWPf2lb2gr3cFR0X21kbGDdxdjFyckgI+Euc ubWKHcRmE9CX2P3iExOILSKgLnG64yJrFyMXB7PALEaJ17t+sIAkhAWcJQ7N3cvWxcjBwSKgK jHjdylImFfAU2Ln+qdsEDPlJM4f/8kMYnMKeEk0PfwI1ioEVPNz/yVmCFtN4lr/JXaIXkGJkz OfgNUwC0hIHHzxgnkCI+8sJKlZSFILGJlWMWoUpxaVpRbpGlnoJRVlpmeU5CZm5ugaGpjq5aY WFyemp+YkJhXrJefnbmIEBk89AwPjDsa+VX6HGCU5mJREeefw5kcK8SXlp1RmJBZnxBeV5qQW H2KU4eBQkuC18wDKCRalpqdWpGXmAMMYJi3BwaMkwqsNkuYtLkjMLc5Mh0idYtTleDXh/zcmI Za8/LxUKXFeXpAiAZCijNI8uBGwmLrEKCslzMvIwMAgxFOQWpSbWYIq/4pRnINRSZi3FWQKT2 ZeCdymV0BHMAEdIeybA3JESSJCSqqBMWLm6tMLtyXe3Jxv//C89e79msvb4q8pfTi1TnxOVmK xkbfnTL8pPbmPjcraLwZJas0z/3D8xVpnWa2JbwWCxVYlmeuXFE8T4V7XpsP97N/M6qLD18/E vomQLlE6/Dl+7o9FXOo9Czk8HCo8J2ziK1buvxjS+X/zo+MsjGu7U9O1v52O+6TNqMRSnJFoq MVcVJwIANuGqwakAgAA X-Env-Sender: prvs=366acc0af=Andrew.Cooper3@citrix.com X-Msg-Ref: server-12.tower-206.messagelabs.com!1500465479!67289619!3 X-Originating-IP: [66.165.176.89] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni44OSA9PiAyMDMwMDc=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 9.4.25; banners=-,-,- X-VirusChecked: Checked Received: (qmail 2799 invoked from network); 19 Jul 2017 11:58:02 -0000 Received: from smtp.citrix.com (HELO SMTP.CITRIX.COM) (66.165.176.89) by server-12.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 19 Jul 2017 11:58:02 -0000 X-IronPort-AV: E=Sophos;i="5.40,380,1496102400"; d="scan'208";a="432075293" From: Andrew Cooper To: Xen-devel Date: Wed, 19 Jul 2017 12:57:57 +0100 Message-ID: <1500465477-23793-7-git-send-email-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1500465477-23793-1-git-send-email-andrew.cooper3@citrix.com> References: <1500465477-23793-1-git-send-email-andrew.cooper3@citrix.com> MIME-Version: 1.0 Cc: Andrew Cooper , Kevin Tian , Jun Nakajima , Jan Beulich Subject: [Xen-devel] [PATCH 6/6] x86/vvmx: Fix auditing of MSR_BITMAP parameter X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP The MSR_BITMAP field is required to be page aligned. Also switch gpa to be a uint64_t, as the MSR_BITMAP is strictly a 64bit VMCS field. Signed-off-by: Andrew Cooper Acked-by: Kevin Tian --- CC: Jan Beulich CC: Jun Nakajima CC: Kevin Tian --- xen/arch/x86/hvm/vmx/vvmx.c | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c index f84478e..6ee5385 100644 --- a/xen/arch/x86/hvm/vmx/vvmx.c +++ b/xen/arch/x86/hvm/vmx/vvmx.c @@ -754,14 +754,27 @@ static void __clear_current_vvmcs(struct vcpu *v) __vmpclear(nvcpu->nv_n2vmcx_pa); } -static bool_t __must_check _map_msr_bitmap(struct vcpu *v) +/* + * Refreshes the MSR bitmap mapping for the current nested vcpu. Returns true + * for a success mapping, and returns false for MSR_BITMAP parameter errors or + * gfn mapping errors. + */ +static bool __must_check _map_msr_bitmap(struct vcpu *v) { struct nestedvmx *nvmx = &vcpu_2_nvmx(v); - unsigned long gpa; + uint64_t gpa; if ( nvmx->msrbitmap ) + { hvm_unmap_guest_frame(nvmx->msrbitmap, 1); + nvmx->msrbitmap = NULL; + } + gpa = get_vvmcs(v, MSR_BITMAP); + + if ( !IS_ALIGNED(gpa, PAGE_SIZE) ) + return false; + nvmx->msrbitmap = hvm_map_guest_frame_ro(gpa >> PAGE_SHIFT, 1); return nvmx->msrbitmap != NULL;