Commit 2835c2ea authored by Vasily Gorbik's avatar Vasily Gorbik
Browse files

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: default avatarSven Schnelle <svens@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 1c7c83e8
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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