Module Name: src
Committed By: kamil
Date: Tue Dec 13 10:54:27 UTC 2016
Modified Files:
src/sys/arch/i386/conf: files.i386
src/sys/arch/i386/i386: trap.c
src/sys/arch/x86/include: cpufunc.h
src/sys/arch/x86/x86: pmap.c
src/sys/arch/xen/conf: files.compat files.xen
src/sys/arch/xen/x86: xen_pmap.c
Removed Files:
src/sys/arch/i386/i386: db_dbgreg.S
Log Message:
Torn down KSTACK_CHECK_DR0, i386-only feature to detect stack overflow
This feature was intended to detect stack overflow with CPU Debug Registers
(x86). It was never ported to other ports, neither amd64 and should be
adapted for SMP...
Currently there might be better ways to detect stack overflows like page
mapping protection. Since the number of Debug Registers is restricted
(4 on x86), torn it down completely.
This interface introduced helper functions for Debug Registers, they will
be replaced with the new <x86/dbregs.h> interface.
KSTACK_CHECK_DR0 was disabled by default and won't affect ordinary users.
Sponsored by <The NetBSD Foundation>
To generate a diff of this commit:
cvs rdiff -u -r1.374 -r1.375 src/sys/arch/i386/conf/files.i386
cvs rdiff -u -r1.7 -r0 src/sys/arch/i386/i386/db_dbgreg.S
cvs rdiff -u -r1.280 -r1.281 src/sys/arch/i386/i386/trap.c
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/x86/include/cpufunc.h
cvs rdiff -u -r1.230 -r1.231 src/sys/arch/x86/x86/pmap.c
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/xen/conf/files.compat
cvs rdiff -u -r1.141 -r1.142 src/sys/arch/xen/conf/files.xen
cvs rdiff -u -r1.23 -r1.24 src/sys/arch/xen/x86/xen_pmap.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/i386/conf/files.i386
diff -u src/sys/arch/i386/conf/files.i386:1.374 src/sys/arch/i386/conf/files.i386:1.375
--- src/sys/arch/i386/conf/files.i386:1.374 Wed Feb 12 23:24:09 2014
+++ src/sys/arch/i386/conf/files.i386 Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-# $NetBSD: files.i386,v 1.374 2014/02/12 23:24:09 dsl Exp $
+# $NetBSD: files.i386,v 1.375 2016/12/13 10:54:27 kamil Exp $
#
# new style config file for i386 architecture
#
@@ -41,9 +41,6 @@ defflag opt_pcibios.h PCIBIOS PCIBIOSVER
PCIBIOS_INTR_GUESS PCIINTR_DEBUG
defparam opt_pcibios.h PCIBIOS_IRQS_HINT
-# kernel stack debug
-defflag opt_kstack_dr0.h KSTACK_CHECK_DR0
-
# splraise()/spllower() debug
defflag opt_spldebug.h SPLDEBUG
@@ -63,7 +60,6 @@ file arch/i386/i386/aout_machdep.c exec_
file arch/i386/i386/busfunc.S
file arch/i386/i386/cpufunc.S
file arch/i386/i386/cpu_in_cksum.S (inet | inet6) & cpu_in_cksum
-file arch/i386/i386/db_dbgreg.S ddb | kstack_check_dr0
file arch/i386/i386/db_disasm.c ddb
file arch/i386/i386/db_interface.c ddb
file arch/i386/i386/db_machdep.c ddb
Index: src/sys/arch/i386/i386/trap.c
diff -u src/sys/arch/i386/i386/trap.c:1.280 src/sys/arch/i386/i386/trap.c:1.281
--- src/sys/arch/i386/i386/trap.c:1.280 Sun Sep 25 12:53:24 2016
+++ src/sys/arch/i386/i386/trap.c Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: trap.c,v 1.280 2016/09/25 12:53:24 maxv Exp $ */
+/* $NetBSD: trap.c,v 1.281 2016/12/13 10:54:27 kamil Exp $ */
/*-
* Copyright (c) 1998, 2000, 2005, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -68,14 +68,13 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.280 2016/09/25 12:53:24 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.281 2016/12/13 10:54:27 kamil Exp $");
#include "opt_ddb.h"
#include "opt_kgdb.h"
#include "opt_lockdebug.h"
#include "opt_multiprocessor.h"
#include "opt_vm86.h"
-#include "opt_kstack_dr0.h"
#include "opt_xen.h"
#include "opt_dtrace.h"
@@ -233,24 +232,6 @@ trap_print(const struct trapframe *frame
l, l->l_proc->p_pid, l->l_lid, KSTACK_LOWEST_ADDR(l));
}
-static void
-check_dr0(void)
-{
-#ifdef KSTACK_CHECK_DR0
- u_int mask, dr6 = rdr6();
-
- mask = 1 << 0; /* dr0 */
- if (dr6 & mask) {
- panic("trap on DR0: maybe kernel stack overflow\n");
-#if 0
- dr6 &= ~mask;
- ldr6(dr6);
- return;
-#endif
- }
-#endif
-}
-
/*
* trap(frame): exception, fault, and trap interface to BSD kernel.
*
@@ -323,9 +304,7 @@ trap(struct trapframe *frame)
default:
we_re_toast:
- if (type == T_TRCTRAP)
- check_dr0();
- else
+ if (type != T_TRCTRAP)
trap_print(frame, l);
if (kdb_trap(type, 0, frame))
Index: src/sys/arch/x86/include/cpufunc.h
diff -u src/sys/arch/x86/include/cpufunc.h:1.21 src/sys/arch/x86/include/cpufunc.h:1.22
--- src/sys/arch/x86/include/cpufunc.h:1.21 Tue Dec 13 10:21:33 2016
+++ src/sys/arch/x86/include/cpufunc.h Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: cpufunc.h,v 1.21 2016/12/13 10:21:33 kamil Exp $ */
+/* $NetBSD: cpufunc.h,v 1.22 2016/12/13 10:54:27 kamil Exp $ */
/*-
* Copyright (c) 1998, 2007 The NetBSD Foundation, Inc.
@@ -68,7 +68,6 @@ void lcr8(vaddr_t);
vaddr_t rcr8(void);
void tlbflush(void);
void tlbflushg(void);
-void dr0(void *, uint32_t, uint32_t, uint32_t);
register_t rdr0(void);
void ldr0(register_t);
register_t rdr1(void);
Index: src/sys/arch/x86/x86/pmap.c
diff -u src/sys/arch/x86/x86/pmap.c:1.230 src/sys/arch/x86/x86/pmap.c:1.231
--- src/sys/arch/x86/x86/pmap.c:1.230 Sun Dec 11 08:31:53 2016
+++ src/sys/arch/x86/x86/pmap.c Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: pmap.c,v 1.230 2016/12/11 08:31:53 maxv Exp $ */
+/* $NetBSD: pmap.c,v 1.231 2016/12/13 10:54:27 kamil Exp $ */
/*-
* Copyright (c) 2008, 2010, 2016 The NetBSD Foundation, Inc.
@@ -171,15 +171,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.230 2016/12/11 08:31:53 maxv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.231 2016/12/13 10:54:27 kamil Exp $");
#include "opt_user_ldt.h"
#include "opt_lockdebug.h"
#include "opt_multiprocessor.h"
#include "opt_xen.h"
-#if !defined(__x86_64__)
-#include "opt_kstack_dr0.h"
-#endif /* !defined(__x86_64__) */
#include <sys/param.h>
#include <sys/systm.h>
@@ -2627,15 +2624,6 @@ pmap_activate(struct lwp *l)
if (l == ci->ci_curlwp) {
KASSERT(ci->ci_want_pmapload == 0);
KASSERT(ci->ci_tlbstate != TLBSTATE_VALID);
-#ifdef KSTACK_CHECK_DR0
- /*
- * setup breakpoint on the top of stack
- */
- if (l == &lwp0)
- dr0(0, 0, 0, 0);
- else
- dr0(KSTACK_LOWEST_ADDR(l), 1, 3, 1);
-#endif
/*
* no need to switch to kernel vmspace because
Index: src/sys/arch/xen/conf/files.compat
diff -u src/sys/arch/xen/conf/files.compat:1.24 src/sys/arch/xen/conf/files.compat:1.25
--- src/sys/arch/xen/conf/files.compat:1.24 Wed Oct 3 18:58:32 2012
+++ src/sys/arch/xen/conf/files.compat Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-# $NetBSD: files.compat,v 1.24 2012/10/03 18:58:32 dsl Exp $
+# $NetBSD: files.compat,v 1.25 2016/12/13 10:54:27 kamil Exp $
# NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp
# options for MP configuration through the MP spec
@@ -43,9 +43,6 @@ defflag opt_compat_oldboot.h XXXCOMPAT_
# Large page size
defflag opt_largepages.h XXXLARGEPAGES
-# kernel stack debug
-defflag opt_kstack_dr0.h XXXKSTACK_CHECK_DR0
-
#Pentium 4+ Thermal Monitor ODCM (aka On Demand Clock Modulation)
defflag opt_intel_odcm.h XXXINTEL_ONDEMAND_CLOCKMOD
Index: src/sys/arch/xen/conf/files.xen
diff -u src/sys/arch/xen/conf/files.xen:1.141 src/sys/arch/xen/conf/files.xen:1.142
--- src/sys/arch/xen/conf/files.xen:1.141 Fri May 20 03:41:20 2016
+++ src/sys/arch/xen/conf/files.xen Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-# $NetBSD: files.xen,v 1.141 2016/05/20 03:41:20 jnemeth Exp $
+# $NetBSD: files.xen,v 1.142 2016/12/13 10:54:27 kamil Exp $
# NetBSD: files.x86,v 1.10 2003/10/08 17:30:00 bouyer Exp
# NetBSD: files.i386,v 1.254 2004/03/25 23:32:10 jmc Exp
@@ -39,7 +39,6 @@ file arch/i386/i386/aout_machdep.c exec_
file arch/i386/i386/busfunc.S
file arch/i386/i386/cpufunc.S
file arch/i386/i386/cpu_in_cksum.S (inet | inet6) & cpu_in_cksum
-file arch/i386/i386/db_dbgreg.S ddb | kstack_check_dr0
file arch/i386/i386/db_disasm.c ddb
file arch/i386/i386/db_interface.c ddb
file arch/i386/i386/db_machdep.c ddb
Index: src/sys/arch/xen/x86/xen_pmap.c
diff -u src/sys/arch/xen/x86/xen_pmap.c:1.23 src/sys/arch/xen/x86/xen_pmap.c:1.24
--- src/sys/arch/xen/x86/xen_pmap.c:1.23 Mon Nov 21 04:10:05 2016
+++ src/sys/arch/xen/x86/xen_pmap.c Tue Dec 13 10:54:27 2016
@@ -1,4 +1,4 @@
-/* $NetBSD: xen_pmap.c,v 1.23 2016/11/21 04:10:05 ozaki-r Exp $ */
+/* $NetBSD: xen_pmap.c,v 1.24 2016/12/13 10:54:27 kamil Exp $ */
/*
* Copyright (c) 2007 Manuel Bouyer.
@@ -102,15 +102,12 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xen_pmap.c,v 1.23 2016/11/21 04:10:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_pmap.c,v 1.24 2016/12/13 10:54:27 kamil Exp $");
#include "opt_user_ldt.h"
#include "opt_lockdebug.h"
#include "opt_multiprocessor.h"
#include "opt_xen.h"
-#if !defined(__x86_64__)
-#include "opt_kstack_dr0.h"
-#endif /* !defined(__x86_64__) */
#include <sys/param.h>
#include <sys/systm.h>