Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[cascardo/linux.git] / net / ipv4 / route.c
index 167ea10..e4d18f2 100644 (file)
@@ -229,7 +229,7 @@ const __u8 ip_tos2prio[16] = {
        TC_PRIO_INTERACTIVE_BULK,
        ECN_OR_COST(INTERACTIVE_BULK)
 };
-
+EXPORT_SYMBOL(ip_tos2prio);
 
 /*
  * Route cache.
@@ -2972,7 +2972,8 @@ static int rt_fill_info(struct net *net,
        r->rtm_src_len  = 0;
        r->rtm_tos      = rt->rt_key_tos;
        r->rtm_table    = RT_TABLE_MAIN;
-       NLA_PUT_U32(skb, RTA_TABLE, RT_TABLE_MAIN);
+       if (nla_put_u32(skb, RTA_TABLE, RT_TABLE_MAIN))
+               goto nla_put_failure;
        r->rtm_type     = rt->rt_type;
        r->rtm_scope    = RT_SCOPE_UNIVERSE;
        r->rtm_protocol = RTPROT_UNSPEC;
@@ -2980,31 +2981,38 @@ static int rt_fill_info(struct net *net,
        if (rt->rt_flags & RTCF_NOTIFY)
                r->rtm_flags |= RTM_F_NOTIFY;
 
-       NLA_PUT_BE32(skb, RTA_DST, rt->rt_dst);
-
+       if (nla_put_be32(skb, RTA_DST, rt->rt_dst))
+               goto nla_put_failure;
        if (rt->rt_key_src) {
                r->rtm_src_len = 32;
-               NLA_PUT_BE32(skb, RTA_SRC, rt->rt_key_src);
+               if (nla_put_be32(skb, RTA_SRC, rt->rt_key_src))
+                       goto nla_put_failure;
        }
-       if (rt->dst.dev)
-               NLA_PUT_U32(skb, RTA_OIF, rt->dst.dev->ifindex);
+       if (rt->dst.dev &&
+           nla_put_u32(skb, RTA_OIF, rt->dst.dev->ifindex))
+               goto nla_put_failure;
 #ifdef CONFIG_IP_ROUTE_CLASSID
-       if (rt->dst.tclassid)
-               NLA_PUT_U32(skb, RTA_FLOW, rt->dst.tclassid);
+       if (rt->dst.tclassid &&
+           nla_put_u32(skb, RTA_FLOW, rt->dst.tclassid))
+               goto nla_put_failure;
 #endif
-       if (rt_is_input_route(rt))
-               NLA_PUT_BE32(skb, RTA_PREFSRC, rt->rt_spec_dst);
-       else if (rt->rt_src != rt->rt_key_src)
-               NLA_PUT_BE32(skb, RTA_PREFSRC, rt->rt_src);
-
-       if (rt->rt_dst != rt->rt_gateway)
-               NLA_PUT_BE32(skb, RTA_GATEWAY, rt->rt_gateway);
+       if (rt_is_input_route(rt)) {
+               if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_spec_dst))
+                       goto nla_put_failure;
+       } else if (rt->rt_src != rt->rt_key_src) {
+               if (nla_put_be32(skb, RTA_PREFSRC, rt->rt_src))
+                       goto nla_put_failure;
+       }
+       if (rt->rt_dst != rt->rt_gateway &&
+           nla_put_be32(skb, RTA_GATEWAY, rt->rt_gateway))
+               goto nla_put_failure;
 
        if (rtnetlink_put_metrics(skb, dst_metrics_ptr(&rt->dst)) < 0)
                goto nla_put_failure;
 
-       if (rt->rt_mark)
-               NLA_PUT_BE32(skb, RTA_MARK, rt->rt_mark);
+       if (rt->rt_mark &&
+           nla_put_be32(skb, RTA_MARK, rt->rt_mark))
+               goto nla_put_failure;
 
        error = rt->dst.error;
        if (peer) {
@@ -3045,7 +3053,8 @@ static int rt_fill_info(struct net *net,
                        }
                } else
 #endif
-                       NLA_PUT_U32(skb, RTA_IIF, rt->rt_iif);
+                       if (nla_put_u32(skb, RTA_IIF, rt->rt_iif))
+                               goto nla_put_failure;
        }
 
        if (rtnl_put_cacheinfo(skb, &rt->dst, id, ts, tsage,