From mboxrd@z Thu Jan 1 00:00:00 1970 From: Cong Wang Date: Wed, 06 Jul 2016 02:02:03 +0000 Subject: Re: Problem: BUG_ON hit in ppp_pernet() when re-connect after changing shared key on LAC Message-Id: List-Id: References: <7fabf4defe2f468bbcc829247de956c0@svr-chch-ex1.atlnz.lc> <6e0b17d147054867ac0f80978ccf91b2@svr-chch-ex1.atlnz.lc> In-Reply-To: <6e0b17d147054867ac0f80978ccf91b2@svr-chch-ex1.atlnz.lc> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Matt Bennett Cc: "linux-ppp@vger.kernel.org" , "netdev@vger.kernel.org" , "g.nault@alphalink.fr" On Tue, Jul 5, 2016 at 5:05 PM, Matt Bennett wrote: > On 07/06/2016 08:37 AM, Cong Wang wrote: >> On Tue, Jul 5, 2016 at 10:59 AM, Cong Wang wrote: >>> On Mon, Jul 4, 2016 at 7:50 PM, Matt Bennett >>> wrote: >>>> Using printk I have confirmed that ppp_pernet() is called from >>>> ppp_connect_channel() when the BUG occurs (i.e. pch->chan_net is NULL). >>>> >>>> This behavior appears to have been introduced in commit 1f461dc ("ppp: >>>> take reference on channels netns"). >>> >>> We have some race condition here, where a parallel ppp_unregister_channel() >>> could happen while we are in ppp_connect_channel(). >>> >>> We need some synchronization for them. I am not sure what is the right lock >>> here since ppp locking looks crazy. >> >> Matt, could you try if the attached patch helps? >> >> Thanks! >> > I have given that patch a good amount of testing and the BUG_ON() no > longer is hit. Whether that is the best fix or not I am unsure? At least my patch makes the net refcnt sync with pch life-time: we grab a net refcnt when we allocate a pch, and release it when we are going to destroy a pch. Makes sense to you? > > Either way, the following comment in ppp_unregister_channel() seems > incorrect to me and should probably be deleted unless it is fixed? > > /* > * This ensures that we have returned from any calls into the > * the channel's start_xmit or ioctl routine before we proceed. > */ This comment is pretty old, I think it refers to the pch->ppp check in ppp_connect_channel(). Thanks.