summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2009-11-24 17:06:11 +0000
committerimp <imp@FreeBSD.org>2009-11-24 17:06:11 +0000
commitafe56d15ef57773b72bc005ffa0a23768a84508c (patch)
tree0554307e2c2713db638c464f89b0bd036019424c
parenta621871732fc3b4840f737503301b686d3e4125a (diff)
downloadFreeBSD-src-afe56d15ef57773b72bc005ffa0a23768a84508c.zip
FreeBSD-src-afe56d15ef57773b72bc005ffa0a23768a84508c.tar.gz
Only all critical_enter()/critical_exit() if curthread has been set.
Otherwise we dereference a null pointer and can't get useful panic info early in boot.
-rw-r--r--sys/kern/kern_shutdown.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/kern/kern_shutdown.c b/sys/kern/kern_shutdown.c
index 3d96321..5e192b9 100644
--- a/sys/kern/kern_shutdown.c
+++ b/sys/kern/kern_shutdown.c
@@ -516,7 +516,8 @@ panic(const char *fmt, ...)
va_list ap;
static char buf[256];
- critical_enter();
+ if (td)
+ critical_enter();
#ifdef SMP
/*
* We don't want multiple CPU's to panic at the same time, so we
@@ -575,7 +576,8 @@ panic(const char *fmt, ...)
/* thread_unlock(td); */
if (!sync_on_panic)
bootopt |= RB_NOSYNC;
- critical_exit();
+ if (td)
+ critical_exit();
boot(bootopt);
}
OpenPOWER on IntegriCloud