From: Eric Dumazet <eric.dumazet@gmail.com>
To: Josh Hunt <johunt@akamai.com>
Cc: "davem@davemloft.net" <davem@davemloft.net>,
"kaber@trash.net" <kaber@trash.net>,
Debabrata Banerjee <dbavatar@gmail.com>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"yoshfuji@linux-ipv6.org" <yoshfuji@linux-ipv6.org>,
"jmorris@namei.org" <jmorris@namei.org>,
"pekkas@netcore.fi" <pekkas@netcore.fi>,
"kuznet@ms2.inr.ac.ru" <kuznet@ms2.inr.ac.ru>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: Bug in net/ipv6/ip6_fib.c:fib6_dump_table()
Date: Fri, 22 Jun 2012 10:29:06 +0200 [thread overview]
Message-ID: <1340353746.4604.9502.camel@edumazet-glaptop> (raw)
In-Reply-To: <4FE41570.4090803@akamai.com>
On Fri, 2012-06-22 at 01:49 -0500, Josh Hunt wrote:
> On 06/21/2012 03:27 PM, Eric Dumazet wrote:
> > On Thu, 2012-06-21 at 14:35 -0500, Josh Hunt wrote:
> >
> >> Can anyone provide details of the crash which was intended to be fixed
> >> by 2bec5a369ee79576a3eea2c23863325089785a2c? With this patch in and
> >> doing concurrent adds/deletes and dumping the table via netlink causes
> >> duplicate entries to be reported. Reverting this patch causes those
> >> problems to go away. We can provide a more detailed test if that is
> >> needed, but so far our testing has been unable to reproduce the crash
> >> mentioned in the above commit with it reverted.
> >
> > A mere revert wont be enough.
> >
> > Looking at this code, it lacks proper synchronization
> > between tree updaters and tree walkers.
> >
> > fib6_walker_lock rwlock is not enough to prevent races.
> >
> > Are you willing to fix this yourself ?
> >
>
> Looking through the code a bit more it seems like we would need to have
> a lock in fib6_walker_t to protect its contents. Mainly for when we
> update the pointers in fib6_del_route and fib6_repair_tree. Right now
> there is the fib6_walker_lock, but that appears to only be protecting
> the elements of the list, not their contents. Is this what you had in
> mind? I just coded up something along these lines and it works for the
> most part, but I also got a message about unsafe lock ordering when I
> stressed it so I am messing something up. If this sounds like it's on
> the right track I can work out the kinks in the morning.
Hmm, it seems tb6_lock is held by a writer, so its safe :
a tree walker can run only holding a read_lock on tb6_lock
next prev parent reply other threads:[~2012-06-22 8:29 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-12 17:22 Bug in net/ipv6/ip6_fib.c:fib6_dump_table() Debabrata Banerjee
2012-06-21 19:35 ` Josh Hunt
2012-06-21 20:27 ` Eric Dumazet
2012-06-21 21:50 ` Alexey Kuznetsov
2012-06-22 3:34 ` Gao feng
2012-06-22 6:49 ` Josh Hunt
2012-06-22 8:29 ` Eric Dumazet [this message]
2012-06-22 13:44 ` Josh Hunt
2012-06-22 18:13 ` Eric Dumazet
2012-06-22 21:12 ` Debabrata Banerjee
2012-06-23 0:02 ` David Miller
2012-06-23 5:37 ` Eric Dumazet
2012-06-23 20:55 ` Alexey Kuznetsov
2012-06-23 23:02 ` David Miller
2012-06-25 22:40 ` David Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1340353746.4604.9502.camel@edumazet-glaptop \
--to=eric.dumazet@gmail.com \
--cc=davem@davemloft.net \
--cc=dbavatar@gmail.com \
--cc=jmorris@namei.org \
--cc=johunt@akamai.com \
--cc=kaber@trash.net \
--cc=kuznet@ms2.inr.ac.ru \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pekkas@netcore.fi \
--cc=yoshfuji@linux-ipv6.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox