From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45BCEC433EF for ; Fri, 18 Mar 2022 03:58:33 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CA43C8D0002; Thu, 17 Mar 2022 23:58:32 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C52738D0001; Thu, 17 Mar 2022 23:58:32 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id AF2A48D0002; Thu, 17 Mar 2022 23:58:32 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0142.hostedemail.com [216.40.44.142]) by kanga.kvack.org (Postfix) with ESMTP id 9DD8C8D0001 for ; Thu, 17 Mar 2022 23:58:32 -0400 (EDT) Received: from smtpin30.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 4D0A0182888D9 for ; Fri, 18 Mar 2022 03:58:32 +0000 (UTC) X-FDA: 79256150064.30.65CAAF5 Received: from szxga02-in.huawei.com (szxga02-in.huawei.com [45.249.212.188]) by imf13.hostedemail.com (Postfix) with ESMTP id 4B9242001F for ; Fri, 18 Mar 2022 03:58:30 +0000 (UTC) Received: from kwepemi100008.china.huawei.com (unknown [172.30.72.57]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4KKVYf2rxszCqk9; Fri, 18 Mar 2022 11:56:22 +0800 (CST) Received: from kwepemm600017.china.huawei.com (7.193.23.234) by kwepemi100008.china.huawei.com (7.221.188.57) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Fri, 18 Mar 2022 11:58:24 +0800 Received: from [10.174.179.234] (10.174.179.234) by kwepemm600017.china.huawei.com (7.193.23.234) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.21; Fri, 18 Mar 2022 11:58:23 +0800 Message-ID: Date: Fri, 18 Mar 2022 11:58:22 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.6.1 Subject: Re: [PATCH -next 3/4] arm64: mm: add support for page table check To: Catalin Marinas CC: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , , "H. Peter Anvin" , Pasha Tatashin , Andrew Morton , "Will Deacon" , Paul Walmsley , "Palmer Dabbelt" , Palmer Dabbelt , Albert Ou , , , , References: <20220317141203.3646253-1-tongtiangen@huawei.com> <20220317141203.3646253-4-tongtiangen@huawei.com> From: Tong Tiangen In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed X-Originating-IP: [10.174.179.234] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To kwepemm600017.china.huawei.com (7.193.23.234) X-CFilter-Loop: Reflected X-Rspam-User: X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 4B9242001F X-Stat-Signature: 3w98rza7tfg1y653hwmu95facg553ydy Authentication-Results: imf13.hostedemail.com; dkim=none; dmarc=pass (policy=quarantine) header.from=huawei.com; spf=pass (imf13.hostedemail.com: domain of tongtiangen@huawei.com designates 45.249.212.188 as permitted sender) smtp.mailfrom=tongtiangen@huawei.com X-HE-Tag: 1647575910-605983 Content-Transfer-Encoding: quoted-printable X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: =E5=9C=A8 2022/3/18 3:00, Catalin Marinas =E5=86=99=E9=81=93: > On Thu, Mar 17, 2022 at 02:12:02PM +0000, Tong Tiangen wrote: >> @@ -628,6 +647,25 @@ static inline unsigned long pmd_page_vaddr(pmd_t = pmd) >> #define pud_leaf(pud) pud_sect(pud) >> #define pud_valid(pud) pte_valid(pud_pte(pud)) >> =20 >> +#ifdef CONFIG_PAGE_TABLE_CHECK >> +static inline bool pte_user_accessible_page(pte_t pte) >> +{ >> + return (pte_val(pte) & PTE_VALID) && (pte_val(pte) & PTE_USER); >> +} >=20 > There is another class of user mappings, execute-only, that have both > PTE_USER and PTE_UXN cleared. So this logic should be: >=20 > pte_valid(pte) && (pte_user(pte) || pte_user_exec(pte)) >=20 > with pte_user() as: >=20 > #define pte_user(pte) (!!(pte_val(pte) & PTE_USER)) Good suggestion, the PTC(page table check) can cover UXN page and=20 pte_user(pte) helper is required. >=20 > Do we care about PROT_NONE mappings here? They have the valid bit > cleared but pte_present() is true. > PTC will not check this special type(PROT_NONE) of page. >> +static inline bool pmd_user_accessible_page(pmd_t pmd) >> +{ >> + return pmd_leaf(pmd) && (pmd_val(pmd) & PTE_VALID) && >> + (pmd_val(pmd) & PTE_USER); >> +} >=20 > pmd_leaf() implies valid, so you can skip it if that's the aim. PTC only checks whether the memory block corresponding to the pmd_leaf=20 type can access, for !pmd_leaf, PTC checks at the pte level. So i think=20 this is necessary. >=20 > Similar comment to the pte variant on execute-only and PROT_NONE > mappings Same considerations as above. Thanks. Tong >=20