forked from Minki/linux
netfilter: ipt_MASQUERADE: remove redundant rwlock
The lock "protects" an assignment and a comparision of an integer. When the caller of device_cmp() evaluates the result, nat->masq_index may already have been changed (regardless if the lock is there or not). So, the lock either has to be held during nf_ct_iterate_cleanup(), or can be removed. This does the latter. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
10662aa308
commit
17f2f52be0
@ -27,9 +27,6 @@ MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Netfilter Core Team <coreteam@netfilter.org>");
|
||||
MODULE_DESCRIPTION("Xtables: automatic-address SNAT");
|
||||
|
||||
/* Lock protects masq region inside conntrack */
|
||||
static DEFINE_RWLOCK(masq_lock);
|
||||
|
||||
/* FIXME: Multiple targets. --RR */
|
||||
static bool masquerade_tg_check(const struct xt_tgchk_param *par)
|
||||
{
|
||||
@ -79,9 +76,7 @@ masquerade_tg(struct sk_buff *skb, const struct xt_target_param *par)
|
||||
return NF_DROP;
|
||||
}
|
||||
|
||||
write_lock_bh(&masq_lock);
|
||||
nat->masq_index = par->out->ifindex;
|
||||
write_unlock_bh(&masq_lock);
|
||||
|
||||
/* Transfer from original range. */
|
||||
newrange = ((struct nf_nat_range)
|
||||
@ -97,16 +92,11 @@ static int
|
||||
device_cmp(struct nf_conn *i, void *ifindex)
|
||||
{
|
||||
const struct nf_conn_nat *nat = nfct_nat(i);
|
||||
int ret;
|
||||
|
||||
if (!nat)
|
||||
return 0;
|
||||
|
||||
read_lock_bh(&masq_lock);
|
||||
ret = (nat->masq_index == (int)(long)ifindex);
|
||||
read_unlock_bh(&masq_lock);
|
||||
|
||||
return ret;
|
||||
return nat->masq_index == (int)(long)ifindex;
|
||||
}
|
||||
|
||||
static int masq_device_event(struct notifier_block *this,
|
||||
|
Loading…
Reference in New Issue
Block a user