On Tue, Nov 25, 2025 at 6:16 AM Andrew Morton <[email protected]> wrote: > > On Thu, 6 Nov 2025 14:59:03 +0800 Pingfan Liu <[email protected]> wrote: > > > The kexec segment index will be required to extract the corresponding > > information for that segment in kimage_map_segment(). Additionally, > > kexec_segment already holds the kexec relocation destination address and > > size. Therefore, the prototype of kimage_map_segment() can be changed. > > Could we please have some reviewer input on thee two patches? > > Thanks. > > (Pingfan, please cc linux-kernel on patches - it's where people go to > find emails on lists which they aren't suscribed to) > OK, I will cc linux-kernel for the future kexec patches
For this series, it can also be found on https://lore.kernel.org/linux-integrity/[email protected]/ Thanks, Pingfan > (akpm goes off and subscribes to kexec@) > > > Fixes: 07d24902977e ("kexec: enable CMA based contiguous allocation") > > Signed-off-by: Pingfan Liu <[email protected]> > > Cc: Andrew Morton <[email protected]> > > Cc: Baoquan He <[email protected]> > > Cc: Mimi Zohar <[email protected]> > > Cc: Roberto Sassu <[email protected]> > > Cc: Alexander Graf <[email protected]> > > Cc: Steven Chen <[email protected]> > > Cc: <[email protected]> > > To: [email protected] > > To: [email protected] > > --- > > include/linux/kexec.h | 4 ++-- > > kernel/kexec_core.c | 9 ++++++--- > > security/integrity/ima/ima_kexec.c | 4 +--- > > 3 files changed, 9 insertions(+), 8 deletions(-) > > > > diff --git a/include/linux/kexec.h b/include/linux/kexec.h > > index ff7e231b0485..8a22bc9b8c6c 100644 > > --- a/include/linux/kexec.h > > +++ b/include/linux/kexec.h > > @@ -530,7 +530,7 @@ extern bool kexec_file_dbg_print; > > #define kexec_dprintk(fmt, arg...) \ > > do { if (kexec_file_dbg_print) pr_info(fmt, ##arg); } while (0) > > > > -extern void *kimage_map_segment(struct kimage *image, unsigned long addr, > > unsigned long size); > > +extern void *kimage_map_segment(struct kimage *image, int idx); > > extern void kimage_unmap_segment(void *buffer); > > #else /* !CONFIG_KEXEC_CORE */ > > struct pt_regs; > > @@ -540,7 +540,7 @@ static inline void __crash_kexec(struct pt_regs *regs) > > { } > > static inline void crash_kexec(struct pt_regs *regs) { } > > static inline int kexec_should_crash(struct task_struct *p) { return 0; } > > static inline int kexec_crash_loaded(void) { return 0; } > > -static inline void *kimage_map_segment(struct kimage *image, unsigned long > > addr, unsigned long size) > > +static inline void *kimage_map_segment(struct kimage *image, int idx) > > { return NULL; } > > static inline void kimage_unmap_segment(void *buffer) { } > > #define kexec_in_progress false > > diff --git a/kernel/kexec_core.c b/kernel/kexec_core.c > > index fa00b239c5d9..9a1966207041 100644 > > --- a/kernel/kexec_core.c > > +++ b/kernel/kexec_core.c > > @@ -960,17 +960,20 @@ int kimage_load_segment(struct kimage *image, int idx) > > return result; > > } > > > > -void *kimage_map_segment(struct kimage *image, > > - unsigned long addr, unsigned long size) > > +void *kimage_map_segment(struct kimage *image, int idx) > > { > > + unsigned long addr, size, eaddr; > > unsigned long src_page_addr, dest_page_addr = 0; > > - unsigned long eaddr = addr + size; > > kimage_entry_t *ptr, entry; > > struct page **src_pages; > > unsigned int npages; > > void *vaddr = NULL; > > int i; > > > > + addr = image->segment[idx].mem; > > + size = image->segment[idx].memsz; > > + eaddr = addr + size; > > + > > /* > > * Collect the source pages and map them in a contiguous VA range. > > */ > > diff --git a/security/integrity/ima/ima_kexec.c > > b/security/integrity/ima/ima_kexec.c > > index 7362f68f2d8b..5beb69edd12f 100644 > > --- a/security/integrity/ima/ima_kexec.c > > +++ b/security/integrity/ima/ima_kexec.c > > @@ -250,9 +250,7 @@ void ima_kexec_post_load(struct kimage *image) > > if (!image->ima_buffer_addr) > > return; > > > > - ima_kexec_buffer = kimage_map_segment(image, > > - image->ima_buffer_addr, > > - image->ima_buffer_size); > > + ima_kexec_buffer = kimage_map_segment(image, > > image->ima_segment_index); > > if (!ima_kexec_buffer) { > > pr_err("Could not map measurements buffer.\n"); > > return; > > -- > > 2.49.0 >
