diff options
author | Robert Watson <rwatson@FreeBSD.org> | 2010-02-25 09:51:14 +0000 |
---|---|---|
committer | Robert Watson <rwatson@FreeBSD.org> | 2010-02-25 09:51:14 +0000 |
commit | 7f450feb07b36fa0f582fba0b262207e1f609609 (patch) | |
tree | 81b6ec0cb422859b3d4b3906492cab969ae5bf88 /sys/net/netisr.c | |
parent | 605cf4275dca46ad5ff298513fd3fa9f3c5dd9c4 (diff) | |
download | src-7f450feb07b36fa0f582fba0b262207e1f609609.tar.gz src-7f450feb07b36fa0f582fba0b262207e1f609609.zip |
Fix edge cases in several KASSERTs: use <= rather than < when testing that
counters have not gone about MAXCPU or NETISR_MAXPROT. These problems
caused panics on UP kernels with INVARIANTS when using sysctl -a, but
would also have caused problems for 32-core boxes or if the netisr
protocol vector was fully populated.
Reported by: nwhitehorn, Neel Natu <neelnatu@gmail.com>
MFC after: 4 days
Notes
Notes:
svn path=/head/; revision=204303
Diffstat (limited to 'sys/net/netisr.c')
-rw-r--r-- | sys/net/netisr.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/net/netisr.c b/sys/net/netisr.c index d74682f6e924..33b0180a59e6 100644 --- a/sys/net/netisr.c +++ b/sys/net/netisr.c @@ -1167,7 +1167,7 @@ sysctl_netisr_proto(SYSCTL_HANDLER_ARGS) counter++; } NETISR_RUNLOCK(&tracker); - KASSERT(counter < NETISR_MAXPROT, + KASSERT(counter <= NETISR_MAXPROT, ("sysctl_netisr_proto: counter too big (%d)", counter)); error = SYSCTL_OUT(req, snp_array, sizeof(*snp_array) * counter); free(snp_array, M_TEMP); @@ -1220,7 +1220,7 @@ sysctl_netisr_workstream(SYSCTL_HANDLER_ARGS) counter++; } NETISR_RUNLOCK(&tracker); - KASSERT(counter < MAXCPU, + KASSERT(counter <= MAXCPU, ("sysctl_netisr_workstream: counter too big (%d)", counter)); error = SYSCTL_OUT(req, snws_array, sizeof(*snws_array) * counter); free(snws_array, M_TEMP); @@ -1281,7 +1281,7 @@ sysctl_netisr_work(SYSCTL_HANDLER_ARGS) } NWS_UNLOCK(nwsp); } - KASSERT(counter < MAXCPU * NETISR_MAXPROT, + KASSERT(counter <= MAXCPU * NETISR_MAXPROT, ("sysctl_netisr_work: counter too big (%d)", counter)); NETISR_RUNLOCK(&tracker); error = SYSCTL_OUT(req, snw_array, sizeof(*snw_array) * counter); |