diff options
Diffstat (limited to 'drivers/net/tun.c')
| -rw-r--r-- | drivers/net/tun.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/tun.c b/drivers/net/tun.c index b1878faea397..88bb8cc3555b 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -1040,7 +1040,7 @@ static unsigned int tun_chr_poll(struct file *file, poll_table *wait)  		mask |= POLLIN | POLLRDNORM;  	if (sock_writeable(sk) || -	    (!test_and_set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags) && +	    (!test_and_set_bit(SOCKWQ_ASYNC_NOSPACE, &sk->sk_socket->flags) &&  	     sock_writeable(sk)))  		mask |= POLLOUT | POLLWRNORM; @@ -1095,6 +1095,9 @@ static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,  	u32 rxhash;  	ssize_t n; +	if (!(tun->dev->flags & IFF_UP)) +		return -EIO; +  	if (!(tun->flags & IFF_NO_PI)) {  		if (len < sizeof(pi))  			return -EINVAL; @@ -1488,7 +1491,7 @@ static void tun_sock_write_space(struct sock *sk)  	if (!sock_writeable(sk))  		return; -	if (!test_and_clear_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags)) +	if (!test_and_clear_bit(SOCKWQ_ASYNC_NOSPACE, &sk->sk_socket->flags))  		return;  	wqueue = sk_sleep(sk);  | 
