[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20150507090450.GA31792@gondor.apana.org.au>
Date: Thu, 7 May 2015 17:04:50 +0800
From: Herbert Xu <herbert@...dor.apana.org.au>
To: Ying Xue <ying.xue@...driver.com>
Cc: netdev@...r.kernel.org, cwang@...pensource.com, xemul@...nvz.org,
davem@...emloft.net, eric.dumazet@...il.com, ebiederm@...ssion.com,
maxk@....qualcomm.com, stephen@...workplumber.org, tgraf@...g.ch,
nicolas.dichtel@...nd.com, tom@...bertland.com,
jchapman@...alix.com, erik.hugne@...csson.com,
jon.maloy@...csson.com, horms@...ge.net.au
Subject: Re: [RFC PATCH net-next 01/11] netns: Fix race between put_net() and
netlink_kernel_create()
On Thu, May 07, 2015 at 04:52:40PM +0800, Ying Xue wrote:
>
> @@ -409,12 +410,17 @@ void __put_net(struct net *net)
> {
> /* Cleanup the network namespace in process context */
> unsigned long flags;
> + bool added = false;
>
> spin_lock_irqsave(&cleanup_list_lock, flags);
> - list_add(&net->cleanup_list, &cleanup_list);
> + if (list_empty(&net->cleanup_list)) {
> + list_add(&net->cleanup_list, &cleanup_list);
> + added = true;
> + }
Stop right there. If a ref count is hitting zero twice you've
got big problems. Because it means that after hitting zero the
first time it'll become positive again (if only briefly) which
opens you up to a race against the cleanup.
So this idea is a non-starter.
The rules for ref counts are really simple, if you hit zero then
you're dead. Can someone explain to me in simple terms why this
ref count is special and needs to hit zero twice?
Cheers,
--
Email: Herbert Xu <herbert@...dor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists