if (nla_put_s32(skb, NETCONFA_IFINDEX, ifindex) < 0)
                goto nla_put_failure;
 
+       if (!devconf)
+               goto out;
+
        if ((all || type == NETCONFA_FORWARDING) &&
            nla_put_s32(skb, NETCONFA_FORWARDING,
                        IPV4_DEVCONF(*devconf, FORWARDING)) < 0)
                        IPV4_DEVCONF(*devconf, IGNORE_ROUTES_WITH_LINKDOWN)) < 0)
                goto nla_put_failure;
 
+out:
        nlmsg_end(skb, nlh);
        return 0;
 
        return -ENOBUFS;
 }
 
-static void __devinet_sysctl_unregister(struct ipv4_devconf *cnf)
+static void __devinet_sysctl_unregister(struct net *net,
+                                       struct ipv4_devconf *cnf, int ifindex)
 {
        struct devinet_sysctl_table *t = cnf->sysctl;
 
-       if (!t)
-               return;
+       if (t) {
+               cnf->sysctl = NULL;
+               unregister_net_sysctl_table(t->sysctl_header);
+               kfree(t);
+       }
 
-       cnf->sysctl = NULL;
-       unregister_net_sysctl_table(t->sysctl_header);
-       kfree(t);
+       inet_netconf_notify_devconf(net, RTM_DELNETCONF, 0, ifindex, NULL);
 }
 
 static int devinet_sysctl_register(struct in_device *idev)
 
 static void devinet_sysctl_unregister(struct in_device *idev)
 {
-       __devinet_sysctl_unregister(&idev->cnf);
+       struct net *net = dev_net(idev->dev);
+
+       __devinet_sysctl_unregister(net, &idev->cnf, idev->dev->ifindex);
        neigh_sysctl_unregister(idev->arp_parms);
 }
 
 
 #ifdef CONFIG_SYSCTL
 err_reg_ctl:
-       __devinet_sysctl_unregister(dflt);
+       __devinet_sysctl_unregister(net, dflt, NETCONFA_IFINDEX_DEFAULT);
 err_reg_dflt:
-       __devinet_sysctl_unregister(all);
+       __devinet_sysctl_unregister(net, all, NETCONFA_IFINDEX_ALL);
 err_reg_all:
        if (tbl != ctl_forward_entry)
                kfree(tbl);
 
        tbl = net->ipv4.forw_hdr->ctl_table_arg;
        unregister_net_sysctl_table(net->ipv4.forw_hdr);
-       __devinet_sysctl_unregister(net->ipv4.devconf_dflt);
-       __devinet_sysctl_unregister(net->ipv4.devconf_all);
+       __devinet_sysctl_unregister(net, net->ipv4.devconf_dflt,
+                                   NETCONFA_IFINDEX_DEFAULT);
+       __devinet_sysctl_unregister(net, net->ipv4.devconf_all,
+                                   NETCONFA_IFINDEX_ALL);
        kfree(tbl);
 #endif
        kfree(net->ipv4.devconf_dflt);