Merge "Properly size response buffer in ifc_act_on_address"
am: b407aca123
Change-Id: I18198ddedf133aaeff3c3a8e10fd8b3304beef0a
diff --git a/libnetutils/ifc_utils.c b/libnetutils/ifc_utils.c
index 4e73401..8212eba 100644
--- a/libnetutils/ifc_utils.c
+++ b/libnetutils/ifc_utils.c
@@ -267,19 +267,13 @@
struct {
struct nlmsghdr n;
struct ifaddrmsg r;
- // Allow for IPv6 address, headers, IPv4 broadcast addr and padding.
- char attrbuf[NLMSG_ALIGN(sizeof(struct nlmsghdr)) +
- NLMSG_ALIGN(sizeof(struct rtattr)) +
- NLMSG_ALIGN(INET6_ADDRLEN) +
- NLMSG_ALIGN(sizeof(struct rtattr)) +
- NLMSG_ALIGN(INET_ADDRLEN)];
+ // Allow for IPv4 or IPv6 address, headers, IPv4 broadcast address and padding.
+ char attrbuf[NLMSG_ALIGN(sizeof(struct rtattr)) + NLMSG_ALIGN(INET6_ADDRLEN) +
+ NLMSG_ALIGN(sizeof(struct rtattr)) + NLMSG_ALIGN(INET_ADDRLEN)];
} req;
struct rtattr *rta;
struct nlmsghdr *nh;
struct nlmsgerr *err;
- char buf[NLMSG_ALIGN(sizeof(struct nlmsghdr)) +
- NLMSG_ALIGN(sizeof(struct nlmsgerr)) +
- NLMSG_ALIGN(sizeof(struct nlmsghdr))];
// Get interface ID.
ifindex = if_nametoindex(name);
@@ -348,6 +342,7 @@
return -saved_errno;
}
+ char buf[NLMSG_ALIGN(sizeof(struct nlmsgerr)) + sizeof(req)];
len = recv(s, buf, sizeof(buf), 0);
saved_errno = errno;
close(s);