From patchwork Mon May 30 09:47:01 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Ghiti X-Patchwork-Id: 1636859 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=xQZnXA7o; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=UC9Enw5j; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2607:7c80:54:3::133; helo=bombadil.infradead.org; envelope-from=kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LBVv25pGCz9s0r for ; Mon, 30 May 2022 19:47:26 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=2SEnrQqK8yW756bbFV33jqElN2nFA3uN3ZnBhT0a5nM=; b=xQZnXA7oMeeM9l bnhRlgsqWVdC71TdsBveckSura9YLCTtP6BGytwZylKmBzJhK1HYTDxnE2HtjxA3lSmHYyVAvMhJ6 DXhLpa5zT9dHO6z85BMSfVvmYz9Vo0mRb5YFB5+KQSs6ML8pzA0UZKFecxfM9EtY2gUdFXqKK2C0G GBXPnFVhphemHdxSdD4LEBL2P5XSuP3sUV7q7+TrIAGGSzEK3V4XNIS7IFrodWJhZx4dedtzPgj5o mbRN6l4ImMHKx2Yes3f16RgoJMnOL4xAUtpgsJbrvCchZ6mKdaCWexspOOJfl40buXJ6bi69yQO4h Vlto1UqzDTCKwJPpW6Fw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nvbze-006Apt-Sr; Mon, 30 May 2022 09:47:22 +0000 Received: from smtp-relay-internal-1.canonical.com ([185.125.188.123]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nvbzY-006Am4-Po for kvm-riscv@lists.infradead.org; Mon, 30 May 2022 09:47:19 +0000 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-internal-1.canonical.com (Postfix) with ESMTPS id 2672D3FBF8 for ; Mon, 30 May 2022 09:47:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1653904028; bh=0UZymv9RVAChspHI58gTmQkqQr5ViPWxsQqyFUaGwGI=; h=From:To:Cc:Subject:Date:Message-Id:MIME-Version; b=UC9Enw5jm2byNpRPlFfaAt7DaCFNXK7ebkdc+pLwv67I+SQonml1oSSxtPYcp1yfR FX73t6Jxd+AqiARh6bymeTlxpS/NCRQG0U0CVpXGXHMGvJlqOmxI5e7P3uocBuvq2x f1lVDp4Q8T20rilyLSHdQgFCl73qCGHbAXKa4rnQAB3hhDMSKSs43BFA+FmJQy3NAM IQ0cHSb5ujQ/o3zhmtFZauPkjHgEOfIAqHtHjU7Q8npARxcdmDkyKCvYI6ZDig6Ii2 R+htuYARzB8eTS9c4mCAFb2uGv+YEnN6o+aOW5YBSCazui9vF0FJZ5nfhYcq+g9I9Y zJYeLHcllneoA== Received: by mail-wr1-f69.google.com with SMTP id bu4-20020a056000078400b0020e61501044so1520922wrb.0 for ; Mon, 30 May 2022 02:47:08 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=0UZymv9RVAChspHI58gTmQkqQr5ViPWxsQqyFUaGwGI=; b=zH72Rapoz8Ed1iu2NRMXbcTCYywdyusIZiiEm3HM3jVIRkhA3JWVF0agozQhIt4XAd wQl05SYwZE+OHfoOT+YCbNX3zHSWW9gLrS1phAuKDxSH/uL8uUj9/F2H/E8dBuMoBr/x fXlVwNW9QbRSmgN01QWYwCHVe77qlCiWpQgVJ5TEUuCXr6+0sS3GgUlLPRNGGSMvMsOP 6bC1naSSL7k1Nx26Sc5pYqtWTnpwXxzHpMxduf2lFRD6geIwvSDwUSKsdLCY8VWBO6RX BwPcSQp9fjJpZaxzx4IZdDwTT095BxhzYCa06FqUWVUjLxKnv+LFdA4Tb7RXDkuGt1r1 7igA== X-Gm-Message-State: AOAM531ftyfoCfc3lq6b+by5Q/efZ2EbrXJATzR1cWpu+Ad7R9wuPcs7 XHvwjZ7vwbf4E2tVpbD983ojwPdLdV/IphLZJcTrlvtt+1WztPlaGOWa77zQ37mVTGzAaXrvj6L sSWHvkYMGKF4G+dG5xlgygm6e/7vBE5Cp7UkpBCAB+k4= X-Received: by 2002:a05:600c:501f:b0:397:74e2:caa1 with SMTP id n31-20020a05600c501f00b0039774e2caa1mr18326910wmr.89.1653904024025; Mon, 30 May 2022 02:47:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxcIRFrZmFoHMctcwJfjIoXZM+fuLzFmiVCBZ3hBYIMDRUovPi+iGVmBjDvXX5Wh2a1poEgFA== X-Received: by 2002:a05:600c:501f:b0:397:74e2:caa1 with SMTP id n31-20020a05600c501f00b0039774e2caa1mr18326883wmr.89.1653904023811; Mon, 30 May 2022 02:47:03 -0700 (PDT) Received: from alex.home (lfbn-gre-1-146-29.w90-112.abo.wanadoo.fr. [90.112.113.29]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003942a244f30sm13897640wmg.9.2022.05.30.02.47.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 30 May 2022 02:47:03 -0700 (PDT) From: Alexandre Ghiti To: =?utf-8?q?Heiko_St=C3=BCbner?= , Paul Walmsley , Palmer Dabbelt , Albert Ou , Anup Patel , Atish Patra , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvm-riscv@lists.infradead.org Cc: Alexandre Ghiti Subject: [PATCH -for-next] riscv: Fix missing PAGE_PFN_MASK Date: Mon, 30 May 2022 11:47:01 +0200 Message-Id: <20220530094701.2891404-1-alexandre.ghiti@canonical.com> X-Mailer: git-send-email 2.34.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220530_024717_034233_01E459AC X-CRM114-Status: GOOD ( 13.53 ) X-Spam-Score: -2.7 (--) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: There are a bunch of functions that use the PFN from a page table entry that end up with the svpbmt upper-bits because they are missing the newly introduced PAGE_PFN_MASK which leads to wrong addresse [...] Content analysis details: (-2.7 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [185.125.188.123 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.2 DKIMWL_WL_HIGH DKIMwl.org - High trust sender X-BeenThere: kvm-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "kvm-riscv" Errors-To: kvm-riscv-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org There are a bunch of functions that use the PFN from a page table entry that end up with the svpbmt upper-bits because they are missing the newly introduced PAGE_PFN_MASK which leads to wrong addresses conversions and then crash: fix this by adding this mask. Fixes: 100631b48ded ("riscv: Fix accessing pfn bits in PTEs for non-32bit variants") Signed-off-by: Alexandre Ghiti Reviewed-by: Guo Ren --- arch/riscv/include/asm/pgtable-64.h | 4 ++-- arch/riscv/include/asm/pgtable.h | 4 ++-- arch/riscv/kvm/mmu.c | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arch/riscv/include/asm/pgtable-64.h b/arch/riscv/include/asm/pgtable-64.h index 6d59e4695200..0e57bf1e25e9 100644 --- a/arch/riscv/include/asm/pgtable-64.h +++ b/arch/riscv/include/asm/pgtable-64.h @@ -153,7 +153,7 @@ static inline pud_t pfn_pud(unsigned long pfn, pgprot_t prot) static inline unsigned long _pud_pfn(pud_t pud) { - return pud_val(pud) >> _PAGE_PFN_SHIFT; + return (pud_val(pud) & _PAGE_PFN_MASK) >> _PAGE_PFN_SHIFT; } static inline pmd_t *pud_pgtable(pud_t pud) @@ -240,7 +240,7 @@ static inline void p4d_clear(p4d_t *p4d) static inline pud_t *p4d_pgtable(p4d_t p4d) { if (pgtable_l4_enabled) - return (pud_t *)pfn_to_virt(p4d_val(p4d) >> _PAGE_PFN_SHIFT); + return (pud_t *)pfn_to_virt((p4d_val(p4d) & _PAGE_PFN_MASK) >> _PAGE_PFN_SHIFT); return (pud_t *)pud_pgtable((pud_t) { p4d_val(p4d) }); } diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h index e2658a25f06d..43064025f4b0 100644 --- a/arch/riscv/include/asm/pgtable.h +++ b/arch/riscv/include/asm/pgtable.h @@ -255,7 +255,7 @@ static inline pgd_t pfn_pgd(unsigned long pfn, pgprot_t prot) static inline unsigned long _pgd_pfn(pgd_t pgd) { - return pgd_val(pgd) >> _PAGE_PFN_SHIFT; + return (pgd_val(pgd) & _PAGE_PFN_MASK) >> _PAGE_PFN_SHIFT; } static inline struct page *pmd_page(pmd_t pmd) @@ -568,7 +568,7 @@ static inline pmd_t pmd_mkinvalid(pmd_t pmd) return __pmd(pmd_val(pmd) & ~(_PAGE_PRESENT|_PAGE_PROT_NONE)); } -#define __pmd_to_phys(pmd) (pmd_val(pmd) >> _PAGE_PFN_SHIFT << PAGE_SHIFT) +#define __pmd_to_phys(pmd) ((pmd_val(pmd) & _PAGE_PFN_MASK) >> _PAGE_PFN_SHIFT << PAGE_SHIFT) static inline unsigned long pmd_pfn(pmd_t pmd) { diff --git a/arch/riscv/kvm/mmu.c b/arch/riscv/kvm/mmu.c index f80a34fbf102..db03c5a29d4c 100644 --- a/arch/riscv/kvm/mmu.c +++ b/arch/riscv/kvm/mmu.c @@ -55,7 +55,7 @@ static inline unsigned long stage2_pte_index(gpa_t addr, u32 level) static inline unsigned long stage2_pte_page_vaddr(pte_t pte) { - return (unsigned long)pfn_to_virt(pte_val(pte) >> _PAGE_PFN_SHIFT); + return (unsigned long)pfn_to_virt((pte_val(pte) & _PAGE_PFN_MASK) >> _PAGE_PFN_SHIFT); } static int stage2_page_size_to_level(unsigned long page_size, u32 *out_level)