* Re: [PATCH] riscv: Fix a NULL pointer reference in machine_kexec_prepare [not found] ` <CAP_BRoQEM8Re1dT7JNQgO72o50GAnb2y7R1HWPd+E772GVYAJg@mail.gmail.com> @ 2026-06-29 11:12 ` Pratyush Yadav 2026-07-01 3:29 ` Tao Liu 0 siblings, 1 reply; 3+ messages in thread From: Pratyush Yadav @ 2026-06-29 11:12 UTC (permalink / raw) To: Baoquan He Cc: Tao Liu, kexec, pjw, palmer, aou, alex, Mimi Zohar, Roberto Sassu, Dmitry Kasatkin, Eric Snowberg, linux-integrity, linux-riscv, linux-kernel +Cc IMA maintainers On Fri, Jun 26 2026, Baoquan He wrote: > Add kexec ML to CC. > > On Fri, Jun 26, 2026 at 7:46 AM Tao Liu <ltao@redhat.com> wrote: >> >> Kindly ping, any comments? >> >> Thanks, >> Tao Liu >> >> On Fri, May 29, 2026 at 3:35 PM Tao Liu <ltao@redhat.com> wrote: >> > >> > A NULL pointer reference issue is noticed in riscv's machine_kexec_prepare, >> > where image->segment[i].buf might be NULL and copied unchecked. >> > >> > The NULL buf comes from security/integrity/ima/ima_kexec.c: >> > ima_add_kexec_buffer(), where kbuf is added by kexec_add_buffer(), >> > but kbuf.buffer is NULL. >> > >> > Fix this by simply adding a check before copy. >> > >> > Signed-off-by: Tao Liu <ltao@redhat.com> >> > --- >> > arch/riscv/kernel/machine_kexec.c | 3 +++ >> > 1 file changed, 3 insertions(+) >> > >> > diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c >> > index 2306ce3e5f22..d81d576f9cb5 100644 >> > --- a/arch/riscv/kernel/machine_kexec.c >> > +++ b/arch/riscv/kernel/machine_kexec.c >> > @@ -41,6 +41,9 @@ machine_kexec_prepare(struct kimage *image) >> > if (image->segment[i].memsz <= sizeof(fdt)) >> > continue; >> > >> > + if (image->segment[i].buf == NULL) >> > + continue; >> > + > > This is a good fix, maybe we can add code comments to explain it as > below, just for reference. > > /* > * Some segments (e.g. IMA) reserve space but have no buffer > * loaded yet. Skip them as they cannot contain an FDT. > */ > And is there any other place where the similar issue exists? e.g on LoongArch? > > Other than above concerns, this patch looks good to me: > > Acked-by: Baoquan He <bhe@redhat.com> Yeah, the patch LGTM to me too. Acked-by: Pratyush Yadav <pratyush@kernel.org> Although I think IMA can make this a bit easier to understand. First, in ima_add_kexec_buffer() it should set kbuf.buffer to NULL and kbuf.bufsz to 0 explicitly instead of using kexec_buffer and kexec_buffer_size which are initialized to NULL and 0, but never updated. Using the variables here adds an extra level of indirection. Also, perhaps we should add a comment in ima_add_kexec_buffer() about how this all works, since where the IMA buffer lives and where it gets updated it fairly complicated and took me some time to piece together. -- Regards, Pratyush Yadav ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] riscv: Fix a NULL pointer reference in machine_kexec_prepare 2026-06-29 11:12 ` [PATCH] riscv: Fix a NULL pointer reference in machine_kexec_prepare Pratyush Yadav @ 2026-07-01 3:29 ` Tao Liu 2026-07-01 12:08 ` Pratyush Yadav 0 siblings, 1 reply; 3+ messages in thread From: Tao Liu @ 2026-07-01 3:29 UTC (permalink / raw) To: Pratyush Yadav Cc: Baoquan He, kexec, pjw, palmer, aou, alex, Mimi Zohar, Roberto Sassu, Dmitry Kasatkin, Eric Snowberg, linux-integrity, linux-riscv, linux-kernel Hi Pratyush, On Mon, Jun 29, 2026 at 11:13 PM Pratyush Yadav <pratyush@kernel.org> wrote: > > +Cc IMA maintainers > > On Fri, Jun 26 2026, Baoquan He wrote: > > > Add kexec ML to CC. > > > > On Fri, Jun 26, 2026 at 7:46 AM Tao Liu <ltao@redhat.com> wrote: > >> > >> Kindly ping, any comments? > >> > >> Thanks, > >> Tao Liu > >> > >> On Fri, May 29, 2026 at 3:35 PM Tao Liu <ltao@redhat.com> wrote: > >> > > >> > A NULL pointer reference issue is noticed in riscv's machine_kexec_prepare, > >> > where image->segment[i].buf might be NULL and copied unchecked. > >> > > >> > The NULL buf comes from security/integrity/ima/ima_kexec.c: > >> > ima_add_kexec_buffer(), where kbuf is added by kexec_add_buffer(), > >> > but kbuf.buffer is NULL. > >> > > >> > Fix this by simply adding a check before copy. > >> > > >> > Signed-off-by: Tao Liu <ltao@redhat.com> > >> > --- > >> > arch/riscv/kernel/machine_kexec.c | 3 +++ > >> > 1 file changed, 3 insertions(+) > >> > > >> > diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c > >> > index 2306ce3e5f22..d81d576f9cb5 100644 > >> > --- a/arch/riscv/kernel/machine_kexec.c > >> > +++ b/arch/riscv/kernel/machine_kexec.c > >> > @@ -41,6 +41,9 @@ machine_kexec_prepare(struct kimage *image) > >> > if (image->segment[i].memsz <= sizeof(fdt)) > >> > continue; > >> > > >> > + if (image->segment[i].buf == NULL) > >> > + continue; > >> > + > > > > This is a good fix, maybe we can add code comments to explain it as > > below, just for reference. > > > > /* > > * Some segments (e.g. IMA) reserve space but have no buffer > > * loaded yet. Skip them as they cannot contain an FDT. > > */ > > And is there any other place where the similar issue exists? e.g on LoongArch? > > > > Other than above concerns, this patch looks good to me: > > > > Acked-by: Baoquan He <bhe@redhat.com> > > Yeah, the patch LGTM to me too. > > Acked-by: Pratyush Yadav <pratyush@kernel.org> > > Although I think IMA can make this a bit easier to understand. First, in > ima_add_kexec_buffer() it should set kbuf.buffer to NULL and kbuf.bufsz > to 0 explicitly instead of using kexec_buffer and kexec_buffer_size > which are initialized to NULL and 0, but never updated. Using the > variables here adds an extra level of indirection. > > Also, perhaps we should add a comment in ima_add_kexec_buffer() about > how this all works, since where the IMA buffer lives and where it gets > updated it fairly complicated and took me some time to piece together. Thanks for your patch review and suggestions! I agree with your point on the IMA part, I was confused by the code too, e.g in ima_add_kexec_buffer(): void *kexec_buffer = NULL; kbuf.buffer = kexec_buffer; ret = kexec_add_buffer(&kbuf); if (ret) { pr_err("Error passing over kexec measurement buffer.\n"); vfree(kexec_buffer); return; } Do we need to vfree(kexec_buffer)? When kexec_buffer is NULL and seems never get updated. I'm not familiar with IMA code, maybe there is a reason which I'm unaware of... Thanks, Tao Liu > > -- > Regards, > Pratyush Yadav > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] riscv: Fix a NULL pointer reference in machine_kexec_prepare 2026-07-01 3:29 ` Tao Liu @ 2026-07-01 12:08 ` Pratyush Yadav 0 siblings, 0 replies; 3+ messages in thread From: Pratyush Yadav @ 2026-07-01 12:08 UTC (permalink / raw) To: Tao Liu Cc: Pratyush Yadav, Baoquan He, kexec, pjw, palmer, aou, alex, Mimi Zohar, Roberto Sassu, Dmitry Kasatkin, Eric Snowberg, linux-integrity, linux-riscv, linux-kernel On Wed, Jul 01 2026, Tao Liu wrote: > Hi Pratyush, > > On Mon, Jun 29, 2026 at 11:13 PM Pratyush Yadav <pratyush@kernel.org> wrote: >> >> +Cc IMA maintainers >> >> On Fri, Jun 26 2026, Baoquan He wrote: >> >> > Add kexec ML to CC. >> > >> > On Fri, Jun 26, 2026 at 7:46 AM Tao Liu <ltao@redhat.com> wrote: >> >> >> >> Kindly ping, any comments? >> >> >> >> Thanks, >> >> Tao Liu >> >> >> >> On Fri, May 29, 2026 at 3:35 PM Tao Liu <ltao@redhat.com> wrote: >> >> > >> >> > A NULL pointer reference issue is noticed in riscv's machine_kexec_prepare, >> >> > where image->segment[i].buf might be NULL and copied unchecked. >> >> > >> >> > The NULL buf comes from security/integrity/ima/ima_kexec.c: >> >> > ima_add_kexec_buffer(), where kbuf is added by kexec_add_buffer(), >> >> > but kbuf.buffer is NULL. >> >> > >> >> > Fix this by simply adding a check before copy. >> >> > >> >> > Signed-off-by: Tao Liu <ltao@redhat.com> >> >> > --- >> >> > arch/riscv/kernel/machine_kexec.c | 3 +++ >> >> > 1 file changed, 3 insertions(+) >> >> > >> >> > diff --git a/arch/riscv/kernel/machine_kexec.c b/arch/riscv/kernel/machine_kexec.c >> >> > index 2306ce3e5f22..d81d576f9cb5 100644 >> >> > --- a/arch/riscv/kernel/machine_kexec.c >> >> > +++ b/arch/riscv/kernel/machine_kexec.c >> >> > @@ -41,6 +41,9 @@ machine_kexec_prepare(struct kimage *image) >> >> > if (image->segment[i].memsz <= sizeof(fdt)) >> >> > continue; >> >> > >> >> > + if (image->segment[i].buf == NULL) >> >> > + continue; >> >> > + >> > >> > This is a good fix, maybe we can add code comments to explain it as >> > below, just for reference. >> > >> > /* >> > * Some segments (e.g. IMA) reserve space but have no buffer >> > * loaded yet. Skip them as they cannot contain an FDT. >> > */ >> > And is there any other place where the similar issue exists? e.g on LoongArch? >> > >> > Other than above concerns, this patch looks good to me: >> > >> > Acked-by: Baoquan He <bhe@redhat.com> >> >> Yeah, the patch LGTM to me too. >> >> Acked-by: Pratyush Yadav <pratyush@kernel.org> >> >> Although I think IMA can make this a bit easier to understand. First, in >> ima_add_kexec_buffer() it should set kbuf.buffer to NULL and kbuf.bufsz >> to 0 explicitly instead of using kexec_buffer and kexec_buffer_size >> which are initialized to NULL and 0, but never updated. Using the >> variables here adds an extra level of indirection. >> >> Also, perhaps we should add a comment in ima_add_kexec_buffer() about >> how this all works, since where the IMA buffer lives and where it gets >> updated it fairly complicated and took me some time to piece together. > > Thanks for your patch review and suggestions! I agree with your point > on the IMA part, I was confused by the code too, e.g in > ima_add_kexec_buffer(): > > void *kexec_buffer = NULL; > kbuf.buffer = kexec_buffer; > ret = kexec_add_buffer(&kbuf); > if (ret) { > pr_err("Error passing over kexec measurement buffer.\n"); > vfree(kexec_buffer); > return; > } > > Do we need to vfree(kexec_buffer)? When kexec_buffer is NULL and seems > never get updated. > > I'm not familiar with IMA code, maybe there is a reason which I'm unaware of... I think it is just leftover from refactors. kexec_buffer used to point to an actual buffer at some point and refactors to the function left them always NULL but never removed them. -- Regards, Pratyush Yadav ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-01 12:08 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20260529032739.13264-2-ltao@redhat.com>
[not found] ` <CAO7dBbW+LEy8SBGAKcrxEDzK5Xctw-r7ztgnXuURa9g0xntbtQ@mail.gmail.com>
[not found] ` <CAP_BRoQEM8Re1dT7JNQgO72o50GAnb2y7R1HWPd+E772GVYAJg@mail.gmail.com>
2026-06-29 11:12 ` [PATCH] riscv: Fix a NULL pointer reference in machine_kexec_prepare Pratyush Yadav
2026-07-01 3:29 ` Tao Liu
2026-07-01 12:08 ` Pratyush Yadav
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox