diff options
author | David S. Miller <davem@davemloft.net> | 2012-04-01 20:27:33 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-04-02 04:33:43 -0400 |
commit | c78679e8f31b86c7a46e77a3096011f911854187 (patch) | |
tree | 511b7a8e07c89a6ca7936c1ed3cb26300d8fe6a5 /net/ipv6/addrconf.c | |
parent | 86ebb02dc793058ea17ad647c802b507dafff7cb (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.c | 32 |
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 | ||
4193 | nla_put_failure: | 4191 | nla_put_failure: |