From: Youling Tang <[email protected]>

Automatically disable kaslr when the kernel loads from kexec_file.

kexec_file loads the secondary kernel image to a non-linked address,
inherently providing KASLR-like randomization.

However, on LoongArch where System RAM may be non-contiguous, enabling
KASLR for the second kernel could relocate it to an invalid memory
region and cause boot failure. Thus, we disable KASLR when
"kexec_file" is detected in the command line.

To ensure compatibility with older kernels loaded via kexec_file,
this patch need be backported to stable branches.

Cc: [email protected]
Signed-off-by: Youling Tang <[email protected]>
---
 arch/loongarch/kernel/relocate.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/loongarch/kernel/relocate.c b/arch/loongarch/kernel/relocate.c
index 50c469067f3a..4c097532cb88 100644
--- a/arch/loongarch/kernel/relocate.c
+++ b/arch/loongarch/kernel/relocate.c
@@ -140,6 +140,10 @@ static inline __init bool kaslr_disabled(void)
        if (str == boot_command_line || (str > boot_command_line && *(str - 1) 
== ' '))
                return true;
 
+       str = strstr(boot_command_line, "kexec_file");
+       if (str == boot_command_line || (str > boot_command_line && *(str - 1) 
== ' '))
+               return true;
+
 #ifdef CONFIG_HIBERNATION
        str = strstr(builtin_cmdline, "nohibernate");
        if (str == builtin_cmdline || (str > builtin_cmdline && *(str - 1) == ' 
'))
-- 
2.43.0


Reply via email to