chiark / gitweb /
rtnl: make checks for default routes more strict
[elogind.git] / src / libsystemd / sd-rtnl / local-addresses.c
index 3ab99420a375aec78823986362849e7a364ca30a..b669f9025ba428d9d5861712872cb8ae071569ad 100644 (file)
@@ -197,7 +197,7 @@ int local_gateways(sd_rtnl *context, int ifindex, struct local_address **ret) {
         for (m = reply; m; m = sd_rtnl_message_next(m)) {
                 struct local_address *a;
                 uint16_t type;
-                unsigned char dst_len;
+                unsigned char dst_len, src_len;
                 uint32_t ifi;
 
                 r = sd_rtnl_message_get_errno(m);
@@ -211,14 +211,19 @@ int local_gateways(sd_rtnl *context, int ifindex, struct local_address **ret) {
                 if (type != RTM_NEWROUTE)
                         continue;
 
+                /* We only care for default routes */
                 r = sd_rtnl_message_route_get_dst_len(m, &dst_len);
                 if (r < 0)
                         return r;
-
-                /* We only care for default routes */
                 if (dst_len != 0)
                         continue;
 
+                r = sd_rtnl_message_route_get_src_len(m, &src_len);
+                if (r < 0)
+                        return r;
+                if (src_len != 0)
+                        continue;
+
                 r = sd_rtnl_message_read_u32(m, RTA_OIF, &ifi);
                 if (r < 0)
                         return r;