[IPV6]: Track device renames in snmp6.
authorStephen Hemminger <shemminger@linux-foundation.org>
Sun, 29 Apr 2007 04:16:39 +0000 (21:16 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sun, 29 Apr 2007 04:16:39 +0000 (21:16 -0700)
When network device's are renamed, the IPV6 snmp6 code
gets confused. It doesn't track name changes so it will OOPS
when network device's are removed.

The fix is trivial, just unregister/re-register in notify handler.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c
net/ipv6/proc.c

index e04e493735052e326fd270f5f202b16e76edf814..3452433cbc965f91e6aad0e9512df8caae4fe271 100644 (file)
@@ -2359,8 +2359,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
                break;
 
        case NETDEV_CHANGENAME:
-#ifdef CONFIG_SYSCTL
                if (idev) {
+                       snmp6_unregister_dev(idev);
+#ifdef CONFIG_SYSCTL
                        addrconf_sysctl_unregister(&idev->cnf);
                        neigh_sysctl_unregister(idev->nd_parms);
                        neigh_sysctl_register(dev, idev->nd_parms,
@@ -2368,8 +2369,9 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event,
                                              &ndisc_ifinfo_sysctl_change,
                                              NULL);
                        addrconf_sysctl_register(idev, &idev->cnf);
-               }
 #endif
+                       snmp6_register_dev(idev);
+               }
                break;
        }
 
index acb306a5dd56e49aa13d43d0271a04934895ace1..920dc9cf6a842ed5aec4d277da073cef13b4e161 100644 (file)
@@ -223,6 +223,7 @@ int snmp6_unregister_dev(struct inet6_dev *idev)
                return -EINVAL;
        remove_proc_entry(idev->stats.proc_dir_entry->name,
                          proc_net_devsnmp6);
+       idev->stats.proc_dir_entry = NULL;
        return 0;
 }