]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
[PATCH] ipv6: track device renames in snmp6
authorStephen Hemminger <shemminger@linux-foundation.org>
Thu, 26 Apr 2007 23:42:47 +0000 (16:42 -0700)
committerChris Wright <chrisw@sous-sol.org>
Wed, 23 May 2007 21:32:40 +0000 (14:32 -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: Chris Wright <chrisw@sous-sol.org>
net/ipv6/addrconf.c
net/ipv6/proc.c

index 452a82ce479681832698f3178b726f9cae6a2a69..9b1ec9714ad6baaabe2df0c35f06c708f06bccda 100644 (file)
@@ -2281,8 +2281,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,
@@ -2290,8 +2291,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 fa3fb509f1877c4efaac30113fbeeff6ac52484c..d57853daf874243c099a1ca06b6332bb9f1b31ae 100644 (file)
@@ -236,6 +236,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;
 }