]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
macvlan: fix macvlan_get_size() not reserving space for IFLA_MACVLAN_BC_CUTOFF
authorDudu Lu <phx0fer@gmail.com>
Mon, 13 Apr 2026 08:53:49 +0000 (16:53 +0800)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 16 Apr 2026 10:17:11 +0000 (12:17 +0200)
macvlan_get_size() does not account for IFLA_MACVLAN_BC_CUTOFF, but
macvlan_fill_info() conditionally includes it when port->bc_cutoff != 1.
This causes nla_put_s32() to fail with -EMSGSIZE when the netlink skb
runs out of space, triggering a WARN_ON in rtnetlink and preventing the
interface from being dumped.

The bug can be reproduced with:

  ip link add macvlan0 link eth0 type macvlan mode bridge
  ip link set macvlan0 type macvlan bc_cutoff 0
  ip -d link show macvlan0   # fails with -EMSGSIZE

The bc_cutoff feature was added in commit 954d1fa1ac93 ("macvlan: Add
netlink attribute for broadcast cutoff"), which added the nla_put_s32()
call in macvlan_fill_info() but missed adding the corresponding
nla_total_size(4) in macvlan_get_size(). A follow-up commit
55cef78c244d ("macvlan: add forgotten nla_policy for
IFLA_MACVLAN_BC_CUTOFF") fixed the missing nla_policy entry but still
did not fix the size calculation.

Fixes: 954d1fa1ac93 ("macvlan: Add netlink attribute for broadcast cutoff")
Signed-off-by: Dudu Lu <phx0fer@gmail.com>
Reviewed-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20260413085349.73977-1-phx0fer@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/macvlan.c

index 9f90c598649d548ee12b0a9806c825f96a4a4d63..c40fa331836bb2395267914807542ae5094e1a3c 100644 (file)
@@ -1689,6 +1689,7 @@ static size_t macvlan_get_size(const struct net_device *dev)
                + macvlan_get_size_mac(vlan) /* IFLA_MACVLAN_MACADDR */
                + nla_total_size(4) /* IFLA_MACVLAN_BC_QUEUE_LEN */
                + nla_total_size(4) /* IFLA_MACVLAN_BC_QUEUE_LEN_USED */
+               + nla_total_size(4) /* IFLA_MACVLAN_BC_CUTOFF */
                );
 }