From nobody@FreeBSD.org  Fri Mar  9 14:45:28 2012
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52])
	by hub.freebsd.org (Postfix) with ESMTP id B1675106564A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  9 Mar 2012 14:45:28 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from red.freebsd.org (red.freebsd.org [IPv6:2001:4f8:fff6::22])
	by mx1.freebsd.org (Postfix) with ESMTP id 835B18FC1A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri,  9 Mar 2012 14:45:28 +0000 (UTC)
Received: from red.freebsd.org (localhost [127.0.0.1])
	by red.freebsd.org (8.14.4/8.14.4) with ESMTP id q29EjSe5030195
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 9 Mar 2012 14:45:28 GMT
	(envelope-from nobody@red.freebsd.org)
Received: (from nobody@localhost)
	by red.freebsd.org (8.14.4/8.14.4/Submit) id q29EjSuQ030194;
	Fri, 9 Mar 2012 14:45:28 GMT
	(envelope-from nobody)
Message-Id: <201203091445.q29EjSuQ030194@red.freebsd.org>
Date: Fri, 9 Mar 2012 14:45:28 GMT
From: Nikita <niakrisn@gmail.com>
To: freebsd-gnats-submit@FreeBSD.org
Subject: Syncache syncache.count overflow
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         165879
>Category:       kern
>Synopsis:       [tcp] Syncache syncache.count overflow
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    andre
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Mar 09 14:50:12 UTC 2012
>Closed-Date:    
>Last-Modified:  Fri Jul  5 15:20:00 UTC 2013
>Originator:     Nikita
>Release:        9.0-RELEASE
>Organization:
>Environment:
FreeBSD front-01 9.0-RELEASE FreeBSD 9.0-RELEASE #0: Tue Jan  3 07:46:30 UTC 2012     root@farrell.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC  amd64
>Description:
Hello, seems like unsigned integer overflow here:

net.inet.tcp.syncache.rst_on_sock_fail: 1
net.inet.tcp.syncache.rexmtlimit: 2
net.inet.tcp.syncache.hashsize: 512
net.inet.tcp.syncache.count: 4294960727
net.inet.tcp.syncache.cachelimit: 15360
net.inet.tcp.syncache.bucketlimit: 30
>How-To-Repeat:

>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-net 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Sat Mar 10 06:05:20 UTC 2012 
Responsible-Changed-Why:  
tcp-related. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=165879 
Responsible-Changed-From-To: freebsd-net->andre 
Responsible-Changed-By: andre 
Responsible-Changed-When: Mon Mar 12 20:31:34 UTC 2012 
Responsible-Changed-Why:  
Snatch up. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=165879 

From: Andre Oppermann <oppermann@networx.ch>
To: niakrisn@gmail.com
Cc: freebsd-gnats-submit@freebsd.org
Subject: kern/165879: svn commit: r232885 - user/andre/tcp_workqueue/sys/netinet
Date: Mon, 12 Mar 2012 22:06:05 +0100

 This is a multi-part message in MIME format.
 --------------020008040207080303020306
 Content-Type: text/plain; charset=UTF-8; format=flowed
 Content-Transfer-Encoding: 7bit
 
 Nikita,
 
 could you please test the attached patch for the syncache syncache.count
 overflow bug report?
 
 -- 
 Andre
 
 --------------020008040207080303020306
 Content-Type: message/rfc822;
  name="svn commit: r232885 - user/andre/tcp_workqueue/sys/netinet.eml"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: attachment;
  filename*0="svn commit: r232885 - user/andre/tcp_workqueue/sys/netinet.e";
  filename*1="ml"
 
 X-Account-Key: account3
 X-Mozilla-Keys:                                                                                 
 Return-Path: <owner-src-committers@FreeBSD.org>
 Delivered-To: andre@networx.ch
 Received: (qmail 34160 invoked from network); 12 Mar 2012 18:44:10 -0000
 Received: from mx2.freebsd.org ([69.147.83.53])
           (envelope-sender <owner-src-committers@FreeBSD.org>)
           by c00l3r.networx.ch (qmail-ldap-1.03) with SMTP
           for <andre@networx.ch>; 12 Mar 2012 18:44:10 -0000
 Received: from hub.freebsd.org (hub.freebsd.org [IPv6:2001:4f8:fff6::36])
 	by mx2.freebsd.org (Postfix) with ESMTP id 585231503A2
 	for <andre@networx.ch>; Mon, 12 Mar 2012 20:31:15 +0000 (UTC)
 Received: by hub.freebsd.org (Postfix)
 	id 509FD106567B; Mon, 12 Mar 2012 20:31:15 +0000 (UTC)
 Delivered-To: andre@freebsd.org
 Received: by hub.freebsd.org (Postfix, from userid 538)
 	id 428EF106566C; Mon, 12 Mar 2012 20:31:15 +0000 (UTC)
 Delivered-To: src-committers@freebsd.org
 Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
 	by hub.freebsd.org (Postfix) with ESMTP id C443B1065674;
 	Mon, 12 Mar 2012 20:31:09 +0000 (UTC)
 	(envelope-from andre@FreeBSD.org)
 Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c])
 	by mx1.freebsd.org (Postfix) with ESMTP id B3A5A8FC0C;
 	Mon, 12 Mar 2012 20:31:09 +0000 (UTC)
 Received: from svn.freebsd.org (localhost [127.0.0.1])
 	by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q2CKV9mA084886;
 	Mon, 12 Mar 2012 20:31:09 GMT
 	(envelope-from andre@svn.freebsd.org)
 Received: (from andre@localhost)
 	by svn.freebsd.org (8.14.4/8.14.4/Submit) id q2CKV9gp084883;
 	Mon, 12 Mar 2012 20:31:09 GMT
 	(envelope-from andre@svn.freebsd.org)
 Message-Id: <201203122031.q2CKV9gp084883@svn.freebsd.org>
 From: Andre Oppermann <andre@FreeBSD.org>
 Date: Mon, 12 Mar 2012 20:31:09 +0000 (UTC)
 To: src-committers@freebsd.org, svn-src-user@freebsd.org
 Subject: svn commit: r232885 - user/andre/tcp_workqueue/sys/netinet
 X-SVN-Group: user
 MIME-Version: 1.0
 Content-Type: text/plain; charset=UTF-8
 Content-Transfer-Encoding: 8bit
 Sender: owner-src-committers@FreeBSD.org
 Precedence: bulk
 X-Loop: FreeBSD.ORG
 
 Author: andre
 Date: Mon Mar 12 20:31:09 2012
 New Revision: 232885
 URL: http://svn.freebsd.org/changeset/base/232885
 
 Log:
   Change the syncache count reporting the current number of entries
   from an unprotected u_int that reports garbage on SMP to a function
   based sysctl obtaining the current value from UMA.
   
   Also read back the actual cache_limit after page size rounding by UMA.
   
   PR:	kern/165879
 
 Modified:
   user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c
   user/andre/tcp_workqueue/sys/netinet/tcp_syncache.h
 
 Modified: user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c
 ==============================================================================
 --- user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c	Mon Mar 12 20:24:59 2012	(r232884)
 +++ user/andre/tcp_workqueue/sys/netinet/tcp_syncache.c	Mon Mar 12 20:31:09 2012	(r232885)
 @@ -123,6 +123,7 @@ struct syncache *syncache_lookup(struct 
  static int	 syncache_respond(struct syncache *);
  static struct	 socket *syncache_socket(struct syncache *, struct socket *,
  		    struct mbuf *m);
 +static int	 syncache_sysctl_count(SYSCTL_HANDLER_ARGS);
  static void	 syncache_timeout(struct syncache *sc, struct syncache_head *sch,
  		    int docallout);
  static void	 syncache_timer(void *);
 @@ -158,8 +159,8 @@ SYSCTL_VNET_UINT(_net_inet_tcp_syncache,
      &VNET_NAME(tcp_syncache.cache_limit), 0,
      "Overall entry limit for syncache");
  
 -SYSCTL_VNET_UINT(_net_inet_tcp_syncache, OID_AUTO, count, CTLFLAG_RD,
 -    &VNET_NAME(tcp_syncache.cache_count), 0,
 +SYSCTL_VNET_PROC(_net_inet_tcp_syncache, OID_AUTO, count, (CTLTYPE_UINT|CTLFLAG_RD),
 +    NULL, 0, &syncache_sysctl_count, "IU",
      "Current number of entries in syncache");
  
  SYSCTL_VNET_UINT(_net_inet_tcp_syncache, OID_AUTO, hashsize, CTLFLAG_RDTUN,
 @@ -225,7 +226,6 @@ syncache_init(void)
  {
  	int i;
  
 -	V_tcp_syncache.cache_count = 0;
  	V_tcp_syncache.hashsize = TCP_SYNCACHE_HASHSIZE;
  	V_tcp_syncache.bucket_limit = TCP_SYNCACHE_BUCKETLIMIT;
  	V_tcp_syncache.rexmt_limit = SYNCACHE_MAXREXMTS;
 @@ -269,6 +269,7 @@ syncache_init(void)
  	V_tcp_syncache.zone = uma_zcreate("syncache", sizeof(struct syncache),
  	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
  	uma_zone_set_max(V_tcp_syncache.zone, V_tcp_syncache.cache_limit);
 +	V_tcp_syncache.cache_limit = uma_zone_get_max(V_tcp_syncache.zone);
  }
  
  #ifdef VIMAGE
 @@ -296,8 +297,8 @@ syncache_destroy(void)
  		mtx_destroy(&sch->sch_mtx);
  	}
  
 -	KASSERT(V_tcp_syncache.cache_count == 0, ("%s: cache_count %d not 0",
 -	    __func__, V_tcp_syncache.cache_count));
 +	KASSERT(uma_zone_get_cur(V_tcp_syncache.zone) == 0,
 +	    ("%s: cache_count not 0", __func__));
  
  	/* Free the allocated global resources. */
  	uma_zdestroy(V_tcp_syncache.zone);
 @@ -305,6 +306,15 @@ syncache_destroy(void)
  }
  #endif
  
 +static int
 +syncache_sysctl_count(SYSCTL_HANDLER_ARGS)
 +{
 +	int count;
 +
 +	count = uma_zone_get_cur(V_tcp_syncache.zone);
 +	return (sysctl_handle_int(oidp, &count, sizeof(count), req));
 +}
 +
  /*
   * Inserts a syncache entry into the specified bucket row.
   * Locks and unlocks the syncache_head autonomously.
 @@ -339,7 +349,6 @@ syncache_insert(struct syncache *sc, str
  
  	SCH_UNLOCK(sch);
  
 -	V_tcp_syncache.cache_count++;
  	TCPSTAT_INC(tcps_sc_added);
  }
  
 @@ -361,7 +370,6 @@ syncache_drop(struct syncache *sc, struc
  		sc->sc_tu->tu_syncache_event(TOE_SC_DROP, sc->sc_toepcb);
  #endif		    
  	syncache_free(sc);
 -	V_tcp_syncache.cache_count--;
  }
  
  /*
 @@ -927,7 +935,6 @@ syncache_expand(struct in_conninfo *inc,
  		/* Pull out the entry to unlock the bucket row. */
  		TAILQ_REMOVE(&sch->sch_bucket, sc, sc_hash);
  		sch->sch_length--;
 -		V_tcp_syncache.cache_count--;
  		SCH_UNLOCK(sch);
  	}
  
 
 Modified: user/andre/tcp_workqueue/sys/netinet/tcp_syncache.h
 ==============================================================================
 --- user/andre/tcp_workqueue/sys/netinet/tcp_syncache.h	Mon Mar 12 20:24:59 2012	(r232884)
 +++ user/andre/tcp_workqueue/sys/netinet/tcp_syncache.h	Mon Mar 12 20:31:09 2012	(r232885)
 @@ -119,7 +119,6 @@ struct tcp_syncache {
  	u_int	hashsize;
  	u_int	hashmask;
  	u_int	bucket_limit;
 -	u_int	cache_count;		/* XXX: unprotected */
  	u_int	cache_limit;
  	u_int	rexmt_limit;
  	u_int	hash_secret;
 
 
 
 --------------020008040207080303020306--

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/165879: commit references a PR
Date: Fri,  5 Jul 2013 15:19:14 +0000 (UTC)

 Author: andre
 Date: Fri Jul  5 15:18:54 2013
 New Revision: 252790
 URL: http://svnweb.freebsd.org/changeset/base/252790
 
 Log:
   MFC r242253:
   
    Simplify implementation of net.inet.tcp.reass.maxsegments and
    net.inet.tcp.reass.cursegments.
   
   MFC r242254:
   
    Change the syncache count reporting the current number of entries
    from an unprotected u_int that reports garbage on SMP to a function
    based sysctl obtaining the current value from UMA.
   
    Also read back the actual cache_limit after page size rounding by UMA.
    PR:		kern/165879
   
   MFC r244680:
   
    Fix sysctl_handle_int() usage. Either arg1 or arg2 should be supplied,
    and arg2 doesn't pass size of arg1.
   
   MFC r246208:
   
    uma_zone_set_max() directly returns the rounded effective zone
    limit.  Use the return value directly instead of doing a second
    uma_zone_set_max() step.
 
 Modified:
   stable/9/sys/netinet/tcp_reass.c
   stable/9/sys/netinet/tcp_syncache.c
   stable/9/sys/netinet/tcp_syncache.h
 Directory Properties:
   stable/9/sys/   (props changed)
 
 Modified: stable/9/sys/netinet/tcp_reass.c
 ==============================================================================
 --- stable/9/sys/netinet/tcp_reass.c	Fri Jul  5 14:58:24 2013	(r252789)
 +++ stable/9/sys/netinet/tcp_reass.c	Fri Jul  5 15:18:54 2013	(r252790)
 @@ -74,7 +74,6 @@ __FBSDID("$FreeBSD$");
  #include <netinet/tcp_debug.h>
  #endif /* TCPDEBUG */
  
 -static int tcp_reass_sysctl_maxseg(SYSCTL_HANDLER_ARGS);
  static int tcp_reass_sysctl_qsize(SYSCTL_HANDLER_ARGS);
  
  static SYSCTL_NODE(_net_inet_tcp, OID_AUTO, reass, CTLFLAG_RW, 0,
 @@ -82,16 +81,12 @@ static SYSCTL_NODE(_net_inet_tcp, OID_AU
  
  static VNET_DEFINE(int, tcp_reass_maxseg) = 0;
  #define	V_tcp_reass_maxseg		VNET(tcp_reass_maxseg)
 -SYSCTL_VNET_PROC(_net_inet_tcp_reass, OID_AUTO, maxsegments,
 -    CTLTYPE_INT | CTLFLAG_RDTUN,
 -    &VNET_NAME(tcp_reass_maxseg), 0, &tcp_reass_sysctl_maxseg, "I",
 +SYSCTL_VNET_INT(_net_inet_tcp_reass, OID_AUTO, maxsegments, CTLFLAG_RDTUN,
 +    &VNET_NAME(tcp_reass_maxseg), 0,
      "Global maximum number of TCP Segments in Reassembly Queue");
  
 -static VNET_DEFINE(int, tcp_reass_qsize) = 0;
 -#define	V_tcp_reass_qsize		VNET(tcp_reass_qsize)
  SYSCTL_VNET_PROC(_net_inet_tcp_reass, OID_AUTO, cursegments,
 -    CTLTYPE_INT | CTLFLAG_RD,
 -    &VNET_NAME(tcp_reass_qsize), 0, &tcp_reass_sysctl_qsize, "I",
 +    (CTLTYPE_INT | CTLFLAG_RD), NULL, 0, &tcp_reass_sysctl_qsize, "I",
      "Global number of TCP Segments currently in Reassembly Queue");
  
  static VNET_DEFINE(int, tcp_reass_overflows) = 0;
 @@ -109,8 +104,10 @@ static void
  tcp_reass_zone_change(void *tag)
  {
  
 +	/* Set the zone limit and read back the effective value. */
  	V_tcp_reass_maxseg = nmbclusters / 16;
 -	uma_zone_set_max(V_tcp_reass_zone, V_tcp_reass_maxseg);
 +	V_tcp_reass_maxseg = uma_zone_set_max(V_tcp_reass_zone,
 +	    V_tcp_reass_maxseg);
  }
  
  void
 @@ -122,7 +119,9 @@ tcp_reass_init(void)
  	    &V_tcp_reass_maxseg);
  	V_tcp_reass_zone = uma_zcreate("tcpreass", sizeof (struct tseg_qent),
  	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
 -	uma_zone_set_max(V_tcp_reass_zone, V_tcp_reass_maxseg);
 +	/* Set the zone limit and read back the effective value. */
 +	V_tcp_reass_maxseg = uma_zone_set_max(V_tcp_reass_zone,
 +	    V_tcp_reass_maxseg);
  	EVENTHANDLER_REGISTER(nmbclusters_change,
  	    tcp_reass_zone_change, NULL, EVENTHANDLER_PRI_ANY);
  }
 @@ -156,17 +155,12 @@ tcp_reass_flush(struct tcpcb *tp)
  }
  
  static int
 -tcp_reass_sysctl_maxseg(SYSCTL_HANDLER_ARGS)
 -{
 -	V_tcp_reass_maxseg = uma_zone_get_max(V_tcp_reass_zone);
 -	return (sysctl_handle_int(oidp, arg1, arg2, req));
 -}
 -
 -static int
  tcp_reass_sysctl_qsize(SYSCTL_HANDLER_ARGS)
  {
 -	V_tcp_reass_qsize = uma_zone_get_cur(V_tcp_reass_zone);
 -	return (sysctl_handle_int(oidp, arg1, arg2, req));
 +	int qsize;
 +
 +	qsize = uma_zone_get_cur(V_tcp_reass_zone);
 +	return (sysctl_handle_int(oidp, &qsize, 0, req));
  }
  
  int
 
 Modified: stable/9/sys/netinet/tcp_syncache.c
 ==============================================================================
 --- stable/9/sys/netinet/tcp_syncache.c	Fri Jul  5 14:58:24 2013	(r252789)
 +++ stable/9/sys/netinet/tcp_syncache.c	Fri Jul  5 15:18:54 2013	(r252790)
 @@ -123,6 +123,7 @@ struct syncache *syncache_lookup(struct 
  static int	 syncache_respond(struct syncache *);
  static struct	 socket *syncache_socket(struct syncache *, struct socket *,
  		    struct mbuf *m);
 +static int	 syncache_sysctl_count(SYSCTL_HANDLER_ARGS);
  static void	 syncache_timeout(struct syncache *sc, struct syncache_head *sch,
  		    int docallout);
  static void	 syncache_timer(void *);
 @@ -158,8 +159,8 @@ SYSCTL_VNET_UINT(_net_inet_tcp_syncache,
      &VNET_NAME(tcp_syncache.cache_limit), 0,
      "Overall entry limit for syncache");
  
 -SYSCTL_VNET_UINT(_net_inet_tcp_syncache, OID_AUTO, count, CTLFLAG_RD,
 -    &VNET_NAME(tcp_syncache.cache_count), 0,
 +SYSCTL_VNET_PROC(_net_inet_tcp_syncache, OID_AUTO, count, (CTLTYPE_UINT|CTLFLAG_RD),
 +    NULL, 0, &syncache_sysctl_count, "IU",
      "Current number of entries in syncache");
  
  SYSCTL_VNET_UINT(_net_inet_tcp_syncache, OID_AUTO, hashsize, CTLFLAG_RDTUN,
 @@ -225,7 +226,6 @@ syncache_init(void)
  {
  	int i;
  
 -	V_tcp_syncache.cache_count = 0;
  	V_tcp_syncache.hashsize = TCP_SYNCACHE_HASHSIZE;
  	V_tcp_syncache.bucket_limit = TCP_SYNCACHE_BUCKETLIMIT;
  	V_tcp_syncache.rexmt_limit = SYNCACHE_MAXREXMTS;
 @@ -268,7 +268,8 @@ syncache_init(void)
  	/* Create the syncache entry zone. */
  	V_tcp_syncache.zone = uma_zcreate("syncache", sizeof(struct syncache),
  	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
 -	uma_zone_set_max(V_tcp_syncache.zone, V_tcp_syncache.cache_limit);
 +	V_tcp_syncache.cache_limit = uma_zone_set_max(V_tcp_syncache.zone,
 +	    V_tcp_syncache.cache_limit);
  }
  
  #ifdef VIMAGE
 @@ -296,8 +297,8 @@ syncache_destroy(void)
  		mtx_destroy(&sch->sch_mtx);
  	}
  
 -	KASSERT(V_tcp_syncache.cache_count == 0, ("%s: cache_count %d not 0",
 -	    __func__, V_tcp_syncache.cache_count));
 +	KASSERT(uma_zone_get_cur(V_tcp_syncache.zone) == 0,
 +	    ("%s: cache_count not 0", __func__));
  
  	/* Free the allocated global resources. */
  	uma_zdestroy(V_tcp_syncache.zone);
 @@ -305,6 +306,15 @@ syncache_destroy(void)
  }
  #endif
  
 +static int
 +syncache_sysctl_count(SYSCTL_HANDLER_ARGS)
 +{
 +	int count;
 +
 +	count = uma_zone_get_cur(V_tcp_syncache.zone);
 +	return (sysctl_handle_int(oidp, &count, 0, req));
 +}
 +
  /*
   * Inserts a syncache entry into the specified bucket row.
   * Locks and unlocks the syncache_head autonomously.
 @@ -347,7 +357,6 @@ syncache_insert(struct syncache *sc, str
  
  	SCH_UNLOCK(sch);
  
 -	V_tcp_syncache.cache_count++;
  	TCPSTAT_INC(tcps_sc_added);
  }
  
 @@ -373,7 +382,6 @@ syncache_drop(struct syncache *sc, struc
  #endif
  
  	syncache_free(sc);
 -	V_tcp_syncache.cache_count--;
  }
  
  /*
 @@ -958,7 +966,6 @@ syncache_expand(struct in_conninfo *inc,
  			tod->tod_syncache_removed(tod, sc->sc_todctx);
  		}
  #endif
 -		V_tcp_syncache.cache_count--;
  		SCH_UNLOCK(sch);
  	}
  
 
 Modified: stable/9/sys/netinet/tcp_syncache.h
 ==============================================================================
 --- stable/9/sys/netinet/tcp_syncache.h	Fri Jul  5 14:58:24 2013	(r252789)
 +++ stable/9/sys/netinet/tcp_syncache.h	Fri Jul  5 15:18:54 2013	(r252790)
 @@ -113,7 +113,6 @@ struct tcp_syncache {
  	u_int	hashsize;
  	u_int	hashmask;
  	u_int	bucket_limit;
 -	u_int	cache_count;		/* XXX: unprotected */
  	u_int	cache_limit;
  	u_int	rexmt_limit;
  	u_int	hash_secret;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
>Unformatted:
