Skip to contentSkip to conversation

bridge: simplify br_getlink() a bit

PATCH Applied Dan Carpenter 3 participants 3 messages Jan 21, 2015 – Jan 26, 2015

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 bridge: simplify br_getlink() a bit

Static checkers complain that we should maybe set "ret" before we do the "goto out;". They interpret the NULL return from br_port_get_rtnl() as a failure and forgetting to set the error code is a common bug in this situation.

The code is confusing but it's actually correct. We are returning zero deliberately. Let's re-write it a bit to be more clear.

net/bridge/br_netlink.c +3 -6
index 528cf27..3875ea51 100644
@@ -311,17 +311,14 @@ errout:
 int br_getlink(struct sk_buff *skb, u32 pid, u32 seq,
 	       struct net_device *dev, u32 filter_mask)
 {
-	int err = 0;
 	struct net_bridge_port *port = br_port_get_rtnl(dev);
 
 	if (!port && !(filter_mask & RTEXT_FILTER_BRVLAN) &&
 	    !(filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED))
-		goto out;
+		return 0;
 
-	err = br_fill_ifinfo(skb, port, pid, seq, RTM_NEWLINK, NLM_F_MULTI,
-			     filter_mask, dev);
-out:
-	return err;
+	return br_fill_ifinfo(skb, port, pid, seq, RTM_NEWLINK, NLM_F_MULTI,
+			      filter_mask, dev);
 }
 
 static int br_vlan_info(struct net_bridge *br, struct net_bridge_port *p,
Acked-by on v1 1/1
#1 lore raw
Quoted 25 lines · On Wed, 21 Jan 2015 12:22:35 +0300 Dan Carpenter <[email protected]>…

Static checkers complain that we should maybe set "ret" before we do the "goto out;". They interpret the NULL return from br_port_get_rtnl() as a failure and forgetting to set the error code is a common bug in this situation.

The code is confusing but it's actually correct. We are returning zero deliberately. Let's re-write it a bit to be more clear.

net/bridge/br_netlink.c +1 -2
index 528cf27..3875ea51 100644
@@ -311,17 +311,14 @@ errout:
 int br_getlink(struct sk_buff *skb, u32 pid, u32 seq,
 	       struct net_device *dev, u32 filter_mask)
 {
-	int err = 0;
 	struct net_bridge_port *port = br_port_get_rtnl(dev);
 
 	if (!port && !(filter_mask & RTEXT_FILTER_BRVLAN) &&
 	    !(filter_mask & RTEXT_FILTER_BRVLAN_COMPRESSED))
-		goto out;
+		return 0;

net/bridge/br_netlink.c errout: · line 324

Quoted 10 lines
net/bridge/br_netlink.c +2 -4
 
-	err = br_fill_ifinfo(skb, port, pid, seq, RTM_NEWLINK, NLM_F_MULTI,
-			     filter_mask, dev);
-out:
-	return err;
+	return br_fill_ifinfo(skb, port, pid, seq, RTM_NEWLINK, NLM_F_MULTI,
+			      filter_mask, dev);
 }
 
 static int br_vlan_info(struct net_bridge *br, struct net_bridge_port *p,

That looks fine.

maintainer Applied
#2 lore raw
In reply to Dan Carpenter

From: Dan Carpenter <[email protected]>
Date: Wed, 21 Jan 2015 12:22:35 +0300

Quoted 9 lines

Static checkers complain that we should maybe set "ret" before we do the "goto out;". They interpret the NULL return from br_port_get_rtnl() as a failure and forgetting to set the error code is a common bug in this situation.

The code is confusing but it's actually correct. We are returning zero deliberately. Let's re-write it a bit to be more clear.

Applied to net-next, thanks.