Message ID | 20250121115442.1278458-2-sourabhjain@linux.ibm.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | powerpc/crash: use generic crashkernel reservation | expand |
On 21/01/25 5:24 pm, 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. > Acked-by: Hari Bathini <hbathini@linux.ibm.com> > Fixes: a0458284f062 ("powerpc: Add support code for kexec_file_load()") > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Hari Bathini <hbathini@linux.ibm.com> > Cc: Madhavan Srinivasan <maddy@linux.ibm.com> > Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com> > Cc: Michael Ellerman <mpe@ellerman.id.au> > Cc: kexec@lists.infradead.org > Cc: linuxppc-dev@lists.ozlabs.org > Cc: linux-kernel@vger.kernel.org > Acked-by: Baoquan He <bhe@redhat.com> > Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com> > --- > 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; > int ret; > size_t i; >
Hello Hari, On 23/01/25 15:34, Hari Bathini wrote: > > > On 21/01/25 5:24 pm, 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. >> > > Acked-by: Hari Bathini <hbathini@linux.ibm.com> Thanks for the Ack! - Sourabh Jain > >> Fixes: a0458284f062 ("powerpc: Add support code for kexec_file_load()") >> Cc: Andrew Morton <akpm@linux-foundation.org> >> Cc: Hari Bathini <hbathini@linux.ibm.com> >> Cc: Madhavan Srinivasan <maddy@linux.ibm.com> >> Cc: Mahesh Salgaonkar <mahesh@linux.ibm.com> >> Cc: Michael Ellerman <mpe@ellerman.id.au> >> Cc: kexec@lists.infradead.org >> Cc: linuxppc-dev@lists.ozlabs.org >> Cc: linux-kernel@vger.kernel.org >> Acked-by: Baoquan He <bhe@redhat.com> >> Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com> >> --- >> 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; >> int ret; >> size_t i; >
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; int ret; size_t i;