On Wed, Nov 16, 2016 at 1:49 AM, Nicolas Dichtel <nicolas.dich...@6wind.com> wrote: > diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c > index f61c0e02a413..63f65387f4e1 100644 > --- a/net/core/net_namespace.c > +++ b/net/core/net_namespace.c > @@ -159,6 +159,9 @@ static int alloc_netid(struct net *net, struct net *peer, > int reqid) > max = reqid + 1; > } > > + if (!atomic_read(&net->count) || !atomic_read(&peer->count)) > + return -EINVAL; > + > return idr_alloc(&net->netns_ids, peer, min, max, GFP_ATOMIC); > }
There is already a check in peernet2id_alloc(), so why not just the following? diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index f61c0e0..7001da9 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -219,6 +219,8 @@ int peernet2id_alloc(struct net *net, struct net *peer) bool alloc; int id; + if (atomic_read(&net->count) == 0) + return NETNSA_NSID_NOT_ASSIGNED; spin_lock_irqsave(&net->nsid_lock, flags); alloc = atomic_read(&peer->count) == 0 ? false : true; id = __peernet2id_alloc(net, peer, &alloc);