netfilter: nfnetlink_queue: resolve clash for unconfirmed conntracks
authorPablo Neira Ayuso <pablo@netfilter.org>
Wed, 23 May 2018 07:17:24 +0000 (09:17 +0200)
committerPablo Neira Ayuso <pablo@netfilter.org>
Wed, 23 May 2018 07:26:08 +0000 (09:26 +0200)
commit368982cd7d1bd41cd39049c794990aca3770db44
tree8b985310c86b4aa4ac837e4c66b3941371989429
parent2c205dd3981f79cef097207ba9c61c2260812f39
netfilter: nfnetlink_queue: resolve clash for unconfirmed conntracks

In nfqueue, two consecutive skbuffs may race to create the conntrack
entry. Hence, the one that loses the race gets dropped due to clash in
the insertion into the hashes from the nf_conntrack_confirm() path.

This patch adds a new nf_conntrack_update() function which searches for
possible clashes and resolve them. NAT mangling for the packet losing
race is corrected by using the conntrack information that won race.

In order to avoid direct module dependencies with conntrack and NAT, the
nf_ct_hook and nf_nat_hook structures are used for this purpose.

Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
include/linux/netfilter.h
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_nat_core.c
net/netfilter/nfnetlink_queue.c