| From badbde0495267d60d393a892572c4c421ba5e9f0 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 26 Jan 2022 15:10:25 +0200 |
| Subject: net: bridge: vlan: fix single net device option dumping |
| |
| From: Nikolay Aleksandrov <nikolay@nvidia.com> |
| |
| [ Upstream commit dcb2c5c6ca9b9177f04abaf76e5a983d177c9414 ] |
| |
| When dumping vlan options for a single net device we send the same |
| entries infinitely because user-space expects a 0 return at the end but |
| we keep returning skb->len and restarting the dump on retry. Fix it by |
| returning the value from br_vlan_dump_dev() if it completed or there was |
| an error. The only case that must return skb->len is when the dump was |
| incomplete and needs to continue (-EMSGSIZE). |
| |
| Reported-by: Benjamin Poirier <bpoirier@nvidia.com> |
| Fixes: 8dcea187088b ("net: bridge: vlan: add rtm definitions and dump support") |
| Signed-off-by: Nikolay Aleksandrov <nikolay@nvidia.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/bridge/br_vlan.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| diff --git a/net/bridge/br_vlan.c b/net/bridge/br_vlan.c |
| index 49e105e0a4479..d0ebcc99bfa9d 100644 |
| --- a/net/bridge/br_vlan.c |
| +++ b/net/bridge/br_vlan.c |
| @@ -2020,7 +2020,8 @@ static int br_vlan_rtm_dump(struct sk_buff *skb, struct netlink_callback *cb) |
| goto out_err; |
| } |
| err = br_vlan_dump_dev(dev, skb, cb, dump_flags); |
| - if (err && err != -EMSGSIZE) |
| + /* if the dump completed without an error we return 0 here */ |
| + if (err != -EMSGSIZE) |
| goto out_err; |
| } else { |
| for_each_netdev_rcu(net, dev) { |
| -- |
| 2.34.1 |
| |