In some cases, such as start < mstart < mend < end when exclude_region(), this results in crash_memory_range[i].end becoming less than crash_memory_range[i].start, leading to incorrect address ranges. Adding a range check should be necessary. Signed-off-by: chenhaixiang chenhaixiang3@xxxxxxxxxx --- kexec/arch/i386/crashdump-x86.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c index a01031e..30e9a41 100644 --- a/kexec/arch/i386/crashdump-x86.c +++ b/kexec/arch/i386/crashdump-x86.c @@ -447,6 +447,14 @@ static int exclude_region(int *nr_ranges, uint64_t start, uint64_t end) else crash_memory_range[i].start = end + 1; } + if (crash_memory_range[i].end < crash_memory_range[i].start) { + /* Crash memory range is unreasonable. */ + fprintf(stderr, "Error: Crash memory range is unreasonable.\n"); + dbgprintf("exclude_region: crash_memory_range[%d]\n" + "start = %016llx,end = %016llx\n", + i, crash_memory_range[i].start, crash_memory_range[i].end); + return -1; + } } /* Insert split memory region, if any. */ if (tidx >= 0) { -- 2.33.0 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec