kernel-netlink: Calculate length of Netlink messages correctly
authorTobias Brunner <tobias@strongswan.org>
Fri, 1 Feb 2019 08:19:03 +0000 (09:19 +0100)
committerTobias Brunner <tobias@strongswan.org>
Wed, 3 Apr 2019 10:00:08 +0000 (12:00 +0200)
This is relevant when adding e.g. strings whose length are not aligned.

src/libcharon/plugins/kernel_netlink/kernel_netlink_shared.c

index 84d78ec..4014d3c 100644 (file)
@@ -705,7 +705,7 @@ void netlink_add_attribute(struct nlmsghdr *hdr, int rta_type, chunk_t data,
        rta->rta_type = rta_type;
        rta->rta_len = RTA_LENGTH(data.len);
        memcpy(RTA_DATA(rta), data.ptr, data.len);
-       hdr->nlmsg_len = NLMSG_ALIGN(hdr->nlmsg_len) + rta->rta_len;
+       hdr->nlmsg_len = NLMSG_ALIGN(hdr->nlmsg_len) + RTA_ALIGN(rta->rta_len);
 }
 
 /**
@@ -724,7 +724,7 @@ void* netlink_reserve(struct nlmsghdr *hdr, int buflen, int type, int len)
        rta = ((void*)hdr) + NLMSG_ALIGN(hdr->nlmsg_len);
        rta->rta_type = type;
        rta->rta_len = RTA_LENGTH(len);
-       hdr->nlmsg_len = NLMSG_ALIGN(hdr->nlmsg_len) + rta->rta_len;
+       hdr->nlmsg_len = NLMSG_ALIGN(hdr->nlmsg_len) + RTA_ALIGN(rta->rta_len);
 
        return RTA_DATA(rta);
 }