diff options
author | Thomas Graf <tgraf@suug.ch> | 2006-08-26 23:13:18 -0400 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-09-22 18:18:25 -0400 |
commit | 5176f91ea83f1a59eba4dba88634a4729d51d1ac (patch) | |
tree | 80b35d2cd7ab316f0ee96ab742fee5073b949130 | |
parent | a5531a5d852008be40811496029012f4ad3093d1 (diff) |
[NETLINK]: Make use of NLA_STRING/NLA_NUL_STRING attribute validation
Converts existing NLA_STRING attributes to use the new
validation features, saving a couple of temporary buffers.
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | net/core/fib_rules.c | 8 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 9 | ||||
-rw-r--r-- | net/decnet/dn_rules.c | 2 | ||||
-rw-r--r-- | net/ipv4/devinet.c | 2 | ||||
-rw-r--r-- | net/ipv4/fib_frontend.c | 2 | ||||
-rw-r--r-- | net/ipv4/fib_rules.c | 2 | ||||
-rw-r--r-- | net/ipv6/fib6_rules.c | 6 | ||||
-rw-r--r-- | net/ipv6/route.c | 2 | ||||
-rw-r--r-- | net/netlink/genetlink.c | 10 |
9 files changed, 17 insertions, 26 deletions
diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c index 7b2e9bb1a605..a99d87d82b7f 100644 --- a/net/core/fib_rules.c +++ b/net/core/fib_rules.c | |||
@@ -161,9 +161,6 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
161 | if (err < 0) | 161 | if (err < 0) |
162 | goto errout; | 162 | goto errout; |
163 | 163 | ||
164 | if (tb[FRA_IFNAME] && nla_len(tb[FRA_IFNAME]) > IFNAMSIZ) | ||
165 | goto errout; | ||
166 | |||
167 | rule = kzalloc(ops->rule_size, GFP_KERNEL); | 164 | rule = kzalloc(ops->rule_size, GFP_KERNEL); |
168 | if (rule == NULL) { | 165 | if (rule == NULL) { |
169 | err = -ENOMEM; | 166 | err = -ENOMEM; |
@@ -177,10 +174,7 @@ int fib_nl_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
177 | struct net_device *dev; | 174 | struct net_device *dev; |
178 | 175 | ||
179 | rule->ifindex = -1; | 176 | rule->ifindex = -1; |
180 | if (nla_strlcpy(rule->ifname, tb[FRA_IFNAME], | 177 | nla_strlcpy(rule->ifname, tb[FRA_IFNAME], IFNAMSIZ); |
181 | IFNAMSIZ) >= IFNAMSIZ) | ||
182 | goto errout_free; | ||
183 | |||
184 | dev = __dev_get_by_name(rule->ifname); | 178 | dev = __dev_get_by_name(rule->ifname); |
185 | if (dev) | 179 | if (dev) |
186 | rule->ifindex = dev->ifindex; | 180 | rule->ifindex = dev->ifindex; |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 8f225499e32e..0ebcf8488e99 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -371,8 +371,8 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
371 | } | 371 | } |
372 | 372 | ||
373 | static struct nla_policy ifla_policy[IFLA_MAX+1] __read_mostly = { | 373 | static struct nla_policy ifla_policy[IFLA_MAX+1] __read_mostly = { |
374 | [IFLA_IFNAME] = { .type = NLA_STRING }, | 374 | [IFLA_IFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ-1 }, |
375 | [IFLA_MAP] = { .minlen = sizeof(struct rtnl_link_ifmap) }, | 375 | [IFLA_MAP] = { .len = sizeof(struct rtnl_link_ifmap) }, |
376 | [IFLA_MTU] = { .type = NLA_U32 }, | 376 | [IFLA_MTU] = { .type = NLA_U32 }, |
377 | [IFLA_TXQLEN] = { .type = NLA_U32 }, | 377 | [IFLA_TXQLEN] = { .type = NLA_U32 }, |
378 | [IFLA_WEIGHT] = { .type = NLA_U32 }, | 378 | [IFLA_WEIGHT] = { .type = NLA_U32 }, |
@@ -392,9 +392,8 @@ static int rtnl_setlink(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
392 | if (err < 0) | 392 | if (err < 0) |
393 | goto errout; | 393 | goto errout; |
394 | 394 | ||
395 | if (tb[IFLA_IFNAME] && | 395 | if (tb[IFLA_IFNAME]) |
396 | nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ) >= IFNAMSIZ) | 396 | nla_strlcpy(ifname, tb[IFLA_IFNAME], IFNAMSIZ); |
397 | return -EINVAL; | ||
398 | 397 | ||
399 | err = -EINVAL; | 398 | err = -EINVAL; |
400 | ifm = nlmsg_data(nlh); | 399 | ifm = nlmsg_data(nlh); |
diff --git a/net/decnet/dn_rules.c b/net/decnet/dn_rules.c index 63ad63dfd252..3e0c882c90bf 100644 --- a/net/decnet/dn_rules.c +++ b/net/decnet/dn_rules.c | |||
@@ -112,7 +112,7 @@ errout: | |||
112 | } | 112 | } |
113 | 113 | ||
114 | static struct nla_policy dn_fib_rule_policy[FRA_MAX+1] __read_mostly = { | 114 | static struct nla_policy dn_fib_rule_policy[FRA_MAX+1] __read_mostly = { |
115 | [FRA_IFNAME] = { .type = NLA_STRING }, | 115 | [FRA_IFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, |
116 | [FRA_PRIORITY] = { .type = NLA_U32 }, | 116 | [FRA_PRIORITY] = { .type = NLA_U32 }, |
117 | [FRA_SRC] = { .type = NLA_U16 }, | 117 | [FRA_SRC] = { .type = NLA_U16 }, |
118 | [FRA_DST] = { .type = NLA_U16 }, | 118 | [FRA_DST] = { .type = NLA_U16 }, |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 0487677729cf..8e8d1f17d77a 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -85,7 +85,7 @@ static struct nla_policy ifa_ipv4_policy[IFA_MAX+1] __read_mostly = { | |||
85 | [IFA_ADDRESS] = { .type = NLA_U32 }, | 85 | [IFA_ADDRESS] = { .type = NLA_U32 }, |
86 | [IFA_BROADCAST] = { .type = NLA_U32 }, | 86 | [IFA_BROADCAST] = { .type = NLA_U32 }, |
87 | [IFA_ANYCAST] = { .type = NLA_U32 }, | 87 | [IFA_ANYCAST] = { .type = NLA_U32 }, |
88 | [IFA_LABEL] = { .type = NLA_STRING }, | 88 | [IFA_LABEL] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, |
89 | }; | 89 | }; |
90 | 90 | ||
91 | static void rtmsg_ifa(int event, struct in_ifaddr *, struct nlmsghdr *, u32); | 91 | static void rtmsg_ifa(int event, struct in_ifaddr *, struct nlmsghdr *, u32); |
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index d0abeab16e66..cfb527c060e4 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c | |||
@@ -462,7 +462,7 @@ struct nla_policy rtm_ipv4_policy[RTA_MAX+1] __read_mostly = { | |||
462 | [RTA_PRIORITY] = { .type = NLA_U32 }, | 462 | [RTA_PRIORITY] = { .type = NLA_U32 }, |
463 | [RTA_PREFSRC] = { .type = NLA_U32 }, | 463 | [RTA_PREFSRC] = { .type = NLA_U32 }, |
464 | [RTA_METRICS] = { .type = NLA_NESTED }, | 464 | [RTA_METRICS] = { .type = NLA_NESTED }, |
465 | [RTA_MULTIPATH] = { .minlen = sizeof(struct rtnexthop) }, | 465 | [RTA_MULTIPATH] = { .len = sizeof(struct rtnexthop) }, |
466 | [RTA_PROTOINFO] = { .type = NLA_U32 }, | 466 | [RTA_PROTOINFO] = { .type = NLA_U32 }, |
467 | [RTA_FLOW] = { .type = NLA_U32 }, | 467 | [RTA_FLOW] = { .type = NLA_U32 }, |
468 | [RTA_MP_ALGO] = { .type = NLA_U32 }, | 468 | [RTA_MP_ALGO] = { .type = NLA_U32 }, |
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 280f424ca9c9..52b2adae4f22 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c | |||
@@ -179,7 +179,7 @@ static struct fib_table *fib_empty_table(void) | |||
179 | } | 179 | } |
180 | 180 | ||
181 | static struct nla_policy fib4_rule_policy[FRA_MAX+1] __read_mostly = { | 181 | static struct nla_policy fib4_rule_policy[FRA_MAX+1] __read_mostly = { |
182 | [FRA_IFNAME] = { .type = NLA_STRING }, | 182 | [FRA_IFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, |
183 | [FRA_PRIORITY] = { .type = NLA_U32 }, | 183 | [FRA_PRIORITY] = { .type = NLA_U32 }, |
184 | [FRA_SRC] = { .type = NLA_U32 }, | 184 | [FRA_SRC] = { .type = NLA_U32 }, |
185 | [FRA_DST] = { .type = NLA_U32 }, | 185 | [FRA_DST] = { .type = NLA_U32 }, |
diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c index 2fbc71d90187..34f5bfaddfc2 100644 --- a/net/ipv6/fib6_rules.c +++ b/net/ipv6/fib6_rules.c | |||
@@ -137,10 +137,10 @@ static int fib6_rule_match(struct fib_rule *rule, struct flowi *fl, int flags) | |||
137 | } | 137 | } |
138 | 138 | ||
139 | static struct nla_policy fib6_rule_policy[FRA_MAX+1] __read_mostly = { | 139 | static struct nla_policy fib6_rule_policy[FRA_MAX+1] __read_mostly = { |
140 | [FRA_IFNAME] = { .type = NLA_STRING }, | 140 | [FRA_IFNAME] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, |
141 | [FRA_PRIORITY] = { .type = NLA_U32 }, | 141 | [FRA_PRIORITY] = { .type = NLA_U32 }, |
142 | [FRA_SRC] = { .minlen = sizeof(struct in6_addr) }, | 142 | [FRA_SRC] = { .len = sizeof(struct in6_addr) }, |
143 | [FRA_DST] = { .minlen = sizeof(struct in6_addr) }, | 143 | [FRA_DST] = { .len = sizeof(struct in6_addr) }, |
144 | [FRA_FWMARK] = { .type = NLA_U32 }, | 144 | [FRA_FWMARK] = { .type = NLA_U32 }, |
145 | [FRA_FWMASK] = { .type = NLA_U32 }, | 145 | [FRA_FWMASK] = { .type = NLA_U32 }, |
146 | [FRA_TABLE] = { .type = NLA_U32 }, | 146 | [FRA_TABLE] = { .type = NLA_U32 }, |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index ba1b3d11865e..75f4bb9611ce 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
@@ -1865,7 +1865,7 @@ void rt6_mtu_change(struct net_device *dev, unsigned mtu) | |||
1865 | } | 1865 | } |
1866 | 1866 | ||
1867 | static struct nla_policy rtm_ipv6_policy[RTA_MAX+1] __read_mostly = { | 1867 | static struct nla_policy rtm_ipv6_policy[RTA_MAX+1] __read_mostly = { |
1868 | [RTA_GATEWAY] = { .minlen = sizeof(struct in6_addr) }, | 1868 | [RTA_GATEWAY] = { .len = sizeof(struct in6_addr) }, |
1869 | [RTA_OIF] = { .type = NLA_U32 }, | 1869 | [RTA_OIF] = { .type = NLA_U32 }, |
1870 | [RTA_IIF] = { .type = NLA_U32 }, | 1870 | [RTA_IIF] = { .type = NLA_U32 }, |
1871 | [RTA_PRIORITY] = { .type = NLA_U32 }, | 1871 | [RTA_PRIORITY] = { .type = NLA_U32 }, |
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index d32599116c56..3ac942cdb677 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
@@ -455,7 +455,8 @@ static struct sk_buff *ctrl_build_msg(struct genl_family *family, u32 pid, | |||
455 | 455 | ||
456 | static struct nla_policy ctrl_policy[CTRL_ATTR_MAX+1] __read_mostly = { | 456 | static struct nla_policy ctrl_policy[CTRL_ATTR_MAX+1] __read_mostly = { |
457 | [CTRL_ATTR_FAMILY_ID] = { .type = NLA_U16 }, | 457 | [CTRL_ATTR_FAMILY_ID] = { .type = NLA_U16 }, |
458 | [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_STRING }, | 458 | [CTRL_ATTR_FAMILY_NAME] = { .type = NLA_NUL_STRING, |
459 | .len = GENL_NAMSIZ - 1 }, | ||
459 | }; | 460 | }; |
460 | 461 | ||
461 | static int ctrl_getfamily(struct sk_buff *skb, struct genl_info *info) | 462 | static int ctrl_getfamily(struct sk_buff *skb, struct genl_info *info) |
@@ -470,12 +471,9 @@ static int ctrl_getfamily(struct sk_buff *skb, struct genl_info *info) | |||
470 | } | 471 | } |
471 | 472 | ||
472 | if (info->attrs[CTRL_ATTR_FAMILY_NAME]) { | 473 | if (info->attrs[CTRL_ATTR_FAMILY_NAME]) { |
473 | char name[GENL_NAMSIZ]; | 474 | char *name; |
474 | |||
475 | if (nla_strlcpy(name, info->attrs[CTRL_ATTR_FAMILY_NAME], | ||
476 | GENL_NAMSIZ) >= GENL_NAMSIZ) | ||
477 | goto errout; | ||
478 | 475 | ||
476 | name = nla_data(info->attrs[CTRL_ATTR_FAMILY_NAME]); | ||
479 | res = genl_family_find_byname(name); | 477 | res = genl_family_find_byname(name); |
480 | } | 478 | } |
481 | 479 | ||