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
This commit is contained in:
parent
48413367ef
commit
a29c7aeb2e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=302258
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user