diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2009-04-06 11:47:20 -0400 |
---|---|---|
committer | Patrick McHardy <kaber@trash.net> | 2009-04-06 11:47:20 -0400 |
commit | 83731671d9e6878c0a05d309c68fb71c16d3235a (patch) | |
tree | e74df7769d32c4aad6a080796f32a7e09009a7ae /include/net | |
parent | 3ae16f13027c26cb4c227392116c2027524a6444 (diff) |
netfilter: ctnetlink: fix regression in expectation handling
This patch fixes a regression (introduced by myself in commit 19abb7b:
netfilter: ctnetlink: deliver events for conntracks changed from
userspace) that results in an expectation re-insertion since
__nf_ct_expect_check() may return 0 for expectation timer refreshing.
This patch also removes a unnecessary refcount bump that
pretended to avoid a possible race condition with event delivery
and expectation timers (as said, not needed since we hold a
reference to the object since until we finish the expectation
setup). This also merges nf_ct_expect_related_report() and
nf_ct_expect_related() which look basically the same.
Reported-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: Patrick McHardy <kaber@trash.net>
Diffstat (limited to 'include/net')
-rw-r--r-- | include/net/netfilter/nf_conntrack_expect.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/include/net/netfilter/nf_conntrack_expect.h b/include/net/netfilter/nf_conntrack_expect.h index ab17a159ac66..a9652806d0df 100644 --- a/include/net/netfilter/nf_conntrack_expect.h +++ b/include/net/netfilter/nf_conntrack_expect.h | |||
@@ -99,9 +99,12 @@ void nf_ct_expect_init(struct nf_conntrack_expect *, unsigned int, u_int8_t, | |||
99 | const union nf_inet_addr *, | 99 | const union nf_inet_addr *, |
100 | u_int8_t, const __be16 *, const __be16 *); | 100 | u_int8_t, const __be16 *, const __be16 *); |
101 | void nf_ct_expect_put(struct nf_conntrack_expect *exp); | 101 | void nf_ct_expect_put(struct nf_conntrack_expect *exp); |
102 | int nf_ct_expect_related(struct nf_conntrack_expect *expect); | ||
103 | int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, | 102 | int nf_ct_expect_related_report(struct nf_conntrack_expect *expect, |
104 | u32 pid, int report); | 103 | u32 pid, int report); |
104 | static inline int nf_ct_expect_related(struct nf_conntrack_expect *expect) | ||
105 | { | ||
106 | return nf_ct_expect_related_report(expect, 0, 0); | ||
107 | } | ||
105 | 108 | ||
106 | #endif /*_NF_CONNTRACK_EXPECT_H*/ | 109 | #endif /*_NF_CONNTRACK_EXPECT_H*/ |
107 | 110 | ||