diff options
author | marius <marius@FreeBSD.org> | 2012-03-31 13:56:24 +0000 |
---|---|---|
committer | marius <marius@FreeBSD.org> | 2012-03-31 13:56:24 +0000 |
commit | 6b88064bda6019610e9f8c7747ab8c2578a5e19f (patch) | |
tree | 0663e519505f9d0f4dc2a6db9f5cc7e5d2dc0c37 | |
parent | 4409a9b5ecf048e2cdd711cd1dbb42b8d6501e54 (diff) | |
download | FreeBSD-src-6b88064bda6019610e9f8c7747ab8c2578a5e19f.zip FreeBSD-src-6b88064bda6019610e9f8c7747ab8c2578a5e19f.tar.gz |
Fix panic on kernel traps having a mapping in trap_sig b0rked in r206086.
Repored by: David E. Cross
MFC after: 3 days
-rw-r--r-- | sys/sparc64/sparc64/trap.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/sys/sparc64/sparc64/trap.c b/sys/sparc64/sparc64/trap.c index 7037e46..93ebcfa 100644 --- a/sys/sparc64/sparc64/trap.c +++ b/sys/sparc64/sparc64/trap.c @@ -215,6 +215,9 @@ static const int trap_sig[] = { -1, /* kernel stack fault */ }; +CTASSERT(sizeof(trap_msg) / sizeof(*trap_msg) == T_MAX); +CTASSERT(sizeof(trap_sig) / sizeof(*trap_sig) == T_MAX); + CTASSERT(sizeof(struct trapframe) == 256); int debugger_on_signal = 0; @@ -298,7 +301,7 @@ trap(struct trapframe *tf) sig = trap_cecc(); break; default: - if (tf->tf_type < 0 || tf->tf_type >= T_MAX) + if (tf->tf_type < 0 || tf->tf_type > T_MAX) panic("trap: bad trap type %#lx (user)", tf->tf_type); else if (trap_sig[tf->tf_type] == -1) @@ -402,12 +405,10 @@ trap(struct trapframe *tf) if (error != 0) { tf->tf_type &= ~T_KERNEL; - if (tf->tf_type < 0 || tf->tf_type >= T_MAX) + if (tf->tf_type < 0 || tf->tf_type > T_MAX) panic("trap: bad trap type %#lx (kernel)", tf->tf_type); - else if (trap_sig[tf->tf_type] == -1) - panic("trap: %s (kernel)", - trap_msg[tf->tf_type]); + panic("trap: %s (kernel)", trap_msg[tf->tf_type]); } } CTR1(KTR_TRAP, "trap: td=%p return", td); |