aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2012-08-29 16:25:49 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-10-21 09:17:11 -0700
commit716362d00bff2312c0afffacbb9d4c9deb3faa96 (patch)
tree1ec9a8e1e8fab99d57de9956d518d052b4459862 /include
parente3c418797de13ba083bede8192a7873483feaf1d (diff)
downloadkernel_samsung_smdk4412-716362d00bff2312c0afffacbb9d4c9deb3faa96.zip
kernel_samsung_smdk4412-716362d00bff2312c0afffacbb9d4c9deb3faa96.tar.gz
kernel_samsung_smdk4412-716362d00bff2312c0afffacbb9d4c9deb3faa96.tar.bz2
netfilter: nf_conntrack: fix racy timer handling with reliable events
commit 5b423f6a40a0327f9d40bc8b97ce9be266f74368 upstream. Existing code assumes that del_timer returns true for alive conntrack entries. However, this is not true if reliable events are enabled. In that case, del_timer may return true for entries that were just inserted in the dying list. Note that packets / ctnetlink may hold references to conntrack entries that were just inserted to such list. This patch fixes the issue by adding an independent timer for event delivery. This increases the size of the ecache extension. Still we can revisit this later and use variable size extensions to allocate this area on demand. Tested-by: Oliver Smith <olipro@8.c.9.b.0.7.4.0.1.0.0.2.ip6.arpa> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Acked-by: David Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'include')
-rw-r--r--include/net/netfilter/nf_conntrack_ecache.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/net/netfilter/nf_conntrack_ecache.h b/include/net/netfilter/nf_conntrack_ecache.h
index 4283508..3a0feb1 100644
--- a/include/net/netfilter/nf_conntrack_ecache.h
+++ b/include/net/netfilter/nf_conntrack_ecache.h
@@ -18,6 +18,7 @@ struct nf_conntrack_ecache {
u16 ctmask; /* bitmask of ct events to be delivered */
u16 expmask; /* bitmask of expect events to be delivered */
u32 pid; /* netlink pid of destroyer */
+ struct timer_list timeout;
};
static inline struct nf_conntrack_ecache *