diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c index 1889f6f13c..350485d561 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -364,7 +364,7 @@ static int netdev_enslave(NetDev *netdev, Link *link, link_netlink_message_handl if (r >= 0) callback(netdev->manager->rtnl, m, link); } else { - /* the netdev is not yet read, save this request for when it is */ + /* the netdev is not yet ready, save this request for when it is */ netdev_join_callback *cb; cb = new(netdev_join_callback, 1); diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 06a467d15b..f73d00f697 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -346,6 +346,9 @@ static void link_update_master_operstate(Link *link, NetDev *netdev) { if (!netdev) return; + if (netdev->ifindex <= 0) + return; + if (link_get(link->manager, netdev->ifindex, &master) < 0) return; @@ -752,7 +755,7 @@ int link_get(Manager *m, int ifindex, Link **ret) { Link *link; assert(m); - assert(ifindex); + assert(ifindex > 0); assert(ret); link = hashmap_get(m->links, INT_TO_PTR(ifindex)); diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c index 08666fd92d..63e2f61d29 100644 --- a/src/network/networkd-manager.c +++ b/src/network/networkd-manager.c @@ -1272,6 +1272,9 @@ int manager_rtnl_process_nexthop(sd_netlink *rtnl, sd_netlink_message *message, if (r < 0 && r != -ENODATA) { log_warning_errno(r, "rtnl: could not get NHA_OIF attribute, ignoring: %m"); return 0; + } else if (tmp->oif <= 0) { + log_warning("rtnl: received nexthop message with invalid ifindex %d, ignoring.", tmp->oif); + return 0; } r = link_get(m, tmp->oif, &link);