tun: return proper error code from tun_do_read
authorAlex Gartrell <agartrell@fb.com>
Fri, 26 Dec 2014 07:22:49 +0000 (23:22 -0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 31 Dec 2014 19:14:54 +0000 (14:14 -0500)
Instead of -1 with EAGAIN, read on a O_NONBLOCK tun fd will return 0.  This
fixes this by properly returning the error code from __skb_recv_datagram.

Signed-off-by: Alex Gartrell <agartrell@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tun.c

index df5e948718447f7dfd2631574feca959103807fe..c0df872f5b8c53818ca7b7c130f1fcb0fb972e89 100644 (file)
@@ -1380,7 +1380,7 @@ static ssize_t tun_do_read(struct tun_struct *tun, struct tun_file *tfile,
        skb = __skb_recv_datagram(tfile->socket.sk, noblock ? MSG_DONTWAIT : 0,
                                  &peeked, &off, &err);
        if (!skb)
-               return 0;
+               return err;
 
        ret = tun_put_user(tun, tfile, skb, to);
        if (unlikely(ret < 0))