Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 29 Jun 2016 05:21:26 +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: r302258 - head/sys/net
Message-ID:  <201606290521.u5T5LQO7040397@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Wed Jun 29 05:21:25 2016
New Revision: 302258
URL: https://svnweb.freebsd.org/changeset/base/302258

Log:
  Several device drivers call if_alloc() and then do further checks and
  will cal if_free() in case of conflict, error, ..
  if_free() however sets the VNET instance from the ifp->if_vnet which
  was not yet initialized but would only in if_attach(). Fix this by
  setting the curvnet from where we allocate the interface in if_alloc().
  if_attach() will later overwrite this as needed. We do not set the home_vnet
  early on as we only want to prevent the if_free() panic but not change any
  of the other housekeeping, e.g., triggered through ifioctl()s.
  
  Reviewed by:	brooks
  Approved by:	re (gjb)
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D7010

Modified:
  head/sys/net/if.c

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c	Wed Jun 29 01:50:30 2016	(r302257)
+++ head/sys/net/if.c	Wed Jun 29 05:21:25 2016	(r302258)
@@ -455,6 +455,9 @@ if_alloc(u_char type)
 	ifp->if_index = idx;
 	ifp->if_type = type;
 	ifp->if_alloctype = type;
+#ifdef VIMAGE
+	ifp->if_vnet = curvnet;
+#endif
 	if (if_com_alloc[type] != NULL) {
 		ifp->if_l2com = if_com_alloc[type](type, ifp);
 		if (ifp->if_l2com == NULL) {



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