can: Stop using NLA_PUT*().
authorDavid S. Miller <davem@davemloft.net>
Mon, 2 Apr 2012 00:21:11 +0000 (20:21 -0400)
committerDavid S. Miller <davem@davemloft.net>
Mon, 2 Apr 2012 08:33:42 +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>
drivers/net/can/dev.c

index c5fe3a3..f03d7a4 100644 (file)
@@ -687,18 +687,19 @@ static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
 
        if (priv->do_get_state)
                priv->do_get_state(dev, &state);
-       NLA_PUT_U32(skb, IFLA_CAN_STATE, state);
-       NLA_PUT(skb, IFLA_CAN_CTRLMODE, sizeof(cm), &cm);
-       NLA_PUT_U32(skb, IFLA_CAN_RESTART_MS, priv->restart_ms);
-       NLA_PUT(skb, IFLA_CAN_BITTIMING,
-               sizeof(priv->bittiming), &priv->bittiming);
-       NLA_PUT(skb, IFLA_CAN_CLOCK, sizeof(cm), &priv->clock);
-       if (priv->do_get_berr_counter && !priv->do_get_berr_counter(dev, &bec))
-               NLA_PUT(skb, IFLA_CAN_BERR_COUNTER, sizeof(bec), &bec);
-       if (priv->bittiming_const)
-               NLA_PUT(skb, IFLA_CAN_BITTIMING_CONST,
-                       sizeof(*priv->bittiming_const), priv->bittiming_const);
-
+       if (nla_put_u32(skb, IFLA_CAN_STATE, state) ||
+           nla_put(skb, IFLA_CAN_CTRLMODE, sizeof(cm), &cm) ||
+           nla_put_u32(skb, IFLA_CAN_RESTART_MS, priv->restart_ms) ||
+           nla_put(skb, IFLA_CAN_BITTIMING,
+                   sizeof(priv->bittiming), &priv->bittiming) ||
+           nla_put(skb, IFLA_CAN_CLOCK, sizeof(cm), &priv->clock) ||
+           (priv->do_get_berr_counter &&
+            !priv->do_get_berr_counter(dev, &bec) &&
+            nla_put(skb, IFLA_CAN_BERR_COUNTER, sizeof(bec), &bec)) ||
+           (priv->bittiming_const &&
+            nla_put(skb, IFLA_CAN_BITTIMING_CONST,
+                    sizeof(*priv->bittiming_const), priv->bittiming_const)))
+               goto nla_put_failure;
        return 0;
 
 nla_put_failure:
@@ -714,9 +715,9 @@ static int can_fill_xstats(struct sk_buff *skb, const struct net_device *dev)
 {
        struct can_priv *priv = netdev_priv(dev);
 
-       NLA_PUT(skb, IFLA_INFO_XSTATS,
-               sizeof(priv->can_stats), &priv->can_stats);
-
+       if (nla_put(skb, IFLA_INFO_XSTATS,
+                   sizeof(priv->can_stats), &priv->can_stats))
+               goto nla_put_failure;
        return 0;
 
 nla_put_failure: