hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/arch/s390/kernel/kexec_image.c
....@@ -10,31 +10,34 @@
1010 #include <linux/errno.h>
1111 #include <linux/kernel.h>
1212 #include <linux/kexec.h>
13
+#include <asm/ipl.h>
1314 #include <asm/setup.h>
1415
15
-static int kexec_file_add_image_kernel(struct kimage *image,
16
- struct s390_load_data *data,
17
- char *kernel, unsigned long kernel_len)
16
+static int kexec_file_add_kernel_image(struct kimage *image,
17
+ struct s390_load_data *data)
1818 {
1919 struct kexec_buf buf;
20
- int ret;
2120
2221 buf.image = image;
2322
24
- buf.buffer = kernel + STARTUP_NORMAL_OFFSET;
25
- buf.bufsz = kernel_len - STARTUP_NORMAL_OFFSET;
23
+ buf.buffer = image->kernel_buf;
24
+ buf.bufsz = image->kernel_buf_len;
2625
27
- buf.mem = STARTUP_NORMAL_OFFSET;
26
+ buf.mem = 0;
2827 if (image->type == KEXEC_TYPE_CRASH)
2928 buf.mem += crashk_res.start;
3029 buf.memsz = buf.bufsz;
3130
32
- ret = kexec_add_buffer(&buf);
31
+ data->kernel_buf = image->kernel_buf;
32
+ data->kernel_mem = buf.mem;
33
+ data->parm = image->kernel_buf + PARMAREA;
34
+ data->memsz += buf.memsz;
3335
34
- data->kernel_buf = kernel;
35
- data->memsz += buf.memsz + STARTUP_NORMAL_OFFSET;
36
-
37
- return ret;
36
+ ipl_report_add_component(data->report, &buf,
37
+ IPL_RB_COMPONENT_FLAG_SIGNED |
38
+ IPL_RB_COMPONENT_FLAG_VERIFIED,
39
+ IPL_RB_CERT_UNKNOWN);
40
+ return kexec_add_buffer(&buf);
3841 }
3942
4043 static void *s390_image_load(struct kimage *image,
....@@ -42,24 +45,7 @@
4245 char *initrd, unsigned long initrd_len,
4346 char *cmdline, unsigned long cmdline_len)
4447 {
45
- struct s390_load_data data = {0};
46
- int ret;
47
-
48
- ret = kexec_file_add_image_kernel(image, &data, kernel, kernel_len);
49
- if (ret)
50
- return ERR_PTR(ret);
51
-
52
- if (initrd) {
53
- ret = kexec_file_add_initrd(image, &data, initrd, initrd_len);
54
- if (ret)
55
- return ERR_PTR(ret);
56
- }
57
-
58
- ret = kexec_file_add_purgatory(image, &data);
59
- if (ret)
60
- return ERR_PTR(ret);
61
-
62
- return kexec_file_update_kernel(image, &data);
48
+ return kexec_file_add_components(image, kexec_file_add_kernel_image);
6349 }
6450
6551 static int s390_image_probe(const char *buf, unsigned long len)
....@@ -73,4 +59,7 @@
7359 const struct kexec_file_ops s390_kexec_image_ops = {
7460 .probe = s390_image_probe,
7561 .load = s390_image_load,
62
+#ifdef CONFIG_KEXEC_SIG
63
+ .verify_sig = s390_verify_sig,
64
+#endif /* CONFIG_KEXEC_SIG */
7665 };