genetlink: Stop using NLA_PUT*().
authorDavid S. Miller <davem@davemloft.net>
Fri, 30 Mar 2012 03:25:11 +0000 (23:25 -0400)
committerDavid S. Miller <davem@davemloft.net>
Sun, 1 Apr 2012 22:43:25 +0000 (18:43 -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/netlink/genetlink.c

index 9f40441d7a7d1771d140bff1382bcba319d57759..8340ace837f2eb309a707d84a8d71da0fa282bbd 100644 (file)
@@ -635,11 +635,12 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
        if (hdr == NULL)
                return -1;
 
-       NLA_PUT_STRING(skb, CTRL_ATTR_FAMILY_NAME, family->name);
-       NLA_PUT_U16(skb, CTRL_ATTR_FAMILY_ID, family->id);
-       NLA_PUT_U32(skb, CTRL_ATTR_VERSION, family->version);
-       NLA_PUT_U32(skb, CTRL_ATTR_HDRSIZE, family->hdrsize);
-       NLA_PUT_U32(skb, CTRL_ATTR_MAXATTR, family->maxattr);
+       if (nla_put_string(skb, CTRL_ATTR_FAMILY_NAME, family->name) ||
+           nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, family->id) ||
+           nla_put_u32(skb, CTRL_ATTR_VERSION, family->version) ||
+           nla_put_u32(skb, CTRL_ATTR_HDRSIZE, family->hdrsize) ||
+           nla_put_u32(skb, CTRL_ATTR_MAXATTR, family->maxattr))
+               goto nla_put_failure;
 
        if (!list_empty(&family->ops_list)) {
                struct nlattr *nla_ops;
@@ -657,8 +658,9 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
                        if (nest == NULL)
                                goto nla_put_failure;
 
-                       NLA_PUT_U32(skb, CTRL_ATTR_OP_ID, ops->cmd);
-                       NLA_PUT_U32(skb, CTRL_ATTR_OP_FLAGS, ops->flags);
+                       if (nla_put_u32(skb, CTRL_ATTR_OP_ID, ops->cmd) ||
+                           nla_put_u32(skb, CTRL_ATTR_OP_FLAGS, ops->flags))
+                               goto nla_put_failure;
 
                        nla_nest_end(skb, nest);
                }
@@ -682,9 +684,10 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq,
                        if (nest == NULL)
                                goto nla_put_failure;
 
-                       NLA_PUT_U32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id);
-                       NLA_PUT_STRING(skb, CTRL_ATTR_MCAST_GRP_NAME,
-                                      grp->name);
+                       if (nla_put_u32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id) ||
+                           nla_put_string(skb, CTRL_ATTR_MCAST_GRP_NAME,
+                                          grp->name))
+                               goto nla_put_failure;
 
                        nla_nest_end(skb, nest);
                }
@@ -710,8 +713,9 @@ static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid,
        if (hdr == NULL)
                return -1;
 
-       NLA_PUT_STRING(skb, CTRL_ATTR_FAMILY_NAME, grp->family->name);
-       NLA_PUT_U16(skb, CTRL_ATTR_FAMILY_ID, grp->family->id);
+       if (nla_put_string(skb, CTRL_ATTR_FAMILY_NAME, grp->family->name) ||
+           nla_put_u16(skb, CTRL_ATTR_FAMILY_ID, grp->family->id))
+               goto nla_put_failure;
 
        nla_grps = nla_nest_start(skb, CTRL_ATTR_MCAST_GROUPS);
        if (nla_grps == NULL)
@@ -721,9 +725,10 @@ static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid,
        if (nest == NULL)
                goto nla_put_failure;
 
-       NLA_PUT_U32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id);
-       NLA_PUT_STRING(skb, CTRL_ATTR_MCAST_GRP_NAME,
-                      grp->name);
+       if (nla_put_u32(skb, CTRL_ATTR_MCAST_GRP_ID, grp->id) ||
+           nla_put_string(skb, CTRL_ATTR_MCAST_GRP_NAME,
+                          grp->name))
+               goto nla_put_failure;
 
        nla_nest_end(skb, nest);
        nla_nest_end(skb, nla_grps);