netifd: return the interface for locally addressable host dependencies (FS#1452)
authorFelix Fietkau <nbd@nbd.name>
Tue, 27 Mar 2018 09:28:54 +0000 (11:28 +0200)
committerFelix Fietkau <nbd@nbd.name>
Tue, 27 Mar 2018 09:31:16 +0000 (11:31 +0200)
Fixes an issue where interfaces with host dependencies that resolve to a
local subnet stay down.

Fixes: 1f5a29c3de6e ("ip: do not add local routes for host dependencies")
Signed-off-by: Felix Fietkau <nbd@nbd.name>
interface-ip.c

index 4a3e2c0..1c84d4f 100644 (file)
@@ -245,7 +245,7 @@ interface_ip_add_target_route(union if_addr *addr, bool v6, struct interface *if
        if (iface) {
                /* look for locally addressable target first */
                if (interface_ip_find_addr_target(iface, addr, v6))
-                       goto done;
+                       return iface;
 
                /* do not stop at the first route, let the lookup compare
                 * masks to find the best match */
@@ -254,7 +254,7 @@ interface_ip_add_target_route(union if_addr *addr, bool v6, struct interface *if
                vlist_for_each_element(&interfaces, iface, node) {
                        /* look for locally addressable target first */
                        if (interface_ip_find_addr_target(iface, addr, v6))
-                               goto done;
+                               return iface;
 
                        /* do not stop at the first route, let the lookup compare
                         * masks to find the best match */
@@ -262,7 +262,6 @@ interface_ip_add_target_route(union if_addr *addr, bool v6, struct interface *if
                }
        }
 
-done:
        if (!r_next) {
                free(route);
                return NULL;