From patchwork Mon Jul 10 19:29:03 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 9833713 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 394EC60350 for ; Mon, 10 Jul 2017 19:30:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E6BA026AE3 for ; Mon, 10 Jul 2017 19:29:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DB7162843B; Mon, 10 Jul 2017 19:29:59 +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=-7.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI 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 77B2628066 for ; Mon, 10 Jul 2017 19:29:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754312AbdGJT34 (ORCPT ); Mon, 10 Jul 2017 15:29:56 -0400 Received: from mail-pf0-f170.google.com ([209.85.192.170]:34975 "EHLO mail-pf0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754265AbdGJT3z (ORCPT ); Mon, 10 Jul 2017 15:29:55 -0400 Received: by mail-pf0-f170.google.com with SMTP id c73so54727072pfk.2 for ; Mon, 10 Jul 2017 12:29:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=DfSSlCi0F8biy/DM7PrZjnm9qNy5mhXbgCmuUInVqZM=; b=aY+JLWrbhqmAc+n4068Jpwh+lqjcGcBg0IhwQTe43u8h4rk+yIdlQHLx0zfAUXeSKt tZonhWIAxAzuxOiJf0XstCUxmtbP0MXO9N2F0AHKj8XKxFsztgzbkbH26cIQroaQ72pk wOpn9+sku/nHfL06tuOQSo3XqoBbugZ7iBh5DZchielo9HABXJOVA92pBPuYP76/zz6f BAoDjnoYhECkoW1Pnd2HeklJGit0+FJFrV1JeLLOmdCr+gHcyx8eyMIxYJHvSz/tF8fT Z4293N5TWC7cIR+wCngmImyZ5IdJTD0TDlTZj08lPfHJvHQFw/mam+JkWQd3W7lyhRce 54kg== 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:in-reply-to :references; bh=DfSSlCi0F8biy/DM7PrZjnm9qNy5mhXbgCmuUInVqZM=; b=aX5SpCy1vTqpp/50OWjyu1vZXMLfbhf4N/N/GwQeSA0FjFAqGFDBnWnnaHHW8RzivL NcXYYU52d7gGu+9WJTq4HzktwaPIkT4D2PN6EkCcomARaWgyXwDoPzopeyfgDZq1Ya8I RYyZ3hCBwq92dYXMlzTz7LhOH3OAKvyJu4vdwt6S98cFM2p54TTif44G3P61BreYQljD 5KqAakBvNUMg740FFkNrjh411UdhFoLC6/U0k6AiQW23iEM3citG5lNGKiy0AbiM9keO zMqMp7zoRJvIKJ/bKKe++YF7BLQrZnbH5EcjBcNkjWKG53OiF6xw2sOpdMvvF+EGO2UK lQHw== X-Gm-Message-State: AIVw112pLNMZX/PltxAjxhxbyJ3xP6K0lSkHGWkqxW3wcxfIouQHYSlU 8SBM2l02oikilvkVIq+woQ== X-Received: by 10.84.215.150 with SMTP id l22mr20188783pli.29.1499714994287; Mon, 10 Jul 2017 12:29:54 -0700 (PDT) Received: from turtle.sea.corp.google.com ([172.31.88.24]) by smtp.gmail.com with ESMTPSA id u2sm30201109pgn.28.2017.07.10.12.29.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 10 Jul 2017 12:29:53 -0700 (PDT) From: Jim Mattson To: kvm@vger.kernel.org Cc: Jim Mattson Subject: [PATCH v2 2/3] kvm: nVMX: Fix nested_vmx_check_msr_bitmap_controls Date: Mon, 10 Jul 2017 12:29:03 -0700 Message-Id: <20170710192904.102893-2-jmattson@google.com> X-Mailer: git-send-email 2.13.2.725.g09c95d1e9-goog In-Reply-To: <20170710192904.102893-1-jmattson@google.com> References: <201707081510.ZhaGqybS%fengguang.wu@intel.com> <20170710192904.102893-1-jmattson@google.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Allow the L1 guest to specify the last page of addressable guest physical memory for an L2 MSR permission bitmap. Also remove the vmcs12_read_any() check that should never fail. Fixes: 3af18d9c5fe95 ("KVM: nVMX: Prepare for using hardware MSR bitmap") Change-Id: I37f0482f32c4e77e403f6726e63bbe99880a185b --- arch/x86/kvm/vmx.c | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 7ffe1c8438c2..eec9e0191311 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -4634,6 +4634,11 @@ static bool guest_state_valid(struct kvm_vcpu *vcpu) return true; } +static bool page_address_valid(struct kvm_vcpu *vcpu, gpa_t gpa) +{ + return PAGE_ALIGNED(gpa) && !(gpa >> cpuid_maxphyaddr(vcpu)); +} + static int init_rmode_tss(struct kvm *kvm) { gfn_t fn; @@ -9592,20 +9597,10 @@ static void vmx_start_preemption_timer(struct kvm_vcpu *vcpu) static int nested_vmx_check_msr_bitmap_controls(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12) { - int maxphyaddr; - u64 addr; - if (!nested_cpu_has(vmcs12, CPU_BASED_USE_MSR_BITMAPS)) return 0; - if (vmcs12_read_any(vcpu, MSR_BITMAP, &addr)) { - WARN_ON(1); - return -EINVAL; - } - maxphyaddr = cpuid_maxphyaddr(vcpu); - - if (!PAGE_ALIGNED(vmcs12->msr_bitmap) || - ((addr + PAGE_SIZE) >> maxphyaddr)) + if (!page_address_valid(vcpu, vmcs12->msr_bitmap)) return -EINVAL; return 0;