Commit 277c8389 authored by Sven Schnelle's avatar Sven Schnelle Committed by Vasily Gorbik
Browse files

s390/kexec_file: move kernel image size check



In preparation of adding support for command lines with variable
sizes on s390, the check whether the new kernel image is at least HEAD_END
bytes long isn't correct. Move the check to kexec_file_add_components()
so we can get the size of the parm area and check the size there.

The '.org HEAD_END' directive can now also be removed from head.S. This
was used in the past to reserve space for the early sccb buffer, but with
commit 9a5131b87cac1 ("s390/boot: move sclp early buffer from fixed address
in asm to C") this is no longer required.

Signed-off-by: default avatarSven Schnelle <svens@linux.ibm.com>
Reviewed-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 6aefbf1c
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -400,5 +400,3 @@ SYM_DATA_START(parmarea)
	.byte	0
	.org	PARMAREA+__PARMAREA_SIZE
SYM_DATA_END(parmarea)

	.org	HEAD_END
+0 −1
Original line number Diff line number Diff line
@@ -11,7 +11,6 @@
#include <linux/build_bug.h>

#define PARMAREA		0x10400
#define HEAD_END		0x11000

/*
 * Machine features detected in early.c
+2 −15
Original line number Diff line number Diff line
@@ -227,7 +227,8 @@ void *kexec_file_add_components(struct kimage *image,
	if (ret)
		goto out;

	if (image->cmdline_buf_len >= ARCH_COMMAND_LINE_SIZE) {
	if (image->kernel_buf_len < PARMAREA + sizeof(struct parmarea) ||
	    image->cmdline_buf_len >= ARCH_COMMAND_LINE_SIZE) {
		ret = -EINVAL;
		goto out;
	}
@@ -307,17 +308,3 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
	}
	return 0;
}

int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
				  unsigned long buf_len)
{
	/* A kernel must be at least large enough to contain head.S. During
	 * load memory in head.S will be accessed, e.g. to register the next
	 * command line. If the next kernel were smaller the current kernel
	 * will panic at load.
	 */
	if (buf_len < HEAD_END)
		return -ENOEXEC;

	return kexec_image_probe_default(image, buf, buf_len);
}