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] [thread-next>] [day] [month] [year] [list]
Message-ID: <3F79DD89-BE1E-456F-9297-273DDBB4E12A@flygoat.com>
Date:   Sat, 19 Sep 2020 15:02:38 +0800
From:   Jiaxun Yang <jiaxun.yang@...goat.com>
To:     Youling Tang <tangyouling@...ngson.cn>,
        Thomas Bogendoerfer <tsbogend@...ha.franken.de>
CC:     linux-mips@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] MIPS: kexec: Add crashkernel=YM handling



于 2020年9月19日 GMT+08:00 上午9:55:46, Youling Tang <tangyouling@...ngson.cn> 写到:
>When the kernel crashkernel parameter is specified with just a size,
>we are supposed to allocate a region from RAM to store the crashkernel.
>However, MIPS merely reserves physical address zero with no checking
>that there is even RAM there.
>
>Fix this by lifting similar code from x86, importing it to MIPS with the
>MIPS specific parameters added. In the absence of any platform specific
>information, we allocate the crashkernel region from the first 512MB of
>physical memory (limited to CKSEG0 or KSEG0 address range).
>
>When X is not specified, crash_base defaults to 0 (crashkernel=YM@XM).
>
>E.g. without this patch:
>
>The environment as follows:
>[    0.000000] MIPS: machine is loongson,loongson64c-4core-ls7a
>...
>[    0.000000] Kernel command line: root=/dev/sda2 crashkernel=96M ...
>
>The warning as follows:
>[    0.000000] Invalid memory region reserved for crash kernel
>
>And the iomem as follows:
>00200000-0effffff : System RAM
>  00200000-00b47f87 : Kernel code
>  00b47f88-00dfffff : Kernel data
>  00e60000-01f73c7f : Kernel bss
>1a000000-1bffffff : pci@...00000
>...
>
>With this patch:
>
>After increasing crash_base <= 0 handling.
>
>And the iomem as follows:
>00200000-0effffff : System RAM
>  00200000-00b47f87 : Kernel code
>  00b47f88-00dfffff : Kernel data
>  00e60000-01f73c7f : Kernel bss
>  04000000-09ffffff : Crash kernel
>1a000000-1bffffff : pci@...00000
>...
>
>Signed-off-by: Youling Tang <tangyouling@...ngson.cn>
>---
> arch/mips/kernel/setup.c | 24 +++++++++++++++++++++---
> 1 file changed, 21 insertions(+), 3 deletions(-)
>
>diff --git a/arch/mips/kernel/setup.c b/arch/mips/kernel/setup.c
>index bf5f5ac..59a88ea 100644
>--- a/arch/mips/kernel/setup.c
>+++ b/arch/mips/kernel/setup.c
>@@ -477,6 +477,11 @@ early_param("elfcorehdr", early_parse_elfcorehdr);
> #endif
> 
> #ifdef CONFIG_KEXEC
>+
>+/* 64M alignment for crash kernel regions */
>+#define CRASH_ALIGN	SZ_64M
>+#define CRASH_ADDR_MAX	SZ_512M

Hi Youling

How do you determine the alignment requirement?

Can we relax it?

Thanks.

- Jiaxun

>+
> static void __init mips_parse_crashkernel(void)
> {
> 	unsigned long long total_mem;
>@@ -489,9 +494,22 @@ static void __init mips_parse_crashkernel(void)
> 	if (ret != 0 || crash_size <= 0)
> 		return;
> 
>-	if (!memblock_find_in_range(crash_base, crash_base + crash_size, crash_size, 1)) {
>-		pr_warn("Invalid memory region reserved for crash kernel\n");
>-		return;
>+	if (crash_base <= 0) {
>+		crash_base = memblock_find_in_range(CRASH_ALIGN, CRASH_ADDR_MAX,
>+							crash_size, CRASH_ALIGN);
>+		if (!crash_base) {
>+			pr_warn("crashkernel reservation failed - No suitable area found.\n");
>+			return;
>+		}
>+	} else {
>+		unsigned long long start;
>+
>+		start = memblock_find_in_range(crash_base, crash_base + crash_size,
>+						crash_size, 1);
>+		if (start != crash_base) {
>+			pr_warn("Invalid memory region reserved for crash kernel\n");
>+			return;
>+		}
> 	}
> 
> 	crashk_res.start = crash_base;

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ