linux/arch/s390/kernel/kexec_image.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * Image loader for kexec_file_load system call.
   4 *
   5 * Copyright IBM Corp. 2018
   6 *
   7 * Author(s): Philipp Rudo <prudo@linux.vnet.ibm.com>
   8 */
   9
  10#include <linux/errno.h>
  11#include <linux/kernel.h>
  12#include <linux/kexec.h>
  13#include <asm/ipl.h>
  14#include <asm/setup.h>
  15
  16static int kexec_file_add_kernel_image(struct kimage *image,
  17                                       struct s390_load_data *data)
  18{
  19        struct kexec_buf buf;
  20
  21        buf.image = image;
  22
  23        buf.buffer = image->kernel_buf;
  24        buf.bufsz = image->kernel_buf_len;
  25
  26        buf.mem = 0;
  27        if (image->type == KEXEC_TYPE_CRASH)
  28                buf.mem += crashk_res.start;
  29        buf.memsz = buf.bufsz;
  30
  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;
  35
  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);
  41}
  42
  43static void *s390_image_load(struct kimage *image,
  44                             char *kernel, unsigned long kernel_len,
  45                             char *initrd, unsigned long initrd_len,
  46                             char *cmdline, unsigned long cmdline_len)
  47{
  48        return kexec_file_add_components(image, kexec_file_add_kernel_image);
  49}
  50
  51static int s390_image_probe(const char *buf, unsigned long len)
  52{
  53        /* Can't reliably tell if an image is valid.  Therefore give the
  54         * user whatever he wants.
  55         */
  56        return 0;
  57}
  58
  59const struct kexec_file_ops s390_kexec_image_ops = {
  60        .probe = s390_image_probe,
  61        .load = s390_image_load,
  62#ifdef CONFIG_KEXEC_SIG
  63        .verify_sig = s390_verify_sig,
  64#endif /* CONFIG_KEXEC_SIG */
  65};
  66