From 25b831bac8a5e545e1eda5199392c11c7aed4e42 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 25 Jun 2020 13:13:47 +0900 Subject: [PATCH 1/4] network: check that received ifindex is valid --- src/network/networkd-manager.c | 3 +++ 1 file changed, 3 insertions(+) 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); From e856ed00f93045f8c1bf53693aae96e722391222 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 25 Jun 2020 13:17:37 +0900 Subject: [PATCH 2/4] network: fix assertion in link_get() --- src/network/networkd-link.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index 06a467d15b..b003c88c3e 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -752,7 +752,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)); From 7936917e3e0ce49973fb18da8672b0b3a95af831 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 25 Jun 2020 13:41:47 +0900 Subject: [PATCH 3/4] network: do not update operstate when netdev is not ready --- src/network/networkd-link.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c index b003c88c3e..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; From f50f5972179a6ea9eb5c09ebfaabf47be7cfd903 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Thu, 25 Jun 2020 13:43:35 +0900 Subject: [PATCH 4/4] network: fix typo in comment --- src/network/netdev/netdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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);