mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.6 KiB
65 lines
1.6 KiB
// SPDX-License-Identifier: GPL-2.0 |
|
/* |
|
* Image loader for kexec_file_load system call. |
|
* |
|
* Copyright IBM Corp. 2018 |
|
* |
|
* Author(s): Philipp Rudo <[email protected]> |
|
*/ |
|
|
|
#include <linux/errno.h> |
|
#include <linux/kernel.h> |
|
#include <linux/kexec.h> |
|
#include <asm/ipl.h> |
|
#include <asm/setup.h> |
|
|
|
static int kexec_file_add_kernel_image(struct kimage *image, |
|
struct s390_load_data *data) |
|
{ |
|
struct kexec_buf buf; |
|
|
|
buf.image = image; |
|
|
|
buf.buffer = image->kernel_buf; |
|
buf.bufsz = image->kernel_buf_len; |
|
|
|
buf.mem = 0; |
|
if (image->type == KEXEC_TYPE_CRASH) |
|
buf.mem += crashk_res.start; |
|
buf.memsz = buf.bufsz; |
|
|
|
data->kernel_buf = image->kernel_buf; |
|
data->kernel_mem = buf.mem; |
|
data->parm = image->kernel_buf + PARMAREA; |
|
data->memsz += buf.memsz; |
|
|
|
ipl_report_add_component(data->report, &buf, |
|
IPL_RB_COMPONENT_FLAG_SIGNED | |
|
IPL_RB_COMPONENT_FLAG_VERIFIED, |
|
IPL_RB_CERT_UNKNOWN); |
|
return kexec_add_buffer(&buf); |
|
} |
|
|
|
static void *s390_image_load(struct kimage *image, |
|
char *kernel, unsigned long kernel_len, |
|
char *initrd, unsigned long initrd_len, |
|
char *cmdline, unsigned long cmdline_len) |
|
{ |
|
return kexec_file_add_components(image, kexec_file_add_kernel_image); |
|
} |
|
|
|
static int s390_image_probe(const char *buf, unsigned long len) |
|
{ |
|
/* Can't reliably tell if an image is valid. Therefore give the |
|
* user whatever he wants. |
|
*/ |
|
return 0; |
|
} |
|
|
|
const struct kexec_file_ops s390_kexec_image_ops = { |
|
.probe = s390_image_probe, |
|
.load = s390_image_load, |
|
#ifdef CONFIG_KEXEC_SIG |
|
.verify_sig = s390_verify_sig, |
|
#endif /* CONFIG_KEXEC_SIG */ |
|
};
|
|
|