diff options
Diffstat (limited to 'arch/s390/kernel/kexec_image.c')
| -rw-r--r-- | arch/s390/kernel/kexec_image.c | 49 | 
1 files changed, 19 insertions, 30 deletions
diff --git a/arch/s390/kernel/kexec_image.c b/arch/s390/kernel/kexec_image.c index 3800852595e8..58318bf89fd9 100644 --- a/arch/s390/kernel/kexec_image.c +++ b/arch/s390/kernel/kexec_image.c @@ -10,31 +10,34 @@  #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_image_kernel(struct kimage *image, -				       struct s390_load_data *data, -				       char *kernel, unsigned long kernel_len) +static int kexec_file_add_kernel_image(struct kimage *image, +				       struct s390_load_data *data)  {  	struct kexec_buf buf; -	int ret;  	buf.image = image; -	buf.buffer = kernel + STARTUP_NORMAL_OFFSET; -	buf.bufsz = kernel_len - STARTUP_NORMAL_OFFSET; +	buf.buffer = image->kernel_buf; +	buf.bufsz = image->kernel_buf_len; -	buf.mem = STARTUP_NORMAL_OFFSET; +	buf.mem = 0;  	if (image->type == KEXEC_TYPE_CRASH)  		buf.mem += crashk_res.start;  	buf.memsz = buf.bufsz; -	ret = kexec_add_buffer(&buf); +	data->kernel_buf = image->kernel_buf; +	data->kernel_mem = buf.mem; +	data->parm = image->kernel_buf + PARMAREA; +	data->memsz += buf.memsz; -	data->kernel_buf = kernel; -	data->memsz += buf.memsz + STARTUP_NORMAL_OFFSET; - -	return ret; +	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, @@ -42,24 +45,7 @@ static void *s390_image_load(struct kimage *image,  			     char *initrd, unsigned long initrd_len,  			     char *cmdline, unsigned long cmdline_len)  { -	struct s390_load_data data = {0}; -	int ret; - -	ret = kexec_file_add_image_kernel(image, &data, kernel, kernel_len); -	if (ret) -		return ERR_PTR(ret); - -	if (initrd) { -		ret = kexec_file_add_initrd(image, &data, initrd, initrd_len); -		if (ret) -			return ERR_PTR(ret); -	} - -	ret = kexec_file_add_purgatory(image, &data); -	if (ret) -		return ERR_PTR(ret); - -	return kexec_file_update_kernel(image, &data); +	return kexec_file_add_components(image, kexec_file_add_kernel_image);  }  static int s390_image_probe(const char *buf, unsigned long len) @@ -73,4 +59,7 @@ static int s390_image_probe(const char *buf, unsigned long len)  const struct kexec_file_ops s390_kexec_image_ops = {  	.probe = s390_image_probe,  	.load = s390_image_load, +#ifdef CONFIG_KEXEC_VERIFY_SIG +	.verify_sig = s390_verify_sig, +#endif /* CONFIG_KEXEC_VERIFY_SIG */  };  |