Applied, thanks
On Fri, Sep 16, 2016 at 10:40 PM, Hauke Mehrtens <ha...@hauke-m.de> wrote: > An padding to align a message should not only be added between > different attributes of a netlink message, but also at the end of the > message to pad it to the correct size. > > Without this patch the following command does not work and returns an > error code: > ip link add type nlmon > > Without this ip from busybox sends this: > sendmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, > msg_namelen=12, msg_iov=[{iov_base={{len=45, type=0x10 /* NLMSG_??? */, > flags=NLM_F_REQUEST|NLM_F_ACK|0x600, seq=1474057401, pid=0}, > "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\22\0\t\0\1nlmon"}, iov_len=45}], > msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 45 > return value: 2 > > The normal ip utile from iproute2 sends this: > sendmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, > msg_namelen=12, msg_iov=[{iov_base={{len=48, type=0x10 /* NLMSG_??? */, > flags=NLM_F_REQUEST|NLM_F_ACK|0x600, seq=1473716938, pid=0}, > "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\22\0\t\0\1nlmon\0\0\0"}, > iov_len=48}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 48 > return value: 0 > > With this patch ip from busybox sends this: > sendmsg(3, {msg_name={sa_family=AF_NETLINK, nl_pid=0, nl_groups=00000000}, > msg_namelen=12, msg_iov=[{iov_base={{len=48, type=0x10 /* NLMSG_??? */, > flags=NLM_F_REQUEST|NLM_F_ACK|0x600, seq=1473716908, pid=0}, > "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\0\22\0\t\0\1nlmon\0\0\0"}, > iov_len=48}], msg_iovlen=1, msg_controllen=0, msg_flags=0}, 0) = 48 > return value: 0 > > Signed-off-by: Hauke Mehrtens <ha...@hauke-m.de> > --- > networking/libiproute/libnetlink.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/networking/libiproute/libnetlink.c > b/networking/libiproute/libnetlink.c > index 9d5c641..7e0ff1b 100644 > --- a/networking/libiproute/libnetlink.c > +++ b/networking/libiproute/libnetlink.c > @@ -340,14 +340,14 @@ int FAST_FUNC addattr32(struct nlmsghdr *n, int maxlen, > int type, uint32_t data) > int len = RTA_LENGTH(4); > struct rtattr *rta; > > - if ((int)(NLMSG_ALIGN(n->nlmsg_len) + len) > maxlen) { > + if ((int)(NLMSG_ALIGN(n->nlmsg_len + len)) > maxlen) { > return -1; > } > rta = (struct rtattr*)(((char*)n) + NLMSG_ALIGN(n->nlmsg_len)); > rta->rta_type = type; > rta->rta_len = len; > move_to_unaligned32(RTA_DATA(rta), data); > - n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + len; > + n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len + len); > return 0; > } > > @@ -356,14 +356,14 @@ int FAST_FUNC addattr_l(struct nlmsghdr *n, int maxlen, > int type, void *data, in > int len = RTA_LENGTH(alen); > struct rtattr *rta; > > - if ((int)(NLMSG_ALIGN(n->nlmsg_len) + len) > maxlen) { > + if ((int)(NLMSG_ALIGN(n->nlmsg_len + len)) > maxlen) { > return -1; > } > rta = (struct rtattr*)(((char*)n) + NLMSG_ALIGN(n->nlmsg_len)); > rta->rta_type = type; > rta->rta_len = len; > memcpy(RTA_DATA(rta), data, alen); > - n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len) + len; > + n->nlmsg_len = NLMSG_ALIGN(n->nlmsg_len + len); > return 0; > } > > @@ -372,14 +372,14 @@ int FAST_FUNC rta_addattr32(struct rtattr *rta, int > maxlen, int type, uint32_t d > int len = RTA_LENGTH(4); > struct rtattr *subrta; > > - if (RTA_ALIGN(rta->rta_len) + len > maxlen) { > + if (RTA_ALIGN(rta->rta_len + len) > maxlen) { > return -1; > } > subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len)); > subrta->rta_type = type; > subrta->rta_len = len; > move_to_unaligned32(RTA_DATA(subrta), data); > - rta->rta_len = NLMSG_ALIGN(rta->rta_len) + len; > + rta->rta_len = NLMSG_ALIGN(rta->rta_len + len); > return 0; > } > > @@ -388,14 +388,14 @@ int FAST_FUNC rta_addattr_l(struct rtattr *rta, int > maxlen, int type, void *data > struct rtattr *subrta; > int len = RTA_LENGTH(alen); > > - if (RTA_ALIGN(rta->rta_len) + len > maxlen) { > + if (RTA_ALIGN(rta->rta_len + len) > maxlen) { > return -1; > } > subrta = (struct rtattr*)(((char*)rta) + RTA_ALIGN(rta->rta_len)); > subrta->rta_type = type; > subrta->rta_len = len; > memcpy(RTA_DATA(subrta), data, alen); > - rta->rta_len = NLMSG_ALIGN(rta->rta_len) + len; > + rta->rta_len = NLMSG_ALIGN(rta->rta_len + len); > return 0; > } > > -- > 2.9.3 > > _______________________________________________ > busybox mailing list > busybox@busybox.net > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list busybox@busybox.net http://lists.busybox.net/mailman/listinfo/busybox