struct fib_nh *nh)
 {
        int err;
+       struct net *net;
 
+       net = cfg->fc_nlinfo.nl_net;
        if (nh->nh_gw) {
                struct fib_result res;
 
 
                        if (cfg->fc_scope >= RT_SCOPE_LINK)
                                return -EINVAL;
-                       if (inet_addr_type(cfg->fc_nlinfo.nl_net,
-                                          nh->nh_gw) != RTN_UNICAST)
+                       if (inet_addr_type(net, nh->nh_gw) != RTN_UNICAST)
                                return -EINVAL;
-                       if ((dev = __dev_get_by_index(cfg->fc_nlinfo.nl_net,
-                                                     nh->nh_oif)) == NULL)
+                       if ((dev = __dev_get_by_index(net, nh->nh_oif)) == NULL)
                                return -ENODEV;
                        if (!(dev->flags&IFF_UP))
                                return -ENETDOWN;
                        /* It is not necessary, but requires a bit of thinking */
                        if (fl.fl4_scope < RT_SCOPE_LINK)
                                fl.fl4_scope = RT_SCOPE_LINK;
-                       if ((err = fib_lookup(&init_net, &fl, &res)) != 0)
+                       if ((err = fib_lookup(net, &fl, &res)) != 0)
                                return err;
                }
                err = -EINVAL;
                if (nh->nh_flags&(RTNH_F_PERVASIVE|RTNH_F_ONLINK))
                        return -EINVAL;
 
-               in_dev = inetdev_by_index(&init_net, nh->nh_oif);
+               in_dev = inetdev_by_index(net, nh->nh_oif);
                if (in_dev == NULL)
                        return -ENODEV;
                if (!(in_dev->dev->flags&IFF_UP)) {