summaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorLiping Zhang <zlpnobody@gmail.com>2017-04-29 21:59:49 +0800
committerPablo Neira Ayuso <pablo@netfilter.org>2017-05-01 11:48:49 +0200
commit8eeef2350453aa012d846457eb6ecd012a35d99b (patch)
tree75d509dec2c42b8ae71f8e511309802d6fc1053f /include/net
parentd1908ca8dcb1a045cf0626be4513a28933f46d5e (diff)
downloadlinux-8eeef2350453aa012d846457eb6ecd012a35d99b.tar.gz
linux-8eeef2350453aa012d846457eb6ecd012a35d99b.tar.bz2
linux-8eeef2350453aa012d846457eb6ecd012a35d99b.zip
netfilter: nf_ct_ext: invoke destroy even when ext is not attached
For NF_NAT_MANIP_SRC, we will insert the ct to the nat_bysource_table, then remove it from the nat_bysource_table via nat_extend->destroy. But now, the nat extension is attached on demand, so if the nat extension is not attached, we will not be notified when the ct is destroyed, i.e. we may fail to remove ct from the nat_bysource_table. So just keep it simple, even if the extension is not attached, we will still invoke the related ext->destroy. And this will also preserve the flexibility for the future extension. Fixes: 9a08ecfe74d7 ("netfilter: don't attach a nat extension by default") Signed-off-by: Liping Zhang <zlpnobody@gmail.com> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/netfilter/nf_conntrack_extend.h7
1 files changed, 1 insertions, 6 deletions
diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h
index b01f73fb4dcb..4944bc9153cf 100644
--- a/include/net/netfilter/nf_conntrack_extend.h
+++ b/include/net/netfilter/nf_conntrack_extend.h
@@ -69,12 +69,7 @@ static inline void *__nf_ct_ext_find(const struct nf_conn *ct, u8 id)
((id##_TYPE *)__nf_ct_ext_find((ext), (id)))
/* Destroy all relationships */
-void __nf_ct_ext_destroy(struct nf_conn *ct);
-static inline void nf_ct_ext_destroy(struct nf_conn *ct)
-{
- if (ct->ext)
- __nf_ct_ext_destroy(ct);
-}
+void nf_ct_ext_destroy(struct nf_conn *ct);
/* Free operation. If you want to free a object referred from private area,
* please implement __nf_ct_ext_free() and call it.