From: Tony Ambardar Date: Mon, 22 Mar 2021 01:06:18 +0000 (-0700) Subject: zone: avoid duplicates in devices list X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=7b844f4fb361d28ffebc95bc305347d6450569f6;p=project%2Ffirewall3.git zone: avoid duplicates in devices list While resolving zones to devices it's possible to introduce duplicates due to the presence of aliased interfaces. Fix this by consolidating the fw3_zone->devices list during creation. Signed-off-by: Tony Ambardar --- diff --git a/zones.c b/zones.c index d45077a..51a8fdf 100644 --- a/zones.c +++ b/zones.c @@ -137,7 +137,7 @@ check_masq_addrs(struct list_head *head) static void resolve_networks(struct uci_element *e, struct fw3_zone *zone) { - struct fw3_device *net, *tmp; + struct fw3_device *net, *dev, *tmp; list_for_each_entry(net, &zone->networks, list) { @@ -149,8 +149,15 @@ resolve_networks(struct uci_element *e, struct fw3_zone *zone) continue; } + list_for_each_entry(dev, &zone->devices, list) + if (!strcmp(dev->name, tmp->name)) + goto alias; + snprintf(tmp->network, sizeof(tmp->network), "%s", net->name); list_add_tail(&tmp->list, &zone->devices); + continue; +alias: + free(tmp); } }