Re: [PATCH v2 3/4] kexec: print out debugging message if required for kexec_load
From: Qiang Ma
Date: Wed Nov 05 2025 - 10:06:10 EST
On 2025/11/5 下午9:01, Baoquan He wrote:
On 11/05/25 at 07:28pm, Qiang Ma wrote:Is it necessary to verify the user-space data after it is passed to the kernel space?
在 2025/11/5 16:55, Baoquan He 写道:Sorry, I can't support that. We all prepare the loading segments for the
On 11/05/25 at 04:35pm, Qiang Ma wrote:There is a problem with what I expressed.
在 2025/11/5 15:53, Baoquan He 写道:print_segments() in kexec-tools/kexec/kexec.c is a generic function,
On 11/05/25 at 11:41am, Qiang Ma wrote:It's not entirely because of it.
在 2025/11/5 11:01, Baoquan He 写道:Hmm, that's not necessary with a debug printing to verify value passed
On 11/03/25 at 02:34pm, Qiang Ma wrote:I have tested it, kexec-tools is the debug message printed
The commit a85ee18c7900 ("kexec_file: print out debugging messageThere has already been a print_segments() in kexec-tools/kexec/kexec.c,
if required") has added general code printing in kexec_file_load(),
but not in kexec_load().
Especially in the RISC-V architecture, kexec_image_info() has been
removed(commit eb7622d908a0 ("kexec_file, riscv: print out debugging
message if required")). As a result, when using '-d' for the kexec_load
interface, print nothing in the kernel space. This might be helpful for
verifying the accuracy of the data passed to the kernel. Therefore,
refer to this commit a85ee18c7900 ("kexec_file: print out debugging
message if required"), debug print information has been added.
Signed-off-by: Qiang Ma <maqianga@xxxxxxxxxxxxx>
Reported-by: kernel test robot <lkp@xxxxxxxxx>
Closes: https://lore.kernel.org/oe-kbuild-all/202510310332.6XrLe70K-lkp@xxxxxxxxx/
---
kernel/kexec.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index c7a869d32f87..9b433b972cc1 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -154,7 +154,15 @@ static int do_kexec_load(unsigned long entry, unsigned long nr_segments,
if (ret)
goto out;
+ kexec_dprintk("nr_segments = %lu\n", nr_segments);
for (i = 0; i < nr_segments; i++) {
+ struct kexec_segment *ksegment;
+
+ ksegment = &image->segment[i];
+ kexec_dprintk("segment[%lu]: buf=0x%p bufsz=0x%zx mem=0x%lx memsz=0x%zx\n",
+ i, ksegment->buf, ksegment->bufsz, ksegment->mem,
+ ksegment->memsz);
you will get duplicated printing. That sounds not good. Have you tested
this?
in user space, while kexec_dprintk is printed
in kernel space.
This might be helpful for verifying the accuracy of
the data passed to the kernel.
in kernel. We should only add debug pringing when we need but lack it.
I didn't check it carefully, if you add the debug printing only for
verifying accuracy, that doesn't justify the code change.
Another reason is that for RISC-V, for kexec_file_load interface,
kexec_image_info() was deleted at that time because the content
has been printed out in generic code.
However, these contents were not printed in kexec_load because
kexec_image_info was deleted. So now it has been added.
shouldn't you make it called in kexec-tools for risc-v? I am confused by
the purpose of this patchset.
I don't want to add print_segments to riscv.
I want to add some debugging message(ksegment,kimage,flag) for kexec_load.
Although ksegment debugging message has been printed in kexec-tools,
it is still helpful for debugging the kernel space function.
future jumping in kexec_tools if it's kexec_load interface. And calling
print_segments() to print those loading information is natural. Why do we
need print them two times for verifying if the printing is accuracy?
Could you explain why risc-v is special?At first, when I saw that in the RISC-V architecture,
after kexec_image_info was removed from this commit eb7622d908a0
("kexec_file, riscv: print out debugging message if required"),
I thought only kexec_file_load was taken into consideration.
However, without considering that kexec_load would call
kexec_image_info to print segment and other debugging message,
I think that since it has been deleted.
Then, I referred to kexec_file_load and added these debugging message
to the general code of kexec_load. In this way, all architectures can
print these general debugging message.
Then I can add these debugging message to the general code,
so that all architectures can print these general debugging message.
+
ret = kimage_load_segment(image, i);
if (ret)
goto out;
@@ -166,6 +174,9 @@ static int do_kexec_load(unsigned long entry, unsigned long nr_segments,
if (ret)
goto out;
+ kexec_dprintk("kexec_load: type:%u, start:0x%lx head:0x%lx flags:0x%lx\n",
+ image->type, image->start, image->head, flags);
+
/* Install the new kernel and uninstall the old */
image = xchg(dest_image, image);
--
2.20.1