IPv6 routing, NLM_F_* flag support: warn if new route is created without NLM_F_CREATE
authorMatti Vaittinen <matti.vaittinen@nsn.com>
Mon, 14 Nov 2011 00:14:49 +0000 (00:14 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Nov 2011 19:35:33 +0000 (14:35 -0500)
The support for NLM_F_* flags at IPv6 routing requests.

Warn if NLM_F_CREATE flag is not defined for RTM_NEWROUTE request,
creating new table. Later NLM_F_CREATE may be required for
new route creation.

Patch created against linux-3.2-rc1

Signed-off-by: Matti Vaittinen <Mazziesaccount@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/route.c

index 8473016bba4a8cd6ae4dfc420c7827524fc3a84b..05c89be04c9f0ac9a6e3768503448c822a5205bf 100644 (file)
@@ -1230,9 +1230,18 @@ int ip6_route_add(struct fib6_config *cfg)
        if (cfg->fc_metric == 0)
                cfg->fc_metric = IP6_RT_PRIO_USER;
 
-       table = fib6_new_table(net, cfg->fc_table);
+       err = -ENOBUFS;
+       if (NULL != cfg->fc_nlinfo.nlh &&
+           !(cfg->fc_nlinfo.nlh->nlmsg_flags&NLM_F_CREATE)) {
+               table = fib6_get_table(net, cfg->fc_table);
+               if (table == NULL) {
+                       printk(KERN_WARNING "IPv6: NLM_F_CREATE should be specified when creating new route\n");
+                       table = fib6_new_table(net, cfg->fc_table);
+               }
+       } else {
+               table = fib6_new_table(net, cfg->fc_table);
+       }
        if (table == NULL) {
-               err = -ENOBUFS;
                goto out;
        }