lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <f5dbffae-52a5-4992-95a8-d47c925e286f@arm.com>
Date: Wed, 5 Nov 2025 11:00:49 +0530
From: Anshuman Khandual <anshuman.khandual@....com>
To: Will Deacon <will@...nel.org>
Cc: linux-arm-kernel@...ts.infradead.org,
 Catalin Marinas <catalin.marinas@....com>, linux-kernel@...r.kernel.org,
 ryan.roberts@....com
Subject: Re: [PATCH] arm64/mm: Drop redundant extern declaration for
 rodata_full

On 04/11/25 9:13 PM, Will Deacon wrote:
> On Wed, Oct 15, 2025 at 03:36:09AM +0100, Anshuman Khandual wrote:
>> Drop the redundant extern declaration 'rodata_full' which can be included
>> via the header <asm/setup.h> after moving exiting declaration outside the
>> function arch_parse_debug_rodata(). While here also drop 'rodata_enabled'
>> which is anyways available via the generic header <linux/init.h>.
>>
>> Cc: Catalin Marinas <catalin.marinas@....com>
>> Cc: Will Deacon <will@...nel.org>
>> Cc: linux-arm-kernel@...ts.infradead.org
>> Cc: linux-kernel@...r.kernel.org
>> Signed-off-by: Anshuman Khandual <anshuman.khandual@....com>
>> ---
>>  arch/arm64/include/asm/mmu_context.h | 2 --
>>  arch/arm64/include/asm/setup.h       | 4 +---
>>  2 files changed, 1 insertion(+), 5 deletions(-)
>>
>> diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
>> index 0375ca3162ff..e4b3563e1d96 100644
>> --- a/arch/arm64/include/asm/mmu_context.h
>> +++ b/arch/arm64/include/asm/mmu_context.h
>> @@ -26,8 +26,6 @@
>>  #include <asm/sysreg.h>
>>  #include <asm/tlbflush.h>
>>  
>> -extern bool rodata_full;
>> -
>>  static inline void contextidr_thread_switch(struct task_struct *next)
>>  {
>>  	if (!IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR))
>> diff --git a/arch/arm64/include/asm/setup.h b/arch/arm64/include/asm/setup.h
>> index 3d96dde4d214..902f1aab520f 100644
>> --- a/arch/arm64/include/asm/setup.h
>> +++ b/arch/arm64/include/asm/setup.h
>> @@ -12,12 +12,10 @@
>>   */
>>  extern phys_addr_t __fdt_pointer __initdata;
>>  extern u64 __cacheline_aligned boot_args[4];
>> +extern bool rodata_full;
>>  
>>  static inline bool arch_parse_debug_rodata(char *arg)
>>  {
>> -	extern bool rodata_enabled;
>> -	extern bool rodata_full;
>> -
>>  	if (!arg)
>>  		return false;
> 
> It would probably be cleaner to make 'rodata_full' static in mm/pageattr.c,
> move the guts of arch_parse_debug_rodata in there and then consolidate
> can_set_direct_map() and force_pte_mapping().
> 
> You need to talk to Ryan for the last part, as David's made some
> suggestions around that too.

Sure will talk to Ryan about this. But for the above suggestion - probably something
like the following (untested) should work.

diff --git a/arch/arm64/include/asm/mmu_context.h b/arch/arm64/include/asm/mmu_context.h
index 0dbe3b29049b..ddb964e916e1 100644
--- a/arch/arm64/include/asm/mmu_context.h
+++ b/arch/arm64/include/asm/mmu_context.h
@@ -26,8 +26,6 @@
 #include <asm/sysreg.h>
 #include <asm/tlbflush.h>
 
-extern bool rodata_full;
-
 static inline void contextidr_thread_switch(struct task_struct *next)
 {
 	if (!IS_ENABLED(CONFIG_PID_IN_CONTEXTIDR))
diff --git a/arch/arm64/include/asm/setup.h b/arch/arm64/include/asm/setup.h
index 3d96dde4d214..fa77a7208826 100644
--- a/arch/arm64/include/asm/setup.h
+++ b/arch/arm64/include/asm/setup.h
@@ -13,32 +13,7 @@
 extern phys_addr_t __fdt_pointer __initdata;
 extern u64 __cacheline_aligned boot_args[4];
 
-static inline bool arch_parse_debug_rodata(char *arg)
-{
-	extern bool rodata_enabled;
-	extern bool rodata_full;
-
-	if (!arg)
-		return false;
-
-	if (!strcmp(arg, "on")) {
-		rodata_enabled = rodata_full = true;
-		return true;
-	}
-
-	if (!strcmp(arg, "off")) {
-		rodata_enabled = rodata_full = false;
-		return true;
-	}
-
-	if (!strcmp(arg, "noalias")) {
-		rodata_enabled = true;
-		rodata_full = false;
-		return true;
-	}
-
-	return false;
-}
+bool arch_parse_debug_rodata(char *arg);
 #define arch_parse_debug_rodata arch_parse_debug_rodata
 
 #endif
diff --git a/arch/arm64/mm/mmu.c b/arch/arm64/mm/mmu.c
index b8d37eb037fc..030ee4ba8a7a 100644
--- a/arch/arm64/mm/mmu.c
+++ b/arch/arm64/mm/mmu.c
@@ -1014,9 +1014,7 @@ static inline bool force_pte_mapping(void)
 	bool bbml2 = system_capabilities_finalized() ?
 		system_supports_bbml2_noabort() : cpu_supports_bbml2_noabort();
 
-	return (!bbml2 && (rodata_full || arm64_kfence_can_set_direct_map() ||
-			   is_realm_world())) ||
-		debug_pagealloc_enabled();
+	return debug_pagealloc_enabled() || (!bbml2 && can_set_direct_map());
 }
 
 static void __init map_mem(pgd_t *pgdp)
diff --git a/arch/arm64/mm/pageattr.c b/arch/arm64/mm/pageattr.c
index 5135f2d66958..60d372c630eb 100644
--- a/arch/arm64/mm/pageattr.c
+++ b/arch/arm64/mm/pageattr.c
@@ -80,7 +80,31 @@ static const struct mm_walk_ops pageattr_ops = {
 	.pte_entry	= pageattr_pte_entry,
 };
 
-bool rodata_full __ro_after_init = true;
+static bool rodata_full __ro_after_init = true;
+
+bool arch_parse_debug_rodata(char *arg)
+{
+	if (!arg)
+		return false;
+
+	if (!strcmp(arg, "on")) {
+		rodata_enabled = rodata_full = true;
+		return true;
+	}
+
+	if (!strcmp(arg, "off")) {
+		rodata_enabled = rodata_full = false;
+		return true;
+	}
+
+	if (!strcmp(arg, "noalias")) {
+		rodata_enabled = true;
+		rodata_full = false;
+		return true;
+	}
+
+	return false;
+}
 
 bool can_set_direct_map(void)
 {
-- 
2.30.2



Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ