From 7b844f4fb361d28ffebc95bc305347d6450569f6 Mon Sep 17 00:00:00 2001 From: Tony Ambardar Date: Sun, 21 Mar 2021 18:06:18 -0700 Subject: 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 --- zones.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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); } } -- cgit v1.2.1