From: Yuntao Wang Date: Thu, 21 Dec 2023 10:17:02 +0000 (+0800) Subject: x86/kexec: fix incorrect end address passed to kernel_ident_mapping_init() X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=3177e6315b12839ea7be2810ae6b461b123e026e;p=linux.git x86/kexec: fix incorrect end address passed to kernel_ident_mapping_init() kernel_ident_mapping_init() takes an exclusive memory range [pstart, pend) where pend is not included in the range, while res represents an inclusive memory range [start, end] where end is considered part of the range. Passing [start, end] rather than [start, end+1) to kernel_ident_mapping_init() may result in the identity mapping for the end address not being set up. For example, when res->start is equal to res->end, kernel_ident_mapping_init() will not establish any identity mapping. Similarly, when the value of res->end is a multiple of 2M and the page table maps 2M pages, kernel_ident_mapping_init() will also not set up identity mapping for res->end. Therefore, passing res->end directly to kernel_ident_mapping_init() is incorrect, the correct end address should be `res->end + 1`. Link: https://lkml.kernel.org/r/20231221101702.20956-1-ytcoode@gmail.com Signed-off-by: Yuntao Wang Cc: Baoquan He Cc: Bjorn Helgaas Cc: Borislav Petkov (AMD) Cc: Dave Hansen Cc: "H. Peter Anvin" Cc: Ingo Molnar Cc: Simon Horman Cc: Thomas Gleixner Signed-off-by: Andrew Morton --- diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index 6f8df998890ef..bc0a5348b4a62 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c @@ -44,7 +44,7 @@ static int mem_region_callback(struct resource *res, void *arg) struct init_pgtable_data *data = arg; return kernel_ident_mapping_init(data->info, data->level4p, - res->start, res->end); + res->start, res->end + 1); } static int