9 Star 4 Fork 42

src-openEuler/kexec-tools

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
Before-adding-to-usablemem_rgns-check-if-the-memory-.patch 2.22 KB
一键复制 编辑 原始数据 按行查看 历史
From 13e0a9327a42d78b0c0d0f672e02d8013187251a Mon Sep 17 00:00:00 2001
From: Chen Haixiang <chenhaixiang3@huawei.com>
Date: Mon, 21 Oct 2024 20:00:25 +0800
Subject: [PATCH] Before adding to usablemem_rgns, check if the memory range is
already included.
When kexec_iomem_for_each_line() reads from /proc/iomem,
concurrent modifications to /proc/iomem may lead to
usablemem_rgns recording duplicate Crash kernel segments.
This can result in the number of retrieved Crash kernel
segments exceeding CRASH_MAX_RESERVED_RANGES, triggering
a realloc of the crash_reserved_mem in usablemem_rgns,
which could crash the process. We should ensure that each
range added to usablemem_rgns is unique to prevent these issues.
Reviewed-by: Louhongxiang <louhongxiang@huawei.com>
Reviewed-by: wangbin <wangbin224@huawei.com>
Reviewed-by: yangyanchao <yangyanchao6@huawei.com>
Signed-off-by: chenhaixiang <chenhaixiang3@huawei.com>
Signed-off-by: Simon Horman <horms@kernel.org>
---
kexec/arch/arm64/crashdump-arm64.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/kexec/arch/arm64/crashdump-arm64.c b/kexec/arch/arm64/crashdump-arm64.c
index 3098315..f23b2bf 100644
--- a/kexec/arch/arm64/crashdump-arm64.c
+++ b/kexec/arch/arm64/crashdump-arm64.c
@@ -63,10 +63,22 @@ static int iomem_range_callback(void *UNUSED(data), int UNUSED(nr),
char *str, unsigned long long base,
unsigned long long length)
{
- if (strncmp(str, CRASH_KERNEL, strlen(CRASH_KERNEL)) == 0)
+ int i;
+
+ if (strncmp(str, CRASH_KERNEL, strlen(CRASH_KERNEL)) == 0) {
+ /*
+ * Checks whether the area exists in crash_reserved_mem.
+ */
+ for (i = 0; i < usablemem_rgns.max_size; i++) {
+ if (usablemem_rgns.ranges[i].start == base) {
+ fprintf(stderr, "Warning, the range already exists in usablemem_rgns, base=%lx, length=%lx\n",
+ base, length);
+ return 0;
+ }
+ }
return mem_regions_alloc_and_add(&usablemem_rgns,
base, length, RANGE_RAM);
- else if (strncmp(str, SYSTEM_RAM, strlen(SYSTEM_RAM)) == 0)
+ } else if (strncmp(str, SYSTEM_RAM, strlen(SYSTEM_RAM)) == 0)
return mem_regions_alloc_and_add(&system_memory_rgns,
base, length, RANGE_RAM);
else if (strncmp(str, KERNEL_CODE, strlen(KERNEL_CODE)) == 0) {
--
2.43.0
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/src-openeuler/kexec-tools.git
git@gitee.com:src-openeuler/kexec-tools.git
src-openeuler
kexec-tools
kexec-tools
master

搜索帮助

0d507c66 1850385 C8b1a773 1850385