svn commit: r302258 - head/sys/net
Bjoern A. Zeeb
bz at FreeBSD.org
Wed Jun 29 05:21:27 UTC 2016
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) {
More information about the svn-src-head
mailing list