From: Tobias Brunner Date: Fri, 1 Feb 2019 08:19:03 +0000 (+0100) Subject: kernel-netlink: Calculate length of Netlink messages correctly X-Git-Tag: 5.8.0rc1~41^2~29 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=735f9e6eb6194557d0a7043c9a08b1cbaf26600e;p=thirdparty%2Fstrongswan.git kernel-netlink: Calculate length of Netlink messages correctly This is relevant when adding e.g. strings whose length are not aligned. --- diff --git a/src/libcharon/plugins/kernel_netlink/kernel_netlink_shared.c b/src/libcharon/plugins/kernel_netlink/kernel_netlink_shared.c index 84d78eca24..4014d3cbe1 100644 --- a/src/libcharon/plugins/kernel_netlink/kernel_netlink_shared.c +++ b/src/libcharon/plugins/kernel_netlink/kernel_netlink_shared.c @@ -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); }