aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv6/addrconf.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2012-04-01 20:27:33 -0400
committerDavid S. Miller <davem@davemloft.net>2012-04-02 04:33:43 -0400
commitc78679e8f31b86c7a46e77a3096011f911854187 (patch)
tree511b7a8e07c89a6ca7936c1ed3cb26300d8fe6a5 /net/ipv6/addrconf.c
parent86ebb02dc793058ea17ad647c802b507dafff7cb (diff)
ipv6: Stop using NLA_PUT*().
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>
Diffstat (limited to 'net/ipv6/addrconf.c')
-rw-r--r--net/ipv6/addrconf.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 6a3bb6077e19..153060f946e0 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3989,14 +3989,14 @@ static int inet6_fill_ifla6_attrs(struct sk_buff *skb, struct inet6_dev *idev)
3989 struct nlattr *nla; 3989 struct nlattr *nla;
3990 struct ifla_cacheinfo ci; 3990 struct ifla_cacheinfo ci;
3991 3991
3992 NLA_PUT_U32(skb, IFLA_INET6_FLAGS, idev->if_flags); 3992 if (nla_put_u32(skb, IFLA_INET6_FLAGS, idev->if_flags))
3993 3993 goto nla_put_failure;
3994 ci.max_reasm_len = IPV6_MAXPLEN; 3994 ci.max_reasm_len = IPV6_MAXPLEN;
3995 ci.tstamp = cstamp_delta(idev->tstamp); 3995 ci.tstamp = cstamp_delta(idev->tstamp);
3996 ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time); 3996 ci.reachable_time = jiffies_to_msecs(idev->nd_parms->reachable_time);
3997 ci.retrans_time = jiffies_to_msecs(idev->nd_parms->retrans_time); 3997 ci.retrans_time = jiffies_to_msecs(idev->nd_parms->retrans_time);
3998 NLA_PUT(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci); 3998 if (nla_put(skb, IFLA_INET6_CACHEINFO, sizeof(ci), &ci))
3999 3999 goto nla_put_failure;
4000 nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32)); 4000 nla = nla_reserve(skb, IFLA_INET6_CONF, DEVCONF_MAX * sizeof(s32));
4001 if (nla == NULL) 4001 if (nla == NULL)
4002 goto nla_put_failure; 4002 goto nla_put_failure;
@@ -4061,15 +4061,13 @@ static int inet6_fill_ifinfo(struct sk_buff *skb, struct inet6_dev *idev,
4061 hdr->ifi_flags = dev_get_flags(dev); 4061 hdr->ifi_flags = dev_get_flags(dev);
4062 hdr->ifi_change = 0; 4062 hdr->ifi_change = 0;
4063 4063
4064 NLA_PUT_STRING(skb, IFLA_IFNAME, dev->name); 4064 if (nla_put_string(skb, IFLA_IFNAME, dev->name) ||
4065 4065 (dev->addr_len &&
4066 if (dev->addr_len) 4066 nla_put(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr)) ||
4067 NLA_PUT(skb, IFLA_ADDRESS, dev->addr_len, dev->dev_addr); 4067 nla_put_u32(skb, IFLA_MTU, dev->mtu) ||
4068 4068 (dev->ifindex != dev->iflink &&
4069 NLA_PUT_U32(skb, IFLA_MTU, dev->mtu); 4069 nla_put_u32(skb, IFLA_LINK, dev->iflink)))
4070 if (dev->ifindex != dev->iflink) 4070 goto nla_put_failure;
4071 NLA_PUT_U32(skb, IFLA_LINK, dev->iflink);
4072
4073 protoinfo = nla_nest_start(skb, IFLA_PROTINFO); 4071 protoinfo = nla_nest_start(skb, IFLA_PROTINFO);
4074 if (protoinfo == NULL) 4072 if (protoinfo == NULL)
4075 goto nla_put_failure; 4073 goto nla_put_failure;
@@ -4182,12 +4180,12 @@ static int inet6_fill_prefix(struct sk_buff *skb, struct inet6_dev *idev,
4182 if (pinfo->autoconf) 4180 if (pinfo->autoconf)
4183 pmsg->prefix_flags |= IF_PREFIX_AUTOCONF; 4181 pmsg->prefix_flags |= IF_PREFIX_AUTOCONF;
4184 4182
4185 NLA_PUT(skb, PREFIX_ADDRESS, sizeof(pinfo->prefix), &pinfo->prefix); 4183 if (nla_put(skb, PREFIX_ADDRESS, sizeof(pinfo->prefix), &pinfo->prefix))
4186 4184 goto nla_put_failure;
4187 ci.preferred_time = ntohl(pinfo->prefered); 4185 ci.preferred_time = ntohl(pinfo->prefered);
4188 ci.valid_time = ntohl(pinfo->valid); 4186 ci.valid_time = ntohl(pinfo->valid);
4189 NLA_PUT(skb, PREFIX_CACHEINFO, sizeof(ci), &ci); 4187 if (nla_put(skb, PREFIX_CACHEINFO, sizeof(ci), &ci))
4190 4188 goto nla_put_failure;
4191 return nlmsg_end(skb, nlh); 4189 return nlmsg_end(skb, nlh);
4192 4190
4193nla_put_failure: 4191nla_put_failure: