Subject: Re: [NET] IPv6 oops bisected

From: David Miller <[email-masked]>
Date: Sun, 07 Oct 2007 23:23:02 -0700 (PDT)

From: Herbert Xu <[email-masked]>
Date: Mon, 8 Oct 2007 14:19:42 +0800

> On Sun, Oct 07, 2007 at 11:16:08PM -0700, David Miller wrote:
> >
> > diff --git a/net/ipv6/route.c b/net/ipv6/route.c
> > index a7db84c..7109ad6 100644
> > --- a/net/ipv6/route.c
> > +++ b/net/ipv6/route.c
> > @@ -1188,7 +1188,7 @@ int ip6_route_add(struct fib6_config *cfg)
> >  	if ((cfg->fc_flags & RTF_REJECT) ||
> >  	    (dev && (dev->flags&IFF_LOOPBACK) && !(addr_type&IPV6_ADDR_LOOPBACK))) {
> >  		/* hold loopback dev/idev if we haven't done so. */
> > -		if (dev != dev->nd_net->loopback_dev) {
> > +		if (!dev || (dev != dev->nd_net->loopback_dev)) {
> >  			if (dev) {
> >  				dev_put(dev);
> >  				in6_dev_put(idev);
> 
> Unfortunately this'll still oops a few lines down when it tries
> to assign dev->nd_net->loopabck_dev to dev.  The issue here is
> which namespace are we in if dev is NULL.

Good catch.

I'm just going to revert my bogus fix and the original change
for now.  Denis can resubmit the original patch once this
is resolved.