connector: use nlmsg_put() instead of NLMSG_PUT() macro.
authorJavier Martinez Canillas <javier.martinez@collabora.co.uk>
Tue, 26 Jun 2012 05:41:24 +0000 (05:41 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 27 Jun 2012 04:14:20 +0000 (21:14 -0700)
The NLMSG_PUT() macro contains a hidden goto which makes the code hard
to audit and very error prone.

While been there also use the inline function nlmsg_data() instead of the
NLMSG_DATA() macro to do explicit type checking.

Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/connector/connector.c

index dde6a0f..34e0e9e 100644 (file)
@@ -101,19 +101,19 @@ int cn_netlink_send(struct cn_msg *msg, u32 __group, gfp_t gfp_mask)
        if (!skb)
                return -ENOMEM;
 
-       nlh = NLMSG_PUT(skb, 0, msg->seq, NLMSG_DONE, size - sizeof(*nlh));
+       nlh = nlmsg_put(skb, 0, msg->seq, NLMSG_DONE, size - sizeof(*nlh), 0);
+       if (!nlh) {
+               kfree_skb(skb);
+               return -EMSGSIZE;
+       }
 
-       data = NLMSG_DATA(nlh);
+       data = nlmsg_data(nlh);
 
        memcpy(data, msg, sizeof(*data) + msg->len);
 
        NETLINK_CB(skb).dst_group = group;
 
        return netlink_broadcast(dev->nls, skb, 0, group, gfp_mask);
-
-nlmsg_failure:
-       kfree_skb(skb);
-       return -EINVAL;
 }
 EXPORT_SYMBOL_GPL(cn_netlink_send);