]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
BSD: Ensure we have enough of a RTM message to read it.
authorRoy Marples <roy@marples.name>
Sat, 4 May 2019 13:29:28 +0000 (14:29 +0100)
committerRoy Marples <roy@marples.name>
Sat, 4 May 2019 13:29:28 +0000 (14:29 +0100)
As not all are of equal size.

src/dhcpcd.c
src/if-bsd.c
src/if-sun.c

index 5907fbbe6a8c63bf3261390d8e9148ec9cd370a1..67dc3d646f9998f96bfc27c759ffb3f5e7852154 100644 (file)
@@ -1081,8 +1081,7 @@ dhcpcd_handlelink(void *arg)
                        dhcpcd_linkoverflow(ctx);
                        return;
                }
-               if (errno != ENOTSUP)
-                       logerr(__func__);
+               logerr(__func__);
        }
 }
 
index 5e7fc3b6246d56525598e1c4de8e7ecf6ff854c4..ada85740ed335862f30334a598a1532aa75fa3ec 100644 (file)
@@ -1063,7 +1063,7 @@ if_rtm(struct dhcpcd_ctx *ctx, const struct rt_msghdr *rtm)
                return 0;
 
        if (if_copyrt(ctx, &rt, rtm) == -1)
-               return -1;
+               return errno == ENOTSUP ? 0 : -1;
 
 #ifdef INET6
        /*
@@ -1326,7 +1326,9 @@ if_handlelink(struct dhcpcd_ctx *ctx)
                return -1;
        if (len == 0)
                return 0;
-       if (len < rtm.hdr.rtm_msglen) {
+       if ((size_t)len < offsetof(struct rt_msghdr, rtm_index) ||
+           len < rtm.hdr.rtm_msglen)
+       {
                errno = EINVAL;
                return -1;
        }
index 2a8728da84fb5c5cca105d88aebb540e1a589a8f..f680d666099ffaac18561987c521d312a8ac35a4 100644 (file)
@@ -1078,7 +1078,9 @@ if_handlelink(struct dhcpcd_ctx *ctx)
                return -1;
        if (len == 0)
                return 0;
-       if (len < rtm.hdr.rtm_msglen) {
+       if ((size_t)len < offsetof(struct rt_msghdr, rtm_index) ||
+           len < rtm.hdr.rtm_msglen)
+       {
                errno = EINVAL;
                return -1;
        }