Module Name:    src
Committed By:   maxv
Date:           Fri Jan 26 14:38:46 UTC 2018

Modified Files:
        src/sys/arch/amd64/amd64: machdep.c

Log Message:
Zero out the scratch value in the UTLS page during context switches. We
temporarily put %rax there when processing syscalls, and we wouldn't
want the new lwp to see the %rax value of the previous lwp.


To generate a diff of this commit:
cvs rdiff -u -r1.295 -r1.296 src/sys/arch/amd64/amd64/machdep.c

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/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.295 src/sys/arch/amd64/amd64/machdep.c:1.296
--- src/sys/arch/amd64/amd64/machdep.c:1.295	Sun Jan 21 11:21:40 2018
+++ src/sys/arch/amd64/amd64/machdep.c	Fri Jan 26 14:38:46 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: machdep.c,v 1.295 2018/01/21 11:21:40 maxv Exp $	*/
+/*	$NetBSD: machdep.c,v 1.296 2018/01/26 14:38:46 maxv Exp $	*/
 
 /*
  * Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,7 +110,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.295 2018/01/21 11:21:40 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.296 2018/01/26 14:38:46 maxv Exp $");
 
 /* #define XENDEBUG_LOW  */
 
@@ -2522,6 +2522,7 @@ void
 svs_lwp_switch(struct lwp *oldlwp, struct lwp *newlwp)
 {
 	struct cpu_info *ci = curcpu();
+	struct svs_utls *utls;
 	struct pcb *pcb;
 	pt_entry_t *pte;
 	uintptr_t rsp0;
@@ -2551,6 +2552,9 @@ svs_lwp_switch(struct lwp *oldlwp, struc
 	KASSERT((ci->ci_svs_krsp0 % PAGE_SIZE) ==
 	    (ci->ci_svs_ursp0 % PAGE_SIZE));
 
+	utls = (struct svs_utls *)ci->ci_svs_utls;
+	utls->scratch = 0;
+
 	/*
 	 * Enter the user rsp0. We don't need to flush the TLB here, since
 	 * the user page tables are not loaded.

Reply via email to