[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260119032424.10781-8-piliu@redhat.com>
Date: Mon, 19 Jan 2026 11:24:18 +0800
From: Pingfan Liu <piliu@...hat.com>
To: kexec@...ts.infradead.org
Cc: Pingfan Liu <piliu@...hat.com>,
"David S. Miller" <davem@...emloft.net>,
Alexei Starovoitov <ast@...nel.org>,
Daniel Borkmann <daniel@...earbox.net>,
John Fastabend <john.fastabend@...il.com>,
Andrii Nakryiko <andrii@...nel.org>,
Martin KaFai Lau <martin.lau@...ux.dev>,
Eduard Zingerman <eddyz87@...il.com>,
Song Liu <song@...nel.org>,
Yonghong Song <yonghong.song@...ux.dev>,
Jeremy Linton <jeremy.linton@....com>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Ard Biesheuvel <ardb@...nel.org>,
Simon Horman <horms@...nel.org>,
Gerd Hoffmann <kraxel@...hat.com>,
Vitaly Kuznetsov <vkuznets@...hat.com>,
Philipp Rudo <prudo@...hat.com>,
Viktor Malik <vmalik@...hat.com>,
Jan Hendrik Farr <kernel@...rr.cc>,
Baoquan He <bhe@...hat.com>,
Dave Young <dyoung@...hat.com>,
Andrew Morton <akpm@...ux-foundation.org>,
bpf@...r.kernel.org,
systemd-devel@...ts.freedesktop.org,
linux-kernel@...r.kernel.org
Subject: [PATCHv6 07/13] kexec_file: Implement copy method for parser
Copying the bpf code parsing result to the proper place:
image->kernel_buf, initrd_buf, cmdline_buf.
Signed-off-by: Pingfan Liu <piliu@...hat.com>
Cc: Baoquan He <bhe@...hat.com>
Cc: Dave Young <dyoung@...hat.com>
Cc: Andrew Morton <akpm@...ux-foundation.org>
Cc: Philipp Rudo <prudo@...hat.com>
To: kexec@...ts.infradead.org
---
kernel/kexec_bpf_loader.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/kernel/kexec_bpf_loader.c b/kernel/kexec_bpf_loader.c
index bd6a47fc53ed3..5ad67672dead1 100644
--- a/kernel/kexec_bpf_loader.c
+++ b/kernel/kexec_bpf_loader.c
@@ -82,6 +82,7 @@ static int __init kexec_bpf_prog_run_init(void)
late_initcall(kexec_bpf_prog_run_init);
#define KEXEC_BPF_CMD_DECOMPRESS 0x1
+#define KEXEC_BPF_CMD_COPY 0x2
#define KEXEC_BPF_SUBCMD_KERNEL 0x1
#define KEXEC_BPF_SUBCMD_INITRD 0x2
@@ -281,6 +282,32 @@ static int kexec_buff_parser(struct bpf_parser_context *parser)
}
}
break;
+ case KEXEC_BPF_CMD_COPY:
+ p = __vmalloc(cmd->payload_len, GFP_KERNEL | __GFP_ACCOUNT);
+ if (!p)
+ return -ENOMEM;
+ memcpy(p, buf, cmd->payload_len);
+ switch (cmd->subcmd) {
+ case KEXEC_BPF_SUBCMD_KERNEL:
+ vfree(ctx->kernel);
+ ctx->kernel = p;
+ ctx->kernel_sz = cmd->payload_len;
+ break;
+ case KEXEC_BPF_SUBCMD_INITRD:
+ vfree(ctx->initrd);
+ ctx->initrd = p;
+ ctx->initrd_sz = cmd->payload_len;
+ break;
+ case KEXEC_BPF_SUBCMD_CMDLINE:
+ vfree(ctx->cmdline);
+ ctx->cmdline = p;
+ ctx->cmdline_sz = cmd->payload_len;
+ break;
+ default:
+ vfree(p);
+ break;
+ }
+ break;
default:
break;
}
--
2.49.0
Powered by blists - more mailing lists