Thread (15 messages) read the whole thread 15 messages, 5 authors, 2017-03-20

Re: [PATCH net v2] net: Do not hold the reference for the same sk_rx_dst

From: Kaiwen Xu <hidden>
Date: 2017-03-20 21:58:51

On Sun, Mar 19, 2017 at 09:09:38PM -0700, Cong Wang wrote:
On Sat, Mar 18, 2017 at 9:03 PM, Kaiwen Xu [off-list ref] wrote:
quoted
On Sat, Mar 18, 2017 at 08:49:43PM -0700, Cong Wang wrote:
quoted
On Sat, Mar 18, 2017 at 6:48 PM, Kevin Xu [off-list ref] wrote:
quoted
In some rare cases, inet_sk_rx_dst_set() may be called multiple times
on the same dst, causing double refcounting. Eventually, it
prevents net_device to be destroyed. The bug manifested as

unregister_netdevice: waiting for lo to become free. Usage count = 1

in the kernel log, preventing new network namespace creation.

Signed-off-by: Kevin Xu <redacted>
Don't know why you don't follow the discussion on your v1...

It is protected by bh_lock_sock(), so your patch is not needed
at all.

Read net/ipv4/udp.c:

1762 /* For TCP sockets, sk_rx_dst is protected by socket lock
1763  * For UDP, we use xchg() to guard against concurrent changes.
1764  */
I probably misunderstood. Do you mean v2 patch is actually not needed or
the whole workaround is not necessary?
Your patch, no matter v1 or v2, is not needed because we use
bh_lock_sock() to serialize inet_sk_rx_dst_set(), unless you find
a case where we miss the bh_lock_sock(), but you don't say it in
your changelog. "some rare cases" is not enough to justify this bug.
I see, thanks for your explanation! I will try to dig in more to see if
I can find the root cause.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help