[PATCH v2 08/10] LoongArch/pez: Fix kernel_fd handling when kexec_file is supported
Youling Tang
youling.tang at linux.dev
Mon Sep 15 18:46:53 PDT 2025
From: Youling Tang <tangyouling at kylinos.cn>
After the current pez kernel image is decompressed and loaded, this kernel_fd
will be released. When kexec_file is added subsequently, the kernel detects
that the content in kernel_fd is empty, causing the kernel loading to fail.
Therefore, kernel_fd is rewritten for processing.
Signed-off-by: Youling Tang <tangyouling at kylinos.cn>
---
kexec/arch/loongarch/kexec-pez-loongarch.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/kexec/arch/loongarch/kexec-pez-loongarch.c b/kexec/arch/loongarch/kexec-pez-loongarch.c
index 942a47c..e78909c 100644
--- a/kexec/arch/loongarch/kexec-pez-loongarch.c
+++ b/kexec/arch/loongarch/kexec-pez-loongarch.c
@@ -64,13 +64,17 @@ int pez_loongarch_load(int argc, char **argv, const char *buf, off_t len,
if (kernel_fd > 0 && decompressed_size > 0) {
char *kbuf;
off_t nread;
+ int fd;
+ if (info->kernel_fd > 0)
+ close(info->kernel_fd);
info->kernel_fd = kernel_fd;
- /*
- * slurp_fd will close kernel_fd, but it is safe here
- * due to no kexec_file_load support.
- */
- kbuf = slurp_fd(kernel_fd, NULL, decompressed_size, &nread);
+ fd = dup(kernel_fd);
+ if (fd < 0) {
+ dbgprintf("%s: dup fd failed.\n", __func__);
+ return -1;
+ }
+ kbuf = slurp_fd(fd, NULL, decompressed_size, &nread);
if (!kbuf || nread != decompressed_size) {
dbgprintf("%s: slurp_fd failed.\n", __func__);
return -1;
--
2.34.1
More information about the kexec
mailing list