Kexec Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] Before adding to usablemem_rgns, check if the memory range is already included.
@ 2024-10-21 12:00 Chen Haixiang
  2024-11-04  9:29 ` Simon Horman
  0 siblings, 1 reply; 2+ messages in thread
From: Chen Haixiang @ 2024-10-21 12:00 UTC (permalink / raw)
  To: kexec; +Cc: horms, louhongxiang, wangbin224, yangyanchao6, chenhaixiang3

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>
---
 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.41.0


_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2] Before adding to usablemem_rgns, check if the memory range is already included.
  2024-10-21 12:00 [PATCH v2] Before adding to usablemem_rgns, check if the memory range is already included Chen Haixiang
@ 2024-11-04  9:29 ` Simon Horman
  0 siblings, 0 replies; 2+ messages in thread
From: Simon Horman @ 2024-11-04  9:29 UTC (permalink / raw)
  To: Chen Haixiang; +Cc: kexec, louhongxiang, wangbin224, yangyanchao6

On Mon, Oct 21, 2024 at 08:00:25PM +0800, Chen Haixiang wrote:
> 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>

Thanks, applied.

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-11-04  9:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-21 12:00 [PATCH v2] Before adding to usablemem_rgns, check if the memory range is already included Chen Haixiang
2024-11-04  9:29 ` Simon Horman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox