| From 267879df0627b9af225069376b4d0ba0712e1b4f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 24 Sep 2020 19:07:04 +0200 |
| Subject: s390/startup: avoid save_area_sync overflow |
| |
| From: Vasily Gorbik <gor@linux.ibm.com> |
| |
| [ Upstream commit 2835c2ea95d50625108e47a459e1a47f6be836ce ] |
| |
| Currently we overflow save_area_sync and write over |
| save_area_async. Although this is not a real problem make |
| startup_pgm_check_handler consistent with late pgm check handler and |
| store [%r0,%r7] directly into gpregs_save_area. |
| |
| Reviewed-by: Sven Schnelle <svens@linux.ibm.com> |
| Signed-off-by: Vasily Gorbik <gor@linux.ibm.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/s390/boot/head.S | 21 +++++++++++---------- |
| 1 file changed, 11 insertions(+), 10 deletions(-) |
| |
| diff --git a/arch/s390/boot/head.S b/arch/s390/boot/head.S |
| index dae10961d0724..1a2c2b1ed9649 100644 |
| --- a/arch/s390/boot/head.S |
| +++ b/arch/s390/boot/head.S |
| @@ -360,22 +360,23 @@ ENTRY(startup_kdump) |
| # the save area and does disabled wait with a faulty address. |
| # |
| ENTRY(startup_pgm_check_handler) |
| - stmg %r0,%r15,__LC_SAVE_AREA_SYNC |
| - la %r1,4095 |
| - stctg %c0,%c15,__LC_CREGS_SAVE_AREA-4095(%r1) |
| - mvc __LC_GPREGS_SAVE_AREA-4095(128,%r1),__LC_SAVE_AREA_SYNC |
| - mvc __LC_PSW_SAVE_AREA-4095(16,%r1),__LC_PGM_OLD_PSW |
| + stmg %r8,%r15,__LC_SAVE_AREA_SYNC |
| + la %r8,4095 |
| + stctg %c0,%c15,__LC_CREGS_SAVE_AREA-4095(%r8) |
| + stmg %r0,%r7,__LC_GPREGS_SAVE_AREA-4095(%r8) |
| + mvc __LC_GPREGS_SAVE_AREA-4095+64(64,%r8),__LC_SAVE_AREA_SYNC |
| + mvc __LC_PSW_SAVE_AREA-4095(16,%r8),__LC_PGM_OLD_PSW |
| mvc __LC_RETURN_PSW(16),__LC_PGM_OLD_PSW |
| ni __LC_RETURN_PSW,0xfc # remove IO and EX bits |
| ni __LC_RETURN_PSW+1,0xfb # remove MCHK bit |
| oi __LC_RETURN_PSW+1,0x2 # set wait state bit |
| - larl %r2,.Lold_psw_disabled_wait |
| - stg %r2,__LC_PGM_NEW_PSW+8 |
| - l %r15,.Ldump_info_stack-.Lold_psw_disabled_wait(%r2) |
| + larl %r9,.Lold_psw_disabled_wait |
| + stg %r9,__LC_PGM_NEW_PSW+8 |
| + l %r15,.Ldump_info_stack-.Lold_psw_disabled_wait(%r9) |
| brasl %r14,print_pgm_check_info |
| .Lold_psw_disabled_wait: |
| - la %r1,4095 |
| - lmg %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r1) |
| + la %r8,4095 |
| + lmg %r0,%r15,__LC_GPREGS_SAVE_AREA-4095(%r8) |
| lpswe __LC_RETURN_PSW # disabled wait |
| .Ldump_info_stack: |
| .long 0x5000 + PAGE_SIZE - STACK_FRAME_OVERHEAD |
| -- |
| 2.27.0 |
| |