diff options
Diffstat (limited to 'net/dccp/minisocks.c')
| -rw-r--r-- | net/dccp/minisocks.c | 6 | 
1 files changed, 6 insertions, 0 deletions
| diff --git a/net/dccp/minisocks.c b/net/dccp/minisocks.c index abd07a443219..178bb9833311 100644 --- a/net/dccp/minisocks.c +++ b/net/dccp/minisocks.c @@ -57,10 +57,16 @@ void dccp_time_wait(struct sock *sk, int state, int timeo)  		if (state == DCCP_TIME_WAIT)  			timeo = DCCP_TIMEWAIT_LEN; +		/* tw_timer is pinned, so we need to make sure BH are disabled +		 * in following section, otherwise timer handler could run before +		 * we complete the initialization. +		 */ +		local_bh_disable();  		inet_twsk_schedule(tw, timeo);  		/* Linkage updates. */  		__inet_twsk_hashdance(tw, sk, &dccp_hashinfo);  		inet_twsk_put(tw); +		local_bh_enable();  	} else {  		/* Sorry, if we're out of memory, just CLOSE this  		 * socket up.  We've got bigger problems than |