forked from Minki/linux
s390/startup: avoid save_area_sync overflow
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>
This commit is contained in:
parent
1c7c83e8d2
commit
2835c2ea95
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user