diff mbox

[net,v2] ipv6: clean up dev_snmp6 proc entry when we fail to initialize inet6_dev

Message ID 94ceff1a1f708ce80664370c783f7bfb066fccb5.1446577025.git.sd@queasysnail.net
State Superseded, archived
Delegated to: David Miller
Headers show

Commit Message

Sabrina Dubroca Nov. 4, 2015, 1:47 p.m. UTC
In ipv6_add_dev, when addrconf_sysctl_register fails, we do not clean up
the dev_snmp6 entry that we have already registered for this device.
Call snmp6_unregister_dev in this case.

Reported-by: Dmitry Vyukov <dvyukov@google.com>
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
---

v2: we cannot call snmp6_unregister_dev from addrconf_core.c, this
    breaks CONFIG_IPV6=m, instead do the clean up directly from
    ipv6_add_dev
    thanks Cong.

 net/ipv6/addrconf.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Eric Dumazet Nov. 4, 2015, 3:23 p.m. UTC | #1
On Wed, 2015-11-04 at 14:47 +0100, Sabrina Dubroca wrote:
> In ipv6_add_dev, when addrconf_sysctl_register fails, we do not clean up
> the dev_snmp6 entry that we have already registered for this device.
> Call snmp6_unregister_dev in this case.
> 
> Reported-by: Dmitry Vyukov <dvyukov@google.com>
> Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
> ---
> 
> v2: we cannot call snmp6_unregister_dev from addrconf_core.c, this
>     breaks CONFIG_IPV6=m, instead do the clean up directly from
>     ipv6_add_dev
>     thanks Cong.

Any idea when the bug was added ?

Can we please add a proper Fixes: tag for patches that need to be
backported to stable versions ?

It seems to be

Fixes: a317a2f19da7d ("ipv6: fail early when creating netdev named all or default")

So this goes back to linux-3.17 ?

Thanks a lot Sabrina !


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sabrina Dubroca Nov. 4, 2015, 3:36 p.m. UTC | #2
2015-11-04, 07:23:14 -0800, Eric Dumazet wrote:
> On Wed, 2015-11-04 at 14:47 +0100, Sabrina Dubroca wrote:
> > In ipv6_add_dev, when addrconf_sysctl_register fails, we do not clean up
> > the dev_snmp6 entry that we have already registered for this device.
> > Call snmp6_unregister_dev in this case.
> > 
> > Reported-by: Dmitry Vyukov <dvyukov@google.com>
> > Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
> > ---
> > 
> > v2: we cannot call snmp6_unregister_dev from addrconf_core.c, this
> >     breaks CONFIG_IPV6=m, instead do the clean up directly from
> >     ipv6_add_dev
> >     thanks Cong.
> 
> Any idea when the bug was added ?
> 
> Can we please add a proper Fixes: tag for patches that need to be
> backported to stable versions ?
> 
> It seems to be
> 
> Fixes: a317a2f19da7d ("ipv6: fail early when creating netdev named all or default")
> 
> So this goes back to linux-3.17 ?
> 
> Thanks a lot Sabrina !

Sorry, I didn't do the archeology (well, run git blame).  That looks
correct, thanks Eric.
David Miller Nov. 5, 2015, 4:56 a.m. UTC | #3
From: Sabrina Dubroca <sd@queasysnail.net>
Date: Wed,  4 Nov 2015 18:00:13 +0100

> In ipv6_add_dev, when addrconf_sysctl_register fails, we do not clean up
> the dev_snmp6 entry that we have already registered for this device.
> Call snmp6_unregister_dev in this case.
> 
> Fixes: a317a2f19da7d ("ipv6: fail early when creating netdev named all or default")
> Reported-by: Dmitry Vyukov <dvyukov@google.com>
> Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>

Applied, thanks.
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 36b85bd05ac8..dd00828863a0 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -417,6 +417,7 @@  static struct inet6_dev *ipv6_add_dev(struct net_device *dev)
 	if (err) {
 		ipv6_mc_destroy_dev(ndev);
 		del_timer(&ndev->regen_timer);
+		snmp6_unregister_dev(ndev);
 		goto err_release;
 	}
 	/* protected by rtnl_lock */