l2tp: Correctly return -EBADF from pppol2tp_getname.
authorphil.turnbull@oracle.com <phil.turnbull@oracle.com>
Tue, 26 Jul 2016 19:14:35 +0000 (15:14 -0400)
committerBen Hutchings <ben@decadent.org.uk>
Sun, 20 Nov 2016 01:01:28 +0000 (01:01 +0000)
commit 4ac36a4adaf80013a60013d6f829f5863d5d0e05 upstream.

If 'tunnel' is NULL we should return -EBADF but the 'end_put_sess' path
unconditionally sets 'error' back to zero. Rework the error path so it
more closely matches pppol2tp_sendmsg.

Fixes: fd558d186df2 ("l2tp: Split pppol2tp patch into separate l2tp and ppp parts")
Signed-off-by: Phil Turnbull <phil.turnbull@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
net/l2tp/l2tp_ppp.c

index 767bf4a..0417743 100644 (file)
@@ -914,10 +914,8 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
 
        pls = l2tp_session_priv(session);
        tunnel = l2tp_sock_to_tunnel(pls->tunnel_sock);
-       if (tunnel == NULL) {
-               error = -EBADF;
+       if (tunnel == NULL)
                goto end_put_sess;
-       }
 
        inet = inet_sk(tunnel->sock);
        if (tunnel->version == 2) {
@@ -955,12 +953,11 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
        }
 
        *usockaddr_len = len;
+       error = 0;
 
        sock_put(pls->tunnel_sock);
 end_put_sess:
        sock_put(sk);
-       error = 0;
-
 end:
        return error;
 }