Module Name:    src
Committed By:   maxv
Date:           Sun Feb 25 11:57:44 UTC 2018

Modified Files:
        src/sys/arch/amd64/amd64: amd64_trap.S

Log Message:
Ah. Don't use NENTRY() to declare check_swapgs, use LABEL() instead. NENTRY
puts the code in the .text section, so the effect of TEXT_USER_BEGIN was
overwritten, and check_swapgs was not put in the .text.user section.

As a result kernels running SVS would crash when jumping here - because we
execute this place with the user page table loaded, and in this page table
only .text.user is mapped.

While here, rename check_swapgs -> kernuser_reenter, because we do more
things than just SWAPGS.


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/sys/arch/amd64/amd64/amd64_trap.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/amd64/amd64/amd64_trap.S
diff -u src/sys/arch/amd64/amd64/amd64_trap.S:1.35 src/sys/arch/amd64/amd64/amd64_trap.S:1.36
--- src/sys/arch/amd64/amd64/amd64_trap.S:1.35	Sun Feb 25 08:28:55 2018
+++ src/sys/arch/amd64/amd64/amd64_trap.S	Sun Feb 25 11:57:44 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: amd64_trap.S,v 1.35 2018/02/25 08:28:55 maxv Exp $	*/
+/*	$NetBSD: amd64_trap.S,v 1.36 2018/02/25 11:57:44 maxv Exp $	*/
 
 /*
  * Copyright (c) 1998, 2007, 2008, 2017 The NetBSD Foundation, Inc.
@@ -273,22 +273,22 @@ IDTVEC_END(trap10)
  * equivalent of iret, if it does this code would be needed
  * in order to copy the user segment registers into the fault frame.
  */
-#define check_swapgs alltraps
+#define kernuser_reenter alltraps
 #endif
 
 IDTVEC(trap11)		/* #NP() Segment not present */
 	TRAP_NJ(T_SEGNPFLT)
-	jmp	check_swapgs
+	jmp	kernuser_reenter
 IDTVEC_END(trap11)
 
 IDTVEC(trap12)		/* #SS() Stack exception */
 	TRAP_NJ(T_STKFLT)
-	jmp	check_swapgs
+	jmp	kernuser_reenter
 IDTVEC_END(trap12)
 
 IDTVEC(trap13)		/* #GP() General protection */
 	TRAP_NJ(T_PROTFLT)
-	jmp	check_swapgs
+	jmp	kernuser_reenter
 IDTVEC_END(trap13)
 
 IDTVEC(trap14)
@@ -365,7 +365,7 @@ IDTVEC(intrspurious)
 	jmp	.Lalltraps_checkusr
 IDTVEC_END(intrspurious)
 
-#ifndef check_swapgs
+#ifndef kernuser_reenter
 /*
  * We need to worry about traps in kernel mode while the kernel %gs isn't
  * loaded. These are either faults on iretq during return to user or loads to
@@ -374,7 +374,8 @@ IDTVEC_END(intrspurious)
  * When such traps happen, we have CPL=0 and %gs=userland, and we must perform
  * an additional swapgs to get %gs=kernel.
  */
-NENTRY(check_swapgs)
+	_ALIGN_TEXT
+LABEL(kernuser_reenter)
 	INTRENTRY_L(3f,1:)
 2:
 	sti
@@ -406,7 +407,7 @@ NENTRY(check_swapgs)
 
 	/* None of the above cases */
 	jmp	2b	/* normal kernel fault */
-END(check_swapgs)
+END(kernuser_reenter)
 #endif
 
 	TEXT_USER_END

Reply via email to