Skip to content

Commit 72935e3

Browse files
eaibmzAlexander Gordeev
authored andcommitted
s390/ipl: Fix size of vmcmd buffers for sending z/VM CP diag X'008' cmds
z/VM CP diagnose X'008' accepts commands of max 240 characters. Using a smaller value as a buffer size makes kernel send truncated CP commands which are longer than the old buffer size. This can result in invalid CP commands passed to z/VM. Reviewed-by: Heiko Carstens <[email protected]> Signed-off-by: Alexander Egorenkov <[email protected]> Signed-off-by: Alexander Gordeev <[email protected]>
1 parent 207ddb9 commit 72935e3

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

arch/s390/kernel/ipl.c

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1958,11 +1958,13 @@ static struct shutdown_action __refdata dump_reipl_action = {
19581958
* vmcmd shutdown action: Trigger vm command on shutdown.
19591959
*/
19601960

1961-
static char vmcmd_on_reboot[128];
1962-
static char vmcmd_on_panic[128];
1963-
static char vmcmd_on_halt[128];
1964-
static char vmcmd_on_poff[128];
1965-
static char vmcmd_on_restart[128];
1961+
#define VMCMD_MAX_SIZE 240
1962+
1963+
static char vmcmd_on_reboot[VMCMD_MAX_SIZE + 1];
1964+
static char vmcmd_on_panic[VMCMD_MAX_SIZE + 1];
1965+
static char vmcmd_on_halt[VMCMD_MAX_SIZE + 1];
1966+
static char vmcmd_on_poff[VMCMD_MAX_SIZE + 1];
1967+
static char vmcmd_on_restart[VMCMD_MAX_SIZE + 1];
19661968

19671969
DEFINE_IPL_ATTR_STR_RW(vmcmd, on_reboot, "%s\n", "%s\n", vmcmd_on_reboot);
19681970
DEFINE_IPL_ATTR_STR_RW(vmcmd, on_panic, "%s\n", "%s\n", vmcmd_on_panic);
@@ -2288,8 +2290,8 @@ static int __init vmcmd_on_reboot_setup(char *str)
22882290
{
22892291
if (!MACHINE_IS_VM)
22902292
return 1;
2291-
strncpy_skip_quote(vmcmd_on_reboot, str, 127);
2292-
vmcmd_on_reboot[127] = 0;
2293+
strncpy_skip_quote(vmcmd_on_reboot, str, VMCMD_MAX_SIZE);
2294+
vmcmd_on_reboot[VMCMD_MAX_SIZE] = 0;
22932295
on_reboot_trigger.action = &vmcmd_action;
22942296
return 1;
22952297
}
@@ -2299,8 +2301,8 @@ static int __init vmcmd_on_panic_setup(char *str)
22992301
{
23002302
if (!MACHINE_IS_VM)
23012303
return 1;
2302-
strncpy_skip_quote(vmcmd_on_panic, str, 127);
2303-
vmcmd_on_panic[127] = 0;
2304+
strncpy_skip_quote(vmcmd_on_panic, str, VMCMD_MAX_SIZE);
2305+
vmcmd_on_panic[VMCMD_MAX_SIZE] = 0;
23042306
on_panic_trigger.action = &vmcmd_action;
23052307
return 1;
23062308
}
@@ -2310,8 +2312,8 @@ static int __init vmcmd_on_halt_setup(char *str)
23102312
{
23112313
if (!MACHINE_IS_VM)
23122314
return 1;
2313-
strncpy_skip_quote(vmcmd_on_halt, str, 127);
2314-
vmcmd_on_halt[127] = 0;
2315+
strncpy_skip_quote(vmcmd_on_halt, str, VMCMD_MAX_SIZE);
2316+
vmcmd_on_halt[VMCMD_MAX_SIZE] = 0;
23152317
on_halt_trigger.action = &vmcmd_action;
23162318
return 1;
23172319
}
@@ -2321,8 +2323,8 @@ static int __init vmcmd_on_poff_setup(char *str)
23212323
{
23222324
if (!MACHINE_IS_VM)
23232325
return 1;
2324-
strncpy_skip_quote(vmcmd_on_poff, str, 127);
2325-
vmcmd_on_poff[127] = 0;
2326+
strncpy_skip_quote(vmcmd_on_poff, str, VMCMD_MAX_SIZE);
2327+
vmcmd_on_poff[VMCMD_MAX_SIZE] = 0;
23262328
on_poff_trigger.action = &vmcmd_action;
23272329
return 1;
23282330
}

0 commit comments

Comments
 (0)