]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
[PATCH] pv6: track device renames in snmp6
authorStephen Hemminger <shemminger@linux-foundation.org>
Fri, 27 Apr 2007 18:17:57 +0000 (11:17 -0700)
committerChris Wright <chrisw@sous-sol.org>
Mon, 11 Jun 2007 18:37:07 +0000 (11:37 -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>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
net/ipv6/addrconf.c
net/ipv6/proc.c

index f5af4ca804ed508878e2a50806811eb8fb603eac..e383ac808b6447793eb827959182e4abb4285627 100644 (file)
@@ -2338,8 +2338,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,
@@ -2347,8 +2348,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 35249d8487bbb4b61a0b0b29fd83774e26dc594c..a239e912ca40e209116e1bba7fc30813557094a3 100644 (file)
@@ -237,6 +237,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;
 }