From ed58ad1a5998291385d29dc9069f64af7a8f6dd1 Mon Sep 17 00:00:00 2001 From: Stefano Brivio Date: Wed, 23 Feb 2022 10:50:09 +0100 Subject: [PATCH] netlink: Avoid left-over bytes in request on MTU configuration When nl_link() configures the MTU, it shouldn't send extra bytes, otherwise we'll get a kernel warning: netlink: 4 bytes leftover after parsing attributes in process `pasta'. Signed-off-by: Stefano Brivio --- netlink.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/netlink.c b/netlink.c index 532868d..a530f3f 100644 --- a/netlink.c +++ b/netlink.c @@ -479,13 +479,16 @@ next: void nl_link(int ns, unsigned int ifi, void *mac, int up, int mtu) { int change = !MAC_IS_ZERO(mac) || up || mtu; - struct { + struct req_t { struct nlmsghdr nlh; struct ifinfomsg ifm; struct rtattr rta; union { unsigned char mac[ETH_ALEN]; - unsigned int mtu; + struct { + unsigned int mtu; + uint8_t end; + } mtu; } set; } req = { .nlh.nlmsg_type = change ? RTM_NEWLINK : RTM_GETLINK, @@ -513,8 +516,8 @@ void nl_link(int ns, unsigned int ifi, void *mac, int up, int mtu) } if (mtu) { - req.nlh.nlmsg_len = sizeof(req); - req.set.mtu = mtu; + req.nlh.nlmsg_len = offsetof(struct req_t, set.mtu.end); + req.set.mtu.mtu = mtu; req.rta.rta_type = IFLA_MTU; req.rta.rta_len = RTA_LENGTH(sizeof(unsigned int)); nl_req(ns, buf, &req, req.nlh.nlmsg_len);