diff options
Diffstat (limited to 'net/tipc/server.c')
| -rw-r--r-- | net/tipc/server.c | 11 | 
1 files changed, 5 insertions, 6 deletions
diff --git a/net/tipc/server.c b/net/tipc/server.c index 7a0af2dc0406..215849ce453d 100644 --- a/net/tipc/server.c +++ b/net/tipc/server.c @@ -138,28 +138,28 @@ static void sock_data_ready(struct sock *sk)  {  	struct tipc_conn *con; -	read_lock(&sk->sk_callback_lock); +	read_lock_bh(&sk->sk_callback_lock);  	con = sock2con(sk);  	if (con && test_bit(CF_CONNECTED, &con->flags)) {  		conn_get(con);  		if (!queue_work(con->server->rcv_wq, &con->rwork))  			conn_put(con);  	} -	read_unlock(&sk->sk_callback_lock); +	read_unlock_bh(&sk->sk_callback_lock);  }  static void sock_write_space(struct sock *sk)  {  	struct tipc_conn *con; -	read_lock(&sk->sk_callback_lock); +	read_lock_bh(&sk->sk_callback_lock);  	con = sock2con(sk);  	if (con && test_bit(CF_CONNECTED, &con->flags)) {  		conn_get(con);  		if (!queue_work(con->server->send_wq, &con->swork))  			conn_put(con);  	} -	read_unlock(&sk->sk_callback_lock); +	read_unlock_bh(&sk->sk_callback_lock);  }  static void tipc_register_callbacks(struct socket *sock, struct tipc_conn *con) @@ -418,13 +418,12 @@ static struct outqueue_entry *tipc_alloc_entry(void *data, int len)  	if (!entry)  		return NULL; -	buf = kmalloc(len, GFP_ATOMIC); +	buf = kmemdup(data, len, GFP_ATOMIC);  	if (!buf) {  		kfree(entry);  		return NULL;  	} -	memcpy(buf, data, len);  	entry->iov.iov_base = buf;  	entry->iov.iov_len = len;  |