xt_hashlimit: fix locking
Eric Dumazet [Wed, 17 Feb 2010 06:43:47 +0000 (06:43 +0000)]
Commit 2eff25c18c3d332d3c4dd98f2ac9b7114e9771b0
(netfilter: xt_hashlimit: fix race condition and simplify locking)
added a mutex deadlock :
htable_create() is called with hashlimit_mutex already locked

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

net/netfilter/xt_hashlimit.c

index e47fb80..d952806 100644 (file)
@@ -262,9 +262,7 @@ static int htable_create_v0(struct net *net, struct xt_hashlimit_info *minfo, u_
        hinfo->timer.expires = jiffies + msecs_to_jiffies(hinfo->cfg.gc_interval);
        add_timer(&hinfo->timer);
 
-       mutex_lock(&hashlimit_mutex);
        hlist_add_head(&hinfo->node, &hashlimit_net->htables);
-       mutex_unlock(&hashlimit_mutex);
 
        return 0;
 }
@@ -327,9 +325,7 @@ static int htable_create(struct net *net, struct xt_hashlimit_mtinfo1 *minfo,
        hinfo->timer.expires = jiffies + msecs_to_jiffies(hinfo->cfg.gc_interval);
        add_timer(&hinfo->timer);
 
-       mutex_lock(&hashlimit_mutex);
        hlist_add_head(&hinfo->node, &hashlimit_net->htables);
-       mutex_unlock(&hashlimit_mutex);
 
        return 0;
 }