bridge: Stop using NLA_PUT*().
authorDavid S. Miller <davem@davemloft.net>
Mon, 2 Apr 2012 00:49:54 +0000 (20:49 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Apr 2012 08:33:44 +0000 (04:33 -0400)
These macros contain a hidden goto, and are thus extremely error
prone and make code hard to audit.

Signed-off-by: David S. Miller <davem@davemloft.net>
net/bridge/br_fdb.c
net/bridge/br_netlink.c

index 5ba0c844d508cbe549788e2219b4dd9ab1383149..80dbce4974ceafe0f7ed8360a87c84e8f034e86d 100644 (file)
@@ -487,14 +487,14 @@ static int fdb_fill_info(struct sk_buff *skb, const struct net_bridge *br,
        ndm->ndm_ifindex = fdb->dst ? fdb->dst->dev->ifindex : br->dev->ifindex;
        ndm->ndm_state   = fdb_to_nud(fdb);
 
-       NLA_PUT(skb, NDA_LLADDR, ETH_ALEN, &fdb->addr);
-
+       if (nla_put(skb, NDA_LLADDR, ETH_ALEN, &fdb->addr))
+               goto nla_put_failure;
        ci.ndm_used      = jiffies_to_clock_t(now - fdb->used);
        ci.ndm_confirmed = 0;
        ci.ndm_updated   = jiffies_to_clock_t(now - fdb->updated);
        ci.ndm_refcnt    = 0;
-       NLA_PUT(skb, NDA_CACHEINFO, sizeof(ci), &ci);
-
+       if (nla_put(skb, NDA_CACHEINFO, sizeof(ci), &ci))
+               goto nla_put_failure;
        return nlmsg_end(skb, nlh);
 
 nla_put_failure:
index a1daf8227ed11c1a1853a8fb5a246919e9deb5f5..346b368d86985c366648d7f2493b3b86804e2cd5 100644 (file)
@@ -60,20 +60,17 @@ static int br_fill_ifinfo(struct sk_buff *skb, const struct net_bridge_port *por
        hdr->ifi_flags = dev_get_flags(dev);
        hdr->ifi_change = 0;
 
-       NLA_PUT_STRING(skb, IFLA_IFNAME, dev->name);
-       NLA_PUT_U32(skb, IFLA_MASTER, br->dev->ifindex);
-       NLA_PUT_U32(skb, IFLA_MTU, dev->mtu);
-       NLA_PUT_U8(skb, IFLA_OPERSTATE, operstate);
-
-       if (dev->addr_len)
-               NLA_PUT(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr);
-
-       if (dev->ifindex != dev->iflink)
-               NLA_PUT_U32(skb, IFLA_LINK, dev->iflink);
-
-       if (event == RTM_NEWLINK)
-               NLA_PUT_U8(skb, IFLA_PROTINFO, port->state);
-
+       if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
+           nla_put_u32(skb, IFLA_MASTER, br->dev->ifindex) ||
+           nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
+           nla_put_u8(skb, IFLA_OPERSTATE, operstate) ||
+           (dev->addr_len &&
+            nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
+           (dev->ifindex != dev->iflink &&
+            nla_put_u32(skb, IFLA_LINK, dev->iflink)) ||
+           (event == RTM_NEWLINK &&
+            nla_put_u8(skb, IFLA_PROTINFO, port->state)))
+               goto nla_put_failure;
        return nlmsg_end(skb, nlh);
 
 nla_put_failure: