tcp: must block bh in __inet_twsk_hashdance()
__inet_twsk_hashdance() might be called from process context,
better block BH before acquiring bind hash and established locks
Fixes: c10d9310ed
("tcp: do not assume TCP code is non preemptible")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
46cc6e4976
commit
614bdd4d6e
1 changed files with 3 additions and 3 deletions
|
@ -94,7 +94,7 @@ static void inet_twsk_add_bind_node(struct inet_timewait_sock *tw,
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Enter the time wait state. This is called with locally disabled BH.
|
* Enter the time wait state.
|
||||||
* Essentially we whip up a timewait bucket, copy the relevant info into it
|
* Essentially we whip up a timewait bucket, copy the relevant info into it
|
||||||
* from the SK, and mess with hash chains and list linkage.
|
* from the SK, and mess with hash chains and list linkage.
|
||||||
*/
|
*/
|
||||||
|
@ -112,7 +112,7 @@ void __inet_twsk_hashdance(struct inet_timewait_sock *tw, struct sock *sk,
|
||||||
*/
|
*/
|
||||||
bhead = &hashinfo->bhash[inet_bhashfn(twsk_net(tw), inet->inet_num,
|
bhead = &hashinfo->bhash[inet_bhashfn(twsk_net(tw), inet->inet_num,
|
||||||
hashinfo->bhash_size)];
|
hashinfo->bhash_size)];
|
||||||
spin_lock(&bhead->lock);
|
spin_lock_bh(&bhead->lock);
|
||||||
tw->tw_tb = icsk->icsk_bind_hash;
|
tw->tw_tb = icsk->icsk_bind_hash;
|
||||||
WARN_ON(!icsk->icsk_bind_hash);
|
WARN_ON(!icsk->icsk_bind_hash);
|
||||||
inet_twsk_add_bind_node(tw, &tw->tw_tb->owners);
|
inet_twsk_add_bind_node(tw, &tw->tw_tb->owners);
|
||||||
|
@ -138,7 +138,7 @@ void __inet_twsk_hashdance(struct inet_timewait_sock *tw, struct sock *sk,
|
||||||
if (__sk_nulls_del_node_init_rcu(sk))
|
if (__sk_nulls_del_node_init_rcu(sk))
|
||||||
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
|
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
|
||||||
|
|
||||||
spin_unlock(lock);
|
spin_unlock_bh(lock);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(__inet_twsk_hashdance);
|
EXPORT_SYMBOL_GPL(__inet_twsk_hashdance);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue