diff options
author | imp <imp@FreeBSD.org> | 2009-11-24 17:06:11 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2009-11-24 17:06:11 +0000 |
commit | afe56d15ef57773b72bc005ffa0a23768a84508c (patch) | |
tree | 0554307e2c2713db638c464f89b0bd036019424c | |
parent | a621871732fc3b4840f737503301b686d3e4125a (diff) | |
download | FreeBSD-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.c | 6 |
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); } |