Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 6 Jan 2010 16:49:00 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-7@freebsd.org
Subject:   svn commit: r201654 - stable/7/sys/netinet
Message-ID:  <201001061649.o06Gn0wd081668@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Wed Jan  6 16:48:59 2010
New Revision: 201654
URL: http://svn.freebsd.org/changeset/base/201654

Log:
  MFC r184720:
  
    Fix a bug introduced with r182851 (r201653 in stable/7) splitting
    tcp_mss() into tcp_mss() and tcp_mss_update() so that tcp_mtudisc()
    could re-use the same code.
  
    In case we return early and got a metricptr to pass the hostcache
    info back to the caller we need to initialize the data to a defined
    state (zero it) as tcp_hc_get() would do if there was no hit.
    Without that the caller would check on random stack garbage which
    could lead to undefined results.
  
    This only affected tcp_mss() if there was no routing entry for the peer,
    tcp_mtudisc() was not affected.

Modified:
  stable/7/sys/netinet/tcp_input.c
Directory Properties:
  stable/7/sys/   (props changed)
  stable/7/sys/cddl/contrib/opensolaris/   (props changed)
  stable/7/sys/contrib/dev/acpica/   (props changed)
  stable/7/sys/contrib/pf/   (props changed)

Modified: stable/7/sys/netinet/tcp_input.c
==============================================================================
--- stable/7/sys/netinet/tcp_input.c	Wed Jan  6 16:43:09 2010	(r201653)
+++ stable/7/sys/netinet/tcp_input.c	Wed Jan  6 16:48:59 2010	(r201654)
@@ -2761,8 +2761,16 @@ tcp_mss_update(struct tcpcb *tp, int off
 	/*
 	 * No route to sender, stay with default mss and return.
 	 */
-	if (maxmtu == 0)
+	if (maxmtu == 0) {
+		/*
+		 * In case we return early we need to intialize metrics
+		 * to a defined state as tcp_hc_get() would do for us
+		 * if there was no cache hit.
+		 */
+		if (metricptr != NULL)
+			bzero(metricptr, sizeof(struct hc_metrics_lite));
 		return;
+	}
 
 	/* Check the interface for TSO capabilities. */
 	if (mtuflags & CSUM_TSO)



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