]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: unlock if_table route_nodes 16882/head
authorMark Stapp <mjs@cisco.com>
Fri, 20 Sep 2024 16:09:05 +0000 (12:09 -0400)
committerMark Stapp <mjs@cisco.com>
Fri, 20 Sep 2024 16:24:01 +0000 (12:24 -0400)
Must unlock if we break during iteration over any lib/table
tree.

Signed-off-by: Mark Stapp <mjs@cisco.com>
zebra/if_netlink.c
zebra/zebra_evpn.c

index 32335198733b2b511c2a90db811955ea49803aed..5fb908eb0d7025a716900b3bbaa5f6ed40615de5 100644 (file)
@@ -1799,14 +1799,18 @@ int netlink_tunneldump_read(struct zebra_ns *zns)
 
                ret = netlink_request_tunneldump(zns, PF_BRIDGE,
                                                 tmp_if->ifindex);
-               if (ret < 0)
+               if (ret < 0) {
+                       route_unlock_node(rn);
                        return ret;
+               }
 
                ret = netlink_parse_info(netlink_link_change, netlink_cmd,
                                         &dp_info, 0, true);
 
-               if (ret < 0)
+               if (ret < 0) {
+                       route_unlock_node(rn);
                        return ret;
+               }
        }
 
        return 0;
index ebb5a422985ef76817b35e68847398991787a866..a733b5917f94f5e02e442e99155714d816cc11b7 100644 (file)
@@ -663,6 +663,7 @@ static int zebra_evpn_map_vlan_ns(struct ns *ns,
                        vni_id = zebra_vxlan_if_access_vlan_vni_find(zif, br_if);
                        if (vni_id) {
                                found = 1;
+                               route_unlock_node(rn);
                                break;
                        }
                }
@@ -757,6 +758,7 @@ static int zebra_evpn_from_svi_ns(struct ns *ns,
                                zebra_vxlan_if_access_vlan_vni_find(zif, br_if);
                        if (vni_id) {
                                found = 1;
+                               route_unlock_node(rn);
                                break;
                        }
                }
@@ -842,6 +844,7 @@ static int zvni_map_to_macvlan_ns(struct ns *ns, void *_in_param, void **_p_ifp)
 
                if (zif->link == in_param->svi_if) {
                        *p_ifp = tmp_if;
+                       route_unlock_node(rn);
                        return NS_WALK_STOP;
                }
        }