public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] kexec: avoid out of bounds in crash_exclude_mem_range()
@ 2023-11-27  2:56 fuqiang wang
  2023-11-30  7:44 ` Baoquan He
  0 siblings, 1 reply; 15+ messages in thread
From: fuqiang wang @ 2023-11-27  2:56 UTC (permalink / raw)
  To: Baoquan He, Vivek Goyal, Dave Young; +Cc: kexec, linux-kernel

When the split happened, judge whether mem->nr_ranges is equal to
mem->max_nr_ranges. If it is true, return -ENOMEM.

The advantage of doing this is that it can avoid array bounds caused by
some bugs. E.g., Before commit 4831be702b95 ("arm64/kexec: Fix missing
extra range for crashkres_low."), reserve both high and low memories for
the crashkernel may cause out of bounds.

On the other hand, move this code before the split to ensure that the
array will not be changed when return error.

Signed-off-by: fuqiang wang <fuqiang.wang@easystack.cn>
---
 kernel/crash_core.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/kernel/crash_core.c b/kernel/crash_core.c
index efe87d501c8c..ffdc246cf425 100644
--- a/kernel/crash_core.c
+++ b/kernel/crash_core.c
@@ -611,6 +611,9 @@ int crash_exclude_mem_range(struct crash_mem *mem,
 		}
 
 		if (p_start > start && p_end < end) {
+			/* Split happened */
+			if (mem->nr_ranges == mem->max_nr_ranges)
+				return -ENOMEM;
 			/* Split original range */
 			mem->ranges[i].end = p_start - 1;
 			temp_range.start = p_end + 1;
@@ -626,9 +629,6 @@ int crash_exclude_mem_range(struct crash_mem *mem,
 	if (!temp_range.end)
 		return 0;
 
-	/* Split happened */
-	if (i == mem->max_nr_ranges - 1)
-		return -ENOMEM;
 
 	/* Location where new range should go */
 	j = i + 1;
-- 
2.42.0


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

end of thread, other threads:[~2023-12-19 13:04 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-27  2:56 [PATCH] kexec: avoid out of bounds in crash_exclude_mem_range() fuqiang wang
2023-11-30  7:44 ` Baoquan He
2023-11-30 13:20   ` fuqiang wang
2023-12-13  4:44     ` Baoquan He
2023-12-13 13:10       ` fuqiang wang
2023-12-14  9:17         ` Baoquan He
2023-12-14 10:29     ` Baoquan He
2023-12-18  8:31       ` fuqiang wang
2023-12-19  2:42         ` Yuntao Wang
2023-12-19  2:47         ` Yuntao Wang
2023-12-19  3:50           ` fuqiang wang
2023-12-19  5:29             ` Yuntao Wang
2023-12-19  8:55               ` fuqiang wang
2023-12-19 10:39                 ` Yuntao Wang
2023-12-19 12:54                   ` fuqiang wang

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