Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 054768a1 authored by Sam Ravnborg's avatar Sam Ravnborg Committed by David S. Miller
Browse files

sparc32: drop sun4c window overflow stack checking routine



Also drop run-time patching for srmmu

Signed-off-by: default avatarSam Ravnborg <sam@ravnborg.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 28de2f73
Loading
Loading
Loading
Loading
+2 −70
Original line number Diff line number Diff line
@@ -163,8 +163,7 @@ spwin_fromuser:
	 * the label 'spwin_user_stack_is_bolixed' which will take
	 * care of things at that point.
	 */
	.globl	spwin_mmu_patchme
spwin_mmu_patchme:	b	spwin_sun4c_stackchk
	b	spwin_srmmu_stackchk
	 andcc	%sp, 0x7, %g0

spwin_good_ustack:
@@ -306,73 +305,6 @@ spwin_bad_ustack_from_kernel:
 * As noted above %curptr cannot be touched by this routine at all.
 */

spwin_sun4c_stackchk:
	/* LOCATION: Window to be saved on the stack */

	/* See if the stack is in the address space hole but first,
	 * check results of callers andcc %sp, 0x7, %g0
	 */
	be	1f
	 sra	%sp, 29, %glob_tmp

	rd	%psr, %glob_tmp
	b	spwin_user_stack_is_bolixed + 0x4
	 nop

1:
	add	%glob_tmp, 0x1, %glob_tmp
	andncc	%glob_tmp, 0x1, %g0
	be	1f
	 and	%sp, 0xfff, %glob_tmp		! delay slot

	rd	%psr, %glob_tmp
	b	spwin_user_stack_is_bolixed + 0x4
	 nop

	/* See if our dump area will be on more than one
	 * page.
	 */
1:
	add	%glob_tmp, 0x38, %glob_tmp
	andncc	%glob_tmp, 0xff8, %g0
	be	spwin_sun4c_onepage		! only one page to check
	 lda	[%sp] ASI_PTE, %glob_tmp	! have to check first page anyways

spwin_sun4c_twopages:
	/* Is first page ok permission wise? */
	srl	%glob_tmp, 29, %glob_tmp
	cmp	%glob_tmp, 0x6
	be	1f
	 add	%sp, 0x38, %glob_tmp	/* Is second page in vma hole? */

	rd	%psr, %glob_tmp
	b	spwin_user_stack_is_bolixed + 0x4
	 nop

1:
	sra	%glob_tmp, 29, %glob_tmp
	add	%glob_tmp, 0x1, %glob_tmp
	andncc	%glob_tmp, 0x1, %g0
	be	1f
	 add	%sp, 0x38, %glob_tmp

	rd	%psr, %glob_tmp
	b	spwin_user_stack_is_bolixed + 0x4
	 nop

1:
	lda	[%glob_tmp] ASI_PTE, %glob_tmp

spwin_sun4c_onepage:
	srl	%glob_tmp, 29, %glob_tmp
	cmp	%glob_tmp, 0x6				! can user write to it?
	be	spwin_good_ustack			! success
	 nop

	rd	%psr, %glob_tmp
	b	spwin_user_stack_is_bolixed + 0x4
	 nop

	/* This is a generic SRMMU routine.  As far as I know this
	 * works for all current v8/srmmu implementations, we'll
	 * see...
+0 −1
Original line number Diff line number Diff line
@@ -2144,7 +2144,6 @@ static void __init patch_window_trap_handlers(void)
{
	unsigned long *iaddr, *daddr;
	
	PATCH_BRANCH(spwin_mmu_patchme, spwin_srmmu_stackchk);
	PATCH_BRANCH(tsetup_mmu_patchme, tsetup_srmmu_stackchk);
	PATCH_BRANCH(rtrap_mmu_patchme, srmmu_rett_stackchk);
}