diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2015-08-21 01:10:19 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2015-08-21 06:09:05 +0200 |
commit | 81bf1c64e7fe08f956c74fe2b0f1fa6eb163bd91 (patch) | |
tree | 40370ca95f416fd88cb93e5c252623e282b3553e /net/core/request_sock.c | |
parent | 8cfd23e6740158817d2045915f6ea5a2daf11bce (diff) | |
parent | 938049e18dca57bcd2f93986fc1cbb5a83cdf027 (diff) | |
download | linux-81bf1c64e7fe08f956c74fe2b0f1fa6eb163bd91.tar.bz2 |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
Resolve conflicts with conntrack template fixes.
Conflicts:
net/netfilter/nf_conntrack_core.c
net/netfilter/nf_synproxy_core.c
net/netfilter/xt_CT.c
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/core/request_sock.c')
-rw-r--r-- | net/core/request_sock.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/core/request_sock.c b/net/core/request_sock.c index 87b22c0bc08c..b42f0e26f89e 100644 --- a/net/core/request_sock.c +++ b/net/core/request_sock.c @@ -103,10 +103,16 @@ void reqsk_queue_destroy(struct request_sock_queue *queue) spin_lock_bh(&queue->syn_wait_lock); while ((req = lopt->syn_table[i]) != NULL) { lopt->syn_table[i] = req->dl_next; + /* Because of following del_timer_sync(), + * we must release the spinlock here + * or risk a dead lock. + */ + spin_unlock_bh(&queue->syn_wait_lock); atomic_inc(&lopt->qlen_dec); - if (del_timer(&req->rsk_timer)) + if (del_timer_sync(&req->rsk_timer)) reqsk_put(req); reqsk_put(req); + spin_lock_bh(&queue->syn_wait_lock); } spin_unlock_bh(&queue->syn_wait_lock); } |