Merge pull request #8426 from idryzhov/fix-interface-nb-stale-pointers

lib: fix interface nb stale pointers
This commit is contained in:
Quentin Young 2021-04-13 15:26:51 +00:00 committed by GitHub
commit 54bb4ab3ec
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 6 deletions

View File

@ -1056,15 +1056,30 @@ struct connected *connected_get_linklocal(struct interface *ifp)
void if_terminate(struct vrf *vrf)
{
struct interface *ifp;
bool delete;
/*
* If the default VRF is being terminated or has
* already been terminated it means that
* the program is shutting down and we need to
* delete all the interfaces. Otherwise, we only
* need to move VRF's interfaces to the default VRF.
*/
delete = vrf_is_backend_netns() || vrf->vrf_id == VRF_DEFAULT
|| !vrf_lookup_by_id(VRF_DEFAULT);
while (!RB_EMPTY(if_name_head, &vrf->ifaces_by_name)) {
ifp = RB_ROOT(if_name_head, &vrf->ifaces_by_name);
if (delete) {
if (ifp->node) {
ifp->node->info = NULL;
route_unlock_node(ifp->node);
}
if_delete(&ifp);
} else {
if_update_to_new_vrf(ifp, VRF_DEFAULT);
}
}
}

View File

@ -1661,7 +1661,6 @@ int netlink_link_change(struct nlmsghdr *h, ns_id_t ns_id, int startup)
else if (IS_ZEBRA_IF_VXLAN(ifp))
zebra_l2_vxlanif_del(ifp);
if (!IS_ZEBRA_IF_VRF(ifp))
if_delete_update(ifp);
}