Message ID | 20210609111753.1739008-1-idosch@idosch.org |
---|---|
State | New |
Headers | show |
Series | [net] rtnetlink: Fix regression in bridge VLAN configuration | expand |
On Wed, Jun 09, 2021 at 14:17, Ido Schimmel <idosch@idosch.org> wrote: > Cited commit started returning errors when notification info is not > filled by the bridge driver, resulting in the following regression: > > # ip link add name br1 type bridge vlan_filtering 1 > # bridge vlan add dev br1 vid 555 self pvid untagged > RTNETLINK answers: Invalid argument > > As long as the bridge driver does not fill notification info for the > bridge device itself, an empty notification should not be considered as > an error. This is explained in commit 59ccaaaa49b5 ("bridge: dont send > notification when skb->len == 0 in rtnl_bridge_notify"). > > Fix by removing the error and add a comment to avoid future bugs. > > Fixes: a8db57c1d285 ("rtnetlink: Fix missing error code in rtnl_bridge_notify()") > Signed-off-by: Ido Schimmel <idosch@nvidia.com> > Reviewed-by: Nikolay Aleksandrov <nikolay@nvidia.com> Fix does indeed solve the same problem I encountered myself yesterday, and bisected today. Tested successfully on a bridge setup with Marvell 88E6097 (DSA switch) for bridge offloading (not that it matters for this particular fix). Tested-by: Joachim Wiberg <troglobit@gmail.com> Best regards /Joachim
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 3e84279c4123..ec931b080156 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -4842,10 +4842,12 @@ static int rtnl_bridge_notify(struct net_device *dev) if (err < 0) goto errout; - if (!skb->len) { - err = -EINVAL; + /* Notification info is only filled for bridge ports, not the bridge + * device itself. Therefore, a zero notification length is valid and + * should not result in an error. + */ + if (!skb->len) goto errout; - } rtnl_notify(skb, net, 0, RTNLGRP_LINK, NULL, GFP_ATOMIC); return 0;