On 12/10/24 at 02:43pm, Sourabh Jain wrote: > kexec_elf_load() loads an ELF executable and sets the address of the > lowest PT_LOAD section to the address held by the lowest_load_addr > function argument. > > To determine the lowest PT_LOAD address, a local variable lowest_addr > (type unsigned long) is initialized to UINT_MAX. After loading each > PT_LOAD, its address is compared to lowest_addr. If a loaded PT_LOAD > address is lower, lowest_addr is updated. However, setting lowest_addr > to UINT_MAX won't work when the kernel image is loaded above 4G, as the > returned lowest PT_LOAD address would be invalid. This is resolved by > initializing lowest_addr to ULONG_MAX instead. > > This issue was discovered while implementing crashkernel high/low > reservation on the PowerPC architecture. > > Fixes: a0458284f062 ("powerpc: Add support code for kexec_file_load()") > Cc: Baoquan he <bhe@xxxxxxxxxx> > Cc: Hari Bathini <hbathini@xxxxxxxxxxxxx> > CC: Madhavan Srinivasan <maddy@xxxxxxxxxxxxx> > Cc: Michael Ellerman <mpe@xxxxxxxxxxxxxx> > Cc: kexec@xxxxxxxxxxxxxxxxxxx > Cc: linuxppc-dev@xxxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Signed-off-by: Sourabh Jain <sourabhjain@xxxxxxxxxxxxx> > --- > kernel/kexec_elf.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/kexec_elf.c b/kernel/kexec_elf.c > index d3689632e8b9..3a5c25b2adc9 100644 > --- a/kernel/kexec_elf.c > +++ b/kernel/kexec_elf.c > @@ -390,7 +390,7 @@ int kexec_elf_load(struct kimage *image, struct elfhdr *ehdr, > struct kexec_buf *kbuf, > unsigned long *lowest_load_addr) > { > - unsigned long lowest_addr = UINT_MAX; > + unsigned long lowest_addr = ULONG_MAX; Great catch. Acked-by: Baoquan He <bhe@xxxxxxxxxx> > int ret; > size_t i; > > -- > 2.47.1 >