Thread (10 messages) flat view 10 messages, 4 authors, 2006-08-24

Re: [PATCH] locking bug in fib_semantics.c

From: David Miller <davem@davemloft.net>
Date: 2006-08-21 08:16:51

From: Jarek Poplawski <redacted>
Date: Mon, 21 Aug 2006 10:16:43 +0200
On 17-08-2006 11:36, Alexey Kuznetsov wrote:
quoted
Hello!

[IPV4]: severe locking bug in fib_semantics.c

The patch is for net-2.6.19, but the bug is present in all the kernels
since yore.

Found in 2.4 by Yixin Pan [off-list ref]. Why do we need lockdep,
when sharp-sighted eyes are available? :-)
quoted
When I read fib_semantics.c of Linux-2.4.32, write_lock(&fib_info_lock) =
is used in fib_release_info() instead of write_lock_bh(&fib_info_lock).  =
Is the following case possible: a BH interrupts fib_release_info() while =
holding the write lock, and calls ip_check_fib_default() which calls =
read_lock(&fib_info_lock), and spin forever.
But I hope the real reason for this patch isn't exactly like that.
Could fib_release_info() be interrupted by BH really?
Absolutely, yes it can.  What makes you think it can't?

All of the call sites I have checked cause it to run with
BH's enabled, and that allows ip_fib_check_default() to
potentially run.  All we need is one such case to cause
the deadlock.

I was skeptical of this case too, until I checked how
fib_release_info() was called.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help