]> git.baikalelectronics.ru Git - kernel.git/commit
netfilter: fix race in conntrack between dump_table and destroy
authorStephen Hemminger <shemminger@vyatta.com>
Tue, 11 Jan 2011 22:54:42 +0000 (23:54 +0100)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 11 Jan 2011 22:54:42 +0000 (23:54 +0100)
commit8be3a14049435d58c90875690f5e50fed6c44e1e
treeb1cfcae34d29ce1494254d814fc92e23a426ef71
parentfd0a7472fb01624cfe79f9ed9179ab7d33725b2f
netfilter: fix race in conntrack between dump_table and destroy

The netlink interface to dump the connection tracking table has a race
when entries are deleted at the same time. A customer reported a crash
and the backtrace showed thatctnetlink_dump_table was running while a
conntrack entry was being destroyed.
(see https://bugzilla.vyatta.com/show_bug.cgi?id=6402).

According to RCU documentation, when using hlist_nulls the reader
must handle the case of seeing a deleted entry and not proceed
further down the linked list.  The old code would continue
which caused the scan to walk into the free list.

This patch uses locking (rather than RCU) for this operation which
is guaranteed safe, and no longer requires getting reference while
doing dump operation.

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
net/netfilter/nf_conntrack_netlink.c