Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Apr 2016 10:58:08 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r297738 - head/sys/netinet
Message-ID:  <201604091058.u39Aw8wt020687@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Sat Apr  9 10:58:08 2016
New Revision: 297738
URL: https://svnweb.freebsd.org/changeset/base/297738

Log:
  Mfp: r296259
  
  We attach the "counter" to the tcpcbs. Thus don't free the
  TCP Fastopen zone before the tcpcbs are gone, as otherwise
  the zone won't be empty.
  With that it should be safe to destroy the "tfo" zone without
  leaking the memory.
  
  PR:		164763
  Reviewed by:	gnn
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D5731

Modified:
  head/sys/netinet/tcp_fastopen.c
  head/sys/netinet/tcp_subr.c

Modified: head/sys/netinet/tcp_fastopen.c
==============================================================================
--- head/sys/netinet/tcp_fastopen.c	Sat Apr  9 10:53:21 2016	(r297737)
+++ head/sys/netinet/tcp_fastopen.c	Sat Apr  9 10:58:08 2016	(r297738)
@@ -204,7 +204,7 @@ void
 tcp_fastopen_init(void)
 {
 	V_counter_zone = uma_zcreate("tfo", sizeof(unsigned int),
-	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
+	    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, 0);
 	rm_init(&V_tcp_fastopen_keylock, "tfo_keylock");
 	callout_init_rm(&V_tcp_fastopen_autokey_ctx.c,
 	    &V_tcp_fastopen_keylock, 0);

Modified: head/sys/netinet/tcp_subr.c
==============================================================================
--- head/sys/netinet/tcp_subr.c	Sat Apr  9 10:53:21 2016	(r297737)
+++ head/sys/netinet/tcp_subr.c	Sat Apr  9 10:58:08 2016	(r297738)
@@ -738,9 +738,6 @@ tcp_destroy(void)
 {
 	int error;
 
-#ifdef TCP_RFC7413
-	tcp_fastopen_destroy();
-#endif
 	tcp_hc_destroy();
 	syncache_destroy();
 	tcp_tw_destroy();
@@ -748,6 +745,14 @@ tcp_destroy(void)
 	uma_zdestroy(V_sack_hole_zone);
 	uma_zdestroy(V_tcpcb_zone);
 
+#ifdef TCP_RFC7413
+	/*
+	 * Cannot free the zone until all tcpcbs are released as we attach
+	 * the allocations to them.
+	 */
+	tcp_fastopen_destroy();
+#endif
+
 	error = hhook_head_deregister(V_tcp_hhh[HHOOK_TCP_EST_IN]);
 	if (error != 0) {
 		printf("%s: WARNING: unable to deregister helper hook "



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