]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
lib/libnetlink: Don't pass NULL parameter to memcpy()
authorPhil Sutter <phil@nwl.cc>
Thu, 24 Aug 2017 09:41:31 +0000 (11:41 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 24 Aug 2017 22:22:10 +0000 (15:22 -0700)
Both addattr_l() and rta_addattr_l() may be called with NULL data
pointer and 0 alen parameters. Avoid calling memcpy() in that case.

Signed-off-by: Phil Sutter <phil@nwl.cc>
lib/libnetlink.c

index 00c8537798c917278a532d69793270746794c699..be7ac8658fa5a2e992b02b14669abe77b86b56cc 100644 (file)
@@ -870,7 +870,8 @@ int addattr_l(struct nlmsghdr *n, int maxlen, int type, const void *data,
        rta = NLMSG_TAIL(n);
        rta->rta_type = type;
        rta->rta_len = len;
-       memcpy(RTA_DATA(rta), data, alen);
+       if (alen)
+               memcpy(RTA_DATA(rta), data, alen);
        n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + RTA_ALIGN(len);
        return 0;
 }
@@ -957,7 +958,8 @@ int rta_addattr_l(struct rtattr *rta, int maxlen, int type,
        subrta = (struct rtattr *)(((char *)rta) + RTA_ALIGN(rta->rta_len));
        subrta->rta_type = type;
        subrta->rta_len = len;
-       memcpy(RTA_DATA(subrta), data, alen);
+       if (alen)
+               memcpy(RTA_DATA(subrta), data, alen);
        rta->rta_len = NLMSG_ALIGN(rta->rta_len) + RTA_ALIGN(len);
        return 0;
 }