From avr@juniper.net  Thu Oct 29 16:48:30 1998
Received: from red.juniper.net (red.juniper.net [208.197.169.254])
          by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id QAA24179
          for <FreeBSD-gnats-submit@freebsd.org>; Thu, 29 Oct 1998 16:48:29 -0800 (PST)
          (envelope-from avr@juniper.net)
Received: from spartacus.juniper.net (spartacus.juniper.net [207.79.80.142])
	by red.juniper.net (8.8.5/8.8.5) with ESMTP id QAA11936
	for <FreeBSD-gnats-submit@freebsd.org>; Thu, 29 Oct 1998 16:48:27 -0800 (PST)
Received: (from avr@localhost) by spartacus.juniper.net (8.8.8/8.7.3) id QAA14478; Thu, 29 Oct 1998 16:48:31 -0800 (PST)
Message-Id: <199810300048.QAA14478@spartacus.juniper.net>
Date: Thu, 29 Oct 1998 16:48:31 -0800 (PST)
From: Alexander (Sasha) Robinson <avr@juniper.net>
Reply-To: avr@juniper.net
To: FreeBSD-gnats-submit@freebsd.org
Subject: sbcheck is broken
X-Send-Pr-Version: 3.2

>Number:         8494
>Category:       misc
>Synopsis:       sbcheck is broken
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Oct 29 16:50:00 PST 1998
>Closed-Date:    Sat Nov 7 09:59:46 PST 1998
>Last-Modified:  Sat Nov  7 10:00:08 PST 1998
>Originator:     Alexander (Sasha) Robinson
>Release:        FreeBSD 2.2.6-STABLE i386
>Organization:
juniper
>Environment:

	

>Description:

	sbcheck is a socket buffer debugging routine that checks the packets
	to make sure it adds up to the amount of data the socket buf thinks it
	has. Currently it only checks the first packet on the buffer. Since
	this is debugging code it really isn't important until you want to
	debug something.

>How-To-Repeat:

	

>Fix:
	
	Get it to check all packets on the socket buffer.

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: gnats-admin->freebsd-bugs 
Responsible-Changed-By: steve 
Responsible-Changed-When: Sat Oct 31 12:28:10 PST 1998 
Responsible-Changed-Why:  
Misfiled PR. 

From: Bill Fenner <fenner@FreeBSD.ORG>
To: freebsd-gnats-submit@FreeBSD.org, avr@juniper.net
Cc:  Subject: Re: misc/8494: sbcheck is broken
Date: Tue, 3 Nov 1998 11:00:04 -0800 (PST)

 I wrote this code when trying to use sbcheck() myself a while ago.
 Does this do what you want?
 
   Bill
 
 cvs diff: Diffing .
 Index: uipc_socket2.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/kern/uipc_socket2.c,v
 retrieving revision 1.39
 diff -u -r1.39 uipc_socket2.c
 --- uipc_socket2.c	1998/09/05 13:24:39	1.39
 +++ uipc_socket2.c	1998/11/03 18:58:16
 @@ -477,15 +477,17 @@
  	register struct sockbuf *sb;
  {
  	register struct mbuf *m;
 +	register struct mbuf *n = 0;
  	register int len = 0, mbcnt = 0;
  
 -	for (m = sb->sb_mb; m; m = m->m_next) {
 +	for (m = sb->sb_mb; m; m = n) {
 +	    n = m->m_nextpkt;
 +	    for (; m; m = m->m_next) {
  		len += m->m_len;
  		mbcnt += MSIZE;
  		if (m->m_flags & M_EXT) /*XXX*/ /* pretty sure this is bogus */
  			mbcnt += m->m_ext.ext_size;
 -		if (m->m_nextpkt)
 -			panic("sbcheck nextpkt");
 +	    }
  	}
  	if (len != sb->sb_cc || mbcnt != sb->sb_mbcnt) {
  		printf("cc %d != %d || mbcnt %d != %d\n", len, sb->sb_cc,

From: "Alexander (Sasha) Robinson" <avr@juniper.net>
To: Bill Fenner <fenner@FreeBSD.ORG>
Cc: freebsd-gnats-submit@FreeBSD.ORG
Subject: Re: misc/8494: sbcheck is broken
Date: Wed, 04 Nov 1998 11:44:02 -0800

 Bill Fenner wrote:
 > 
 > I wrote this code when trying to use sbcheck() myself a while ago.
 > Does this do what you want?
 > 
 >   Bill
 > 
 > cvs diff: Diffing .
 > Index: uipc_socket2.c
 > ===================================================================
 > RCS file: /home/ncvs/src/sys/kern/uipc_socket2.c,v
 > retrieving revision 1.39
 > diff -u -r1.39 uipc_socket2.c
 > --- uipc_socket2.c      1998/09/05 13:24:39     1.39
 > +++ uipc_socket2.c      1998/11/03 18:58:16
 > @@ -477,15 +477,17 @@
 >         register struct sockbuf *sb;
 >  {
 >         register struct mbuf *m;
 > +       register struct mbuf *n = 0;
 >         register int len = 0, mbcnt = 0;
 > 
 > -       for (m = sb->sb_mb; m; m = m->m_next) {
 > +       for (m = sb->sb_mb; m; m = n) {
 > +           n = m->m_nextpkt;
 > +           for (; m; m = m->m_next) {
 >                 len += m->m_len;
 >                 mbcnt += MSIZE;
 >                 if (m->m_flags & M_EXT) /*XXX*/ /* pretty sure this is bogus */
 >                         mbcnt += m->m_ext.ext_size;
 > -               if (m->m_nextpkt)
 > -                       panic("sbcheck nextpkt");
 > +           }
 >         }
 >         if (len != sb->sb_cc || mbcnt != sb->sb_mbcnt) {
 >                 printf("cc %d != %d || mbcnt %d != %d\n", len, sb->sb_cc,
 
 Yep, that's it. Thanks for the quick response. I have to admit that when
 I filed this I had only intended to send it to our (Juniper Networks)
 internal gnats database as a placeholder for myself and mistakenly sent
 it out to you. I would have made the bug description a little less flip
 if I had realized where I was sending it :). Hope I didn't offend.
 
 Sasha
 
 -- 
 
 Alexander (Sasha) Robinson
 avr@juniper.net
State-Changed-From-To: open->closed 
State-Changed-By: fenner 
State-Changed-When: Sat Nov 7 09:59:46 PST 1998 
State-Changed-Why:  
Fixed in rev 1.40 of uipc_socket2.c 
>Unformatted:
