]> www.infradead.org Git - users/jedix/linux-maple.git/commit
inet: frag: don't re-use chainlist for evictor
authorFlorian Westphal <fw@strlen.de>
Thu, 23 Jul 2015 10:05:37 +0000 (12:05 +0200)
committerChuck Anderson <chuck.anderson@oracle.com>
Mon, 12 Dec 2016 01:38:40 +0000 (17:38 -0800)
commit5a329607777ce0a0054328fb76c1648a5003e11c
tree61e8d117fdb6771fc0993f41adc142c894fe8bc2
parent9c5d077932e07324ec49d87a6b42a6af8503b8e0
inet: frag: don't re-use chainlist for evictor

commit 65ba1f1ec0eff ("inet: frags: fix a race between inet_evict_bucket
and inet_frag_kill") describes the bug, but the fix doesn't work reliably.

Problem is that ->flags member can be set on other cpu without chainlock
being held by that task, i.e. the RMW-Cycle can clear INET_FRAG_EVICTED
bit after we put the element on the evictor private list.

We can crash when walking the 'private' evictor list since an element can
be deleted from list underneath the evictor.

Join work with Nikolay Alexandrov.

Fixes: b13d3cbfb8e8 ("inet: frag: move eviction of queues to work queue")
Reported-by: Johan Schuijt <johan@transip.nl>
Tested-by: Frank Schreuder <fschreuder@transip.nl>
Signed-off-by: Nikolay Alexandrov <nikolay@cumulusnetworks.com>
Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
Orabug: 23633320
(cherry picked from commit d1fe19444d82e399e38c1594c71b850eca8e9de0)
Signed-off-by: Todd Vierling <todd.vierling@oracle.com>
include/net/inet_frag.h
net/ipv4/inet_fragment.c