svn commit: r335022 - head/sys/netinet

Randall Stewart rrs at FreeBSD.org
Tue Jun 12 23:54:09 UTC 2018


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;
 				}
 				/*


More information about the svn-src-head mailing list