path: root/include/net/netfilter/nf_conntrack_extend.h
diff options
authorFlorian Westphal <fw@strlen.de>2019-10-15 15:19:15 +0200
committerPablo Neira Ayuso <pablo@netfilter.org>2019-10-17 11:47:02 +0200
commit2ad9d7747c10d17cc06447944fefd4c29ae11eb1 (patch)
tree344f7991b721a5d72a33fd1152857e92e5eeb16a /include/net/netfilter/nf_conntrack_extend.h
parentnetfilter: ctnetlink: don't dump ct extensions of unconfirmed conntracks (diff)
netfilter: conntrack: free extension area immediately
Instead of waiting for rcu grace period just free it directly. This is safe because conntrack lookup doesn't consider extensions. Other accesses happen while ct->ext can't be free'd, either because a ct refcount was taken or because the conntrack hash bucket lock or the dying list spinlock have been taken. This allows to remove __krealloc in a followup patch, netfilter was the only user. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'include/net/netfilter/nf_conntrack_extend.h')
1 files changed, 0 insertions, 10 deletions
diff --git a/include/net/netfilter/nf_conntrack_extend.h b/include/net/netfilter/nf_conntrack_extend.h
index 112a6f40dfaf..5ae5295aa46d 100644
--- a/include/net/netfilter/nf_conntrack_extend.h
+++ b/include/net/netfilter/nf_conntrack_extend.h
@@ -43,7 +43,6 @@ enum nf_ct_ext_id {
/* Extensions: optional stuff which isn't permanently in struct. */
struct nf_ct_ext {
- struct rcu_head rcu;
u8 offset[NF_CT_EXT_NUM];
u8 len;
char data[0];
@@ -72,15 +71,6 @@ static inline void *__nf_ct_ext_find(const struct nf_conn *ct, u8 id)
/* Destroy all relationships */
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.
- */
-static inline void nf_ct_ext_free(struct nf_conn *ct)
- if (ct->ext)
- kfree_rcu(ct->ext, rcu);
/* Add this type, returns pointer to data or NULL. */
void *nf_ct_ext_add(struct nf_conn *ct, enum nf_ct_ext_id id, gfp_t gfp);