Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 15 Jan 2011 19:05:06 +0000 (UTC)
From:      Robert Watson <rwatson@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r217450 - stable/8/sys/net
Message-ID:  <201101151905.p0FJ56AE034148@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rwatson
Date: Sat Jan 15 19:05:06 2011
New Revision: 217450
URL: http://svn.freebsd.org/changeset/base/217450

Log:
  Merge r204303 from head to stable/8:
  
    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>

Modified:
  stable/8/sys/net/netisr.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)

Modified: stable/8/sys/net/netisr.c
==============================================================================
--- stable/8/sys/net/netisr.c	Sat Jan 15 19:02:08 2011	(r217449)
+++ stable/8/sys/net/netisr.c	Sat Jan 15 19:05:06 2011	(r217450)
@@ -1159,7 +1159,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);
@@ -1212,7 +1212,7 @@ sysctl_netisr_workstream(SYSCTL_HANDLER_
 		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);
@@ -1273,7 +1273,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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101151905.p0FJ56AE034148>