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 bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 16E6AC6FA82 for ; Wed, 21 Sep 2022 15:17:23 +0000 (UTC) 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:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=QoG7hB4bIDjHpQow56PakfDujN1NiTG4Ecq+YMGwdCM=; b=RTQELIrgAztTac VCa5dt9kmeyyw6LsnYU11dqqC0EpmoRX/+zw1x24jtB7QTRO+hTWpEaZMWe53qvYHI3xpJDgkcDMJ w72eAWWwFKKS7y5YorLYv6sftEOnbmhD6MD42SC4lxseSZLvE4hCi8eKdDWwoXnFIHeXbndC/pZEI RQK52CR0QODUCWkmsSqRO+SG55O9PU26UacNw5WvzmmRccDgtMPihjXXzSHUU6fL9w1+GMjBtGcuD 0SIMrAxfO9j30bte1IcrntqJkDfUfPxkxPGZIUvllPKp9+C/fMtcuybjOxwzaCuIWrjyCbX/6scGM DyWnR2j8EGjh/rgWWk3Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ob1SS-00BjfI-3R; Wed, 21 Sep 2022 15:16:16 +0000 Received: from ams.source.kernel.org ([2604:1380:4601:e00::1]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ob1SO-00Bjdu-Fg for linux-arm-kernel@lists.infradead.org; Wed, 21 Sep 2022 15:16:14 +0000 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 2C15EB8304A; Wed, 21 Sep 2022 15:16:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id B4DB8C433D6; Wed, 21 Sep 2022 15:16:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1663773369; bh=3pWsI/Gg+BxuNQKLJDW405PHnHWdIeZ8RBjI7wGvRJU=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=TCTOzaVWZC2tsN8DmEGp7Ozg4aEaWVMWMF/y2FMLWuqdasfGY8R0/HdG/nRJSO4kc dveK70NllMyTpNx6YLXzYr4C5Oj877dXKnptUEw6Sip/lFI/zt3AE7yMn62fqdD6A1 spWuYndOuusQ0xvpWyCJkihsaj3GGjmbxOdPCfOYJ0rJuXXbZkkvGGvivRvKfQXoZp 7YfCsQDt0KQvGDmujPZ6BTtGKMlfgHXB0WMnPKqtlSkm/RrQ/fHVN4iEi0Knh/Oy1/ YFs7BWDnP+P98andA2+R6YYeAKYlKFUfJ28acJLuICU7ZkPmIsDOGg48rXW3Lqomuz eafguEs0jgByA== Date: Wed, 21 Sep 2022 18:15:55 +0300 From: Mike Rapoport To: Barry Song <21cnbao@gmail.com> Cc: Catalin Marinas , Will Deacon , Mike Rapoport , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] arm64/mm: fold check for KFENCE into can_set_direct_map() Message-ID: References: <20220921074841.382615-1-rppt@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220921_081612_835720_6A480AC3 X-CRM114-Status: GOOD ( 29.05 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Barry, On Wed, Sep 21, 2022 at 09:00:28PM +1200, Barry Song wrote: > On Wed, Sep 21, 2022 at 8:26 PM Mike Rapoport wrote: > > > > From: Mike Rapoport > > > > KFENCE requires linear map to be mapped at page granularity, so that it > > is possible to protect/unprotect single pages, just like with > > rodata_full and DEBUG_PAGEALLOC. > > > > Instead of repating > > > > can_set_direct_map() || IS_ENABLED(CONFIG_KFENCE) > > > > make can_set_direct_map() handle the KFENCE case. > > > > This also prevents potential false positives in kernel_page_present() > > that may return true for non-present page if CONFIG_KFENCE is enabled. > > > > Signed-off-by: Mike Rapoport > > --- > > arch/arm64/mm/mmu.c | 8 ++------ > > arch/arm64/mm/pageattr.c | 8 +++++++- > > 2 files changed, 9 insertions(+), 7 deletions(-) > > > > diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c > > index e7ad44585f40..c5065abec55a 100644 > > --- a/arch/arm64/mm/mmu.c > > +++ b/arch/arm64/mm/mmu.c > > @@ -535,7 +535,7 @@ static void __init map_mem(pgd_t *pgdp) > > */ > > BUILD_BUG_ON(pgd_index(direct_map_end - 1) == pgd_index(direct_map_end)); > > > > - if (can_set_direct_map() || IS_ENABLED(CONFIG_KFENCE)) > > + if (can_set_direct_map()) > > flags |= NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS; > > > > /* > > @@ -1547,11 +1547,7 @@ int arch_add_memory(int nid, u64 start, u64 size, > > > > VM_BUG_ON(!mhp_range_allowed(start, size, true)); > > > > - /* > > - * KFENCE requires linear map to be mapped at page granularity, so that > > - * it is possible to protect/unprotect single pages in the KFENCE pool. > > - */ > > - if (can_set_direct_map() || IS_ENABLED(CONFIG_KFENCE)) > > + if (can_set_direct_map()) > > flags |= NO_BLOCK_MAPPINGS | NO_CONT_MAPPINGS; > > > > __create_pgd_mapping(swapper_pg_dir, start, __phys_to_virt(start), > > diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c > > index 64e985eaa52d..d107c3d434e2 100644 > > --- a/arch/arm64/mm/pageattr.c > > +++ b/arch/arm64/mm/pageattr.c > > @@ -21,7 +21,13 @@ bool rodata_full __ro_after_init = IS_ENABLED(CONFIG_RODATA_FULL_DEFAULT_ENABLED > > > > bool can_set_direct_map(void) > > { > > - return rodata_full || debug_pagealloc_enabled(); > > + /* > > + * rodata_full, DEBUG_PAGEALLOC and KFENCE require linear map to be > > + * mapped at page granularity, so that it is possible to > > + * protect/unprotect single pages. > > + */ > > + return rodata_full || debug_pagealloc_enabled() || > > + IS_ENABLED(CONFIG_KFENCE); > > might be irrelevant, i wonder if rodata_full is too strict as > rodata_full is almost > always true since RODATA_FULL_DEFAULT_ENABLED is default true. Not sure I follow. If either of these conditions is true the linear map consists of base pages and it's possible to change attributes of each base page. Whenever linear map contains block mapping, page attributes cannot be modified. And rodata_full might be false because CONFIG_RODATA_FULL_DEFAULT_ENABLED was disabled at build time. > > } > > > > static int change_page_range(pte_t *ptep, unsigned long addr, void *data) > > -- > > 2.35.3 > > > > Thanks > Barry -- Sincerely yours, Mike. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel