Received: by 2002:a6b:500f:0:0:0:0:0 with SMTP id e15csp220880iob; Mon, 2 May 2022 17:37:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw+0EZNQKZpOeLNH1cSc1uk6fGXlzd+jtQ1EjTrWFC7tdmTh3IL0KDjT8jl7rzGYWbaUk5e X-Received: by 2002:a05:6a02:10d:b0:381:f4c8:ad26 with SMTP id bg13-20020a056a02010d00b00381f4c8ad26mr11641979pgb.135.1651538250998; Mon, 02 May 2022 17:37:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1651538250; cv=none; d=google.com; s=arc-20160816; b=msi5GjlvwIAJyRr1+mN03wQL7dO01sqSUe2w5TNTl0z05Qze/xeT+77mJEvK8gv6Ej iil3MzGtzEY8W+E+au7IL2G9Xs6AyX+fRkJYL4/rTtl3yWLscD8FVVPDpM9iCYPpzH2w psVNp7igCmRmGVnz0HP7IRxuJDx5ocwlvA2xqN6df5Gd9YmXjTcRxdmXhi6ViaPccrW7 JU3pKiGNcj+5ti8r86I0Dvk3etFmEJvfe+X7jwyPYgAkZRFOLaEYxhSL3sILqI9xcCiI +29v4ZG4nWIbF1W+z7kVPDoMTboZEjt/nkNRYANKBeuKSK9JfJQJYObcxsasNwUBZ0oz ATrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=7tC/JKOk9L0c4P3431GOxph3zjvk5J8dJFmkqVAnJxc=; b=GY4vHNLszP0e46gWXvTLBdciKcXRJ8mkfhIRAAJSL4GYIkYOFvw+xclOwlXuJ+T5EP qQoss0O+bI2IjXJLIyN38UEsBv1SFKvBm/ghPSthT/7oCe8t3KUxn/tovA6O21f88bSq kZMvqCDntttdm/iQ+aRJrBcD1ppjpnmonRjWq9180rvST2raB3qVVuHkm5wY1vt0W/hc kPdVHHC7ZOsNDNSSEpUhi7L5kx/wao2LwzZy9AyoObNv/5AwLRWIT22iu1HY5kRPtph2 YFtG6T0hTBuxRubCngm5HRpH1DRCc/wW8zvPve3idLzC0V0xClBfHm452Mr3o4YZuR2T FYMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=F0+Y3mMT; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id d17-20020a621d11000000b004fa687c28d4si14792401pfd.86.2022.05.02.17.37.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 May 2022 17:37:30 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=F0+Y3mMT; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 53F9F45072; Mon, 2 May 2022 17:29:20 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377226AbiD2O2A (ORCPT + 99 others); Fri, 29 Apr 2022 10:28:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44608 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350249AbiD2O17 (ORCPT ); Fri, 29 Apr 2022 10:27:59 -0400 Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD25F91363 for ; Fri, 29 Apr 2022 07:24:40 -0700 (PDT) Received: by mail-pj1-x1032.google.com with SMTP id t11-20020a17090ad50b00b001d95bf21996so10655049pju.2 for ; Fri, 29 Apr 2022 07:24:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=7tC/JKOk9L0c4P3431GOxph3zjvk5J8dJFmkqVAnJxc=; b=F0+Y3mMT0AqdA2ZfjnbeDVfDmZPiiSQXRHQCLASaN7eLfv15TfF0iLNRdE6IOoeC/g 6GkXEEBq0PSKDjB2LJstij0jmH99SMZXxtjVbtiDjgY2vdjLCU+EE5SoMc5FV4TR9tG5 ehRV+g9B5kQNJtwCJEoRKDuSMT/SV+oYmWMEAUsVtFJnPTYB5/qUX4MBdp8WlNfn0fyB 3ld1a7DlYAa61TIpVQunTEelniygDy9n7MOGhFEb2bhWuoZunIZEfAgiXofhJWVX062S EB3po2+BTr4QWUV/PcCKFE/2uDBMP2pS/prgXU/+a7qr9JylszfvPmOveqX8gGS0sCOs qOzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=7tC/JKOk9L0c4P3431GOxph3zjvk5J8dJFmkqVAnJxc=; b=sH3b0EJNW1aoHrPSuUMeDG0WfzXKGPo0J61LawmjcF3o0i9+v90ebcP3UU3V5yEP+v GGc1GvadKRRPtmWNbsRW5WWgc1qTb75H88mNv1aK71lsKaKoFhG7N30x48CplsWdPfA7 BbnbjgeeQGixBwQxH/H4Bvwx60baQJXkmOKXZ0UiIgUJPkeaiUjQ1bS76n5NnZtATQ5H vMIciW2t/qnwGZiZFacFROIYAKe+A4v8Fmwzs9AXsnbTHhUe8CW45v4adtKgPQFL76S0 sb5pu4ulOH8OEQw/LcVTZUZssafqjMd6TwoBzWfUGjvihvOjYU/sOO/4HOytw6BFe3in bVWA== X-Gm-Message-State: AOAM532u81h+ejfu3jzNyNgzNa4w9KfPIp57JkLHkm09czxZHBYHmRQX Ca/+Bsoex6R3kH9DScZJtwN0Yg== X-Received: by 2002:a17:902:e748:b0:15c:e3b9:bba3 with SMTP id p8-20020a170902e74800b0015ce3b9bba3mr33249235plf.139.1651242279947; Fri, 29 Apr 2022 07:24:39 -0700 (PDT) Received: from google.com (157.214.185.35.bc.googleusercontent.com. [35.185.214.157]) by smtp.gmail.com with ESMTPSA id g17-20020a625211000000b005056a6313a7sm3168604pfb.87.2022.04.29.07.24.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 29 Apr 2022 07:24:38 -0700 (PDT) Date: Fri, 29 Apr 2022 14:24:35 +0000 From: Sean Christopherson To: Paolo Bonzini Cc: Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, Maxim Levitsky , Ben Gardon , David Matlack Subject: Re: [PATCH] KVM: x86/mmu: Do not create SPTEs for GFNs that exceed host.MAXPHYADDR Message-ID: References: <20220428233416.2446833-1-seanjc@google.com> <337332ca-835c-087c-c99b-92c35ea8dcd3@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <337332ca-835c-087c-c99b-92c35ea8dcd3@redhat.com> X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Apr 29, 2022, Paolo Bonzini wrote: > On 4/29/22 01:34, Sean Christopherson wrote: > > > +static inline gfn_t kvm_mmu_max_gfn_host(void) > > +{ > > + /* > > + * Disallow SPTEs (via memslots or cached MMIO) whose gfn would exceed > > + * host.MAXPHYADDR. Assuming KVM is running on bare metal, guest > > + * accesses beyond host.MAXPHYADDR will hit a #PF(RSVD) and never hit > > + * an EPT Violation/Misconfig / #NPF, and so KVM will never install a > > + * SPTE for such addresses. That doesn't hold true if KVM is running > > + * as a VM itself, e.g. if the MAXPHYADDR KVM sees is less than > > + * hardware's real MAXPHYADDR, but since KVM can't honor such behavior > > + * on bare metal, disallow it entirely to simplify e.g. the TDP MMU. > > + */ > > + return (1ULL << (shadow_phys_bits - PAGE_SHIFT)) - 1; > > The host.MAXPHYADDR however does not matter if EPT/NPT is not in use, because > the shadow paging fault path can accept any gfn. ... > diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h > index e6cae6f22683..dba275d323a7 100644 > --- a/arch/x86/kvm/mmu.h > +++ b/arch/x86/kvm/mmu.h > @@ -65,6 +65,30 @@ static __always_inline u64 rsvd_bits(int s, int e) > return ((2ULL << (e - s)) - 1) << s; > } > +/* > + * The number of non-reserved physical address bits irrespective of features > + * that repurpose legal bits, e.g. MKTME. > + */ > +extern u8 __read_mostly shadow_phys_bits; > + > +static inline gfn_t kvm_mmu_max_gfn(void) > +{ > + /* > + * Note that this uses the host MAXPHYADDR, not the guest's. > + * EPT/NPT cannot support GPAs that would exceed host.MAXPHYADDR; > + * assuming KVM is running on bare metal, guest accesses beyond > + * host.MAXPHYADDR will hit a #PF(RSVD) and never cause a vmexit > + * (either EPT Violation/Misconfig or #NPF), and so KVM will never > + * install a SPTE for such addresses. If KVM is running as a VM > + * itself, on the other hand, it might see a MAXPHYADDR that is less > + * than hardware's real MAXPHYADDR. Using the host MAXPHYADDR > + * disallows such SPTEs entirely and simplifies the TDP MMU. > + */ > + int max_gpa_bits = likely(tdp_enabled) ? shadow_phys_bits : 52; I don't love the divergent memslot behavior, but it's technically correct, so I can't really argue. Do we want to "officially" document the memslot behavior? > + > + return (1ULL << (max_gpa_bits - PAGE_SHIFT)) - 1; > +} > + > void kvm_mmu_set_mmio_spte_mask(u64 mmio_value, u64 mmio_mask, u64 access_mask); > void kvm_mmu_set_ept_masks(bool has_ad_bits, bool has_exec_only);