inetpeer: fix a race in inetpeer_gc_worker()
authorEric Dumazet <edumazet@google.com>
Tue, 5 Jun 2012 03:00:18 +0000 (03:00 +0000)
committerBen Hutchings <ben@decadent.org.uk>
Sat, 26 Oct 2013 20:05:57 +0000 (21:05 +0100)
commit8f9b44910e7456fd898fe5da1f45e2d463cbfb31
tree1f5c6f191fb849bbd75091b4bb5ba03df4af0f39
parentc25e82c03fed5bf21418963cebc92de7797f9b3b
inetpeer: fix a race in inetpeer_gc_worker()

[ Upstream commit 55432d2b543a4b6dfae54f5c432a566877a85d90 ]

commit 5faa5df1fa2024 (inetpeer: Invalidate the inetpeer tree along with
the routing cache) added a race :

Before freeing an inetpeer, we must respect a RCU grace period, and make
sure no user will attempt to increase refcnt.

inetpeer_invalidate_tree() waits for a RCU grace period before inserting
inetpeer tree into gc_list and waking the worker. At that time, no
concurrent lookup can find a inetpeer in this tree.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Acked-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
include/net/inetpeer.h
net/ipv4/inetpeer.c