remove write lock in ip_conntrack_hash_insert
Subsystems (2)
Pablo Neira Ayuso
maintainerPATCH 4/10 remove write lock in ip_conntrack_hash_insert
The insertion into hashes is composed of two steps: insertion itself and timer activation, this two steps process must be atomic. Therefore, the ip_conntrack_hash_insert call and timer activation must be done inside appropiate write lock.
This patch depends on [PATCH 3/10]
Signed-off-by Pablo Neira Ayuso <[email protected]>
Signature · 1 line
The dawn of the fourth age of Linux firewalling is coming; a time of great struggle and heroic deeds -- J.Kadlecsik got inspired by J.Morris
[CONNTRACK] remove write lock in ip_conntrack_hash_insert
The insertion into hashes is composed of two steps: insertion itself and timer activation, this two steps process must be atomic. Therefore, the ip_conntrack_hash_insert call and timer activation must be done inside appropiate write lock.
Signed-off-by Pablo Neira Ayuso <[email protected]>
net/ipv4/netfilter/ip_conntrack_core.c +2 -2
@@ -428,12 +428,12 @@ void ip_conntrack_hash_insert(struct ip_ {unsigned int hash, repl_hash; +ASSERT_WRITE_LOCK (&ip_conntrack_lock); + hash =hash_conntrack (&ct->tuplehash[IP_CT_DIR_ORIGINAL ].tuple); repl_hash =hash_conntrack (&ct->tuplehash[IP_CT_DIR_REPLY ].tuple); -write_lock_bh (&ip_conntrack_lock);__ip_conntrack_hash_insert (ct, hash, repl_hash); -write_unlock_bh (&ip_conntrack_lock); }/* Confirm a connection given skb; places it in hash table */
net/netfilter/nf_conntrack_core.c +2 -2
@@ -678,12 +678,12 @@ void nf_conntrack_hash_insert(struct nf_ {unsigned int hash, repl_hash; +ASSERT_WRITE_LOCK (&nf_conntrack_lock); + hash =hash_conntrack (&ct->tuplehash[IP_CT_DIR_ORIGINAL ].tuple); repl_hash =hash_conntrack (&ct->tuplehash[IP_CT_DIR_REPLY ].tuple); -write_lock_bh (&nf_conntrack_lock);__nf_conntrack_hash_insert (ct, hash, repl_hash); -write_unlock_bh (&nf_conntrack_lock); }/* Confirm a connection given skb; places it in hash table */