diff options
Diffstat (limited to 'net/decnet/af_decnet.c')
| -rw-r--r-- | net/decnet/af_decnet.c | 11 | 
1 files changed, 7 insertions, 4 deletions
diff --git a/net/decnet/af_decnet.c b/net/decnet/af_decnet.c index 675cf94e04f8..13d6b1a6e0fc 100644 --- a/net/decnet/af_decnet.c +++ b/net/decnet/af_decnet.c @@ -678,6 +678,9 @@ static int dn_create(struct net *net, struct socket *sock, int protocol,  {  	struct sock *sk; +	if (protocol < 0 || protocol > SK_PROTOCOL_MAX) +		return -EINVAL; +  	if (!net_eq(net, &init_net))  		return -EAFNOSUPPORT; @@ -1747,9 +1750,9 @@ static int dn_recvmsg(struct socket *sock, struct msghdr *msg, size_t size,  		}  		prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); -		set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); +		sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);  		sk_wait_event(sk, &timeo, dn_data_ready(sk, queue, flags, target)); -		clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); +		sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);  		finish_wait(sk_sleep(sk), &wait);  	} @@ -2004,10 +2007,10 @@ static int dn_sendmsg(struct socket *sock, struct msghdr *msg, size_t size)  			}  			prepare_to_wait(sk_sleep(sk), &wait, TASK_INTERRUPTIBLE); -			set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); +			sk_set_bit(SOCKWQ_ASYNC_WAITDATA, sk);  			sk_wait_event(sk, &timeo,  				      !dn_queue_too_long(scp, queue, flags)); -			clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags); +			sk_clear_bit(SOCKWQ_ASYNC_WAITDATA, sk);  			finish_wait(sk_sleep(sk), &wait);  			continue;  		}  | 
