Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 12 Jun 2018 23:54:09 +0000 (UTC)
From:      Randall Stewart <rrs@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r335022 - head/sys/netinet
Message-ID:  <201806122354.w5CNs9gO018102@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rrs
Date: Tue Jun 12 23:54:08 2018
New Revision: 335022
URL: https://svnweb.freebsd.org/changeset/base/335022

Log:
  This fixes missing VNET sets in the hpts system. Basically
  without this and running vnets with a TCP stack that uses
  some of the features is a recipe for panic (without this commit).
  
  Reported by:	Larry Rosenman
  Sponsored by:	Netflix Inc.
  Differential Revision:	https://reviews.freebsd.org/D15757

Modified:
  head/sys/netinet/tcp_hpts.c

Modified: head/sys/netinet/tcp_hpts.c
==============================================================================
--- head/sys/netinet/tcp_hpts.c	Tue Jun 12 23:26:25 2018	(r335021)
+++ head/sys/netinet/tcp_hpts.c	Tue Jun 12 23:54:08 2018	(r335022)
@@ -1215,7 +1215,9 @@ tcp_input_data(struct tcp_hpts_entry *hpts, struct tim
 		hpts->p_inp = inp;
 		drop_reason = inp->inp_hpts_drop_reas;
 		inp->inp_in_input = 0;
+		tp = intotcpcb(inp);
 		mtx_unlock(&hpts->p_mtx);
+		CURVNET_SET(tp->t_vnet);
 		if (drop_reason) {
 			INP_INFO_RLOCK(&V_tcbinfo);
 			ti_locked = TI_RLOCKED;
@@ -1234,10 +1236,10 @@ out:
 				INP_WUNLOCK(inp);
 			}
 			ti_locked = TI_UNLOCKED;
+			CURVNET_RESTORE();
 			mtx_lock(&hpts->p_mtx);
 			continue;
 		}
-		tp = intotcpcb(inp);
 		if ((tp == NULL) || (tp->t_inpcb == NULL)) {
 			goto out;
 		}
@@ -1262,6 +1264,7 @@ out:
 			}
 			if (in_pcbrele_wlocked(inp) == 0)
 				INP_WUNLOCK(inp);
+			CURVNET_RESTORE();
 			mtx_lock(&hpts->p_mtx);
 			continue;
 		}
@@ -1282,7 +1285,6 @@ out:
 			 */
 			tcp_set_hpts(inp);
 		}
-		CURVNET_SET(tp->t_vnet);
 		m = tp->t_in_pkt;
 		n = NULL;
 		if (m != NULL &&
@@ -1366,7 +1368,6 @@ out:
 						if (m)
 							n = m->m_nextpkt;
 					}
-					CURVNET_RESTORE();
 					goto out;
 				}
 				/*



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