Skip to content

Commit 277c838

Browse files
svens-s390Vasily Gorbik
authored andcommitted
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: Sven Schnelle <[email protected]> Reviewed-by: Heiko Carstens <[email protected]> Signed-off-by: Vasily Gorbik <[email protected]>
1 parent 6aefbf1 commit 277c838

File tree

3 files changed

+2
-18
lines changed

3 files changed

+2
-18
lines changed

arch/s390/boot/head.S

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -400,5 +400,3 @@ SYM_DATA_START(parmarea)
400400
.byte 0
401401
.org PARMAREA+__PARMAREA_SIZE
402402
SYM_DATA_END(parmarea)
403-
404-
.org HEAD_END

arch/s390/include/asm/setup.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#include <linux/build_bug.h>
1212

1313
#define PARMAREA 0x10400
14-
#define HEAD_END 0x11000
1514

1615
/*
1716
* Machine features detected in early.c

arch/s390/kernel/machine_kexec_file.c

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,8 @@ void *kexec_file_add_components(struct kimage *image,
227227
if (ret)
228228
goto out;
229229

230-
if (image->cmdline_buf_len >= ARCH_COMMAND_LINE_SIZE) {
230+
if (image->kernel_buf_len < PARMAREA + sizeof(struct parmarea) ||
231+
image->cmdline_buf_len >= ARCH_COMMAND_LINE_SIZE) {
231232
ret = -EINVAL;
232233
goto out;
233234
}
@@ -307,17 +308,3 @@ int arch_kexec_apply_relocations_add(struct purgatory_info *pi,
307308
}
308309
return 0;
309310
}
310-
311-
int arch_kexec_kernel_image_probe(struct kimage *image, void *buf,
312-
unsigned long buf_len)
313-
{
314-
/* A kernel must be at least large enough to contain head.S. During
315-
* load memory in head.S will be accessed, e.g. to register the next
316-
* command line. If the next kernel were smaller the current kernel
317-
* will panic at load.
318-
*/
319-
if (buf_len < HEAD_END)
320-
return -ENOEXEC;
321-
322-
return kexec_image_probe_default(image, buf, buf_len);
323-
}

0 commit comments

Comments
 (0)