diff options
author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-04-27 11:17:57 -0700 |
---|---|---|
committer | Chris Wright <chrisw@sous-sol.org> | 2007-06-11 11:37:07 -0700 |
commit | e17088e535b5be4184e3d43cb8720f56a298b0c3 (patch) | |
tree | 205418fb32537922b6d481110814ff9be938675f /net | |
parent | b6542acb6d675b41f4a96576cae4f88fd1bc8c47 (diff) |
[PATCH] pv6: track device renames in snmp6
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv6/addrconf.c | 6 | ||||
-rw-r--r-- | net/ipv6/proc.c | 1 |
2 files changed, 5 insertions, 2 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index f5af4ca804e..e383ac808b6 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -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; }; diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c index 35249d8487b..a239e912ca4 100644 --- a/net/ipv6/proc.c +++ b/net/ipv6/proc.c @@ -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; } |