diff options
| author | phil.turnbull@oracle.com <phil.turnbull@oracle.com> | 2016-07-26 15:14:35 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2016-07-26 18:19:46 -0400 |
| commit | 4ac36a4adaf80013a60013d6f829f5863d5d0e05 (patch) | |
| tree | c46aae34abc1e0b5184dd020d168e22facf56015 | |
| parent | 0a91605cda883f7a25b1e7fa8cdc3f633ae8f8e0 (diff) | |
l2tp: Correctly return -EBADF from pppol2tp_getname.
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>
| -rw-r--r-- | net/l2tp/l2tp_ppp.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c index 652c250b9a3b..d9560aa2dba3 100644 --- a/net/l2tp/l2tp_ppp.c +++ b/net/l2tp/l2tp_ppp.c | |||
| @@ -866,10 +866,8 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 866 | 866 | ||
| 867 | pls = l2tp_session_priv(session); | 867 | pls = l2tp_session_priv(session); |
| 868 | tunnel = l2tp_sock_to_tunnel(pls->tunnel_sock); | 868 | tunnel = l2tp_sock_to_tunnel(pls->tunnel_sock); |
| 869 | if (tunnel == NULL) { | 869 | if (tunnel == NULL) |
| 870 | error = -EBADF; | ||
| 871 | goto end_put_sess; | 870 | goto end_put_sess; |
| 872 | } | ||
| 873 | 871 | ||
| 874 | inet = inet_sk(tunnel->sock); | 872 | inet = inet_sk(tunnel->sock); |
| 875 | if ((tunnel->version == 2) && (tunnel->sock->sk_family == AF_INET)) { | 873 | if ((tunnel->version == 2) && (tunnel->sock->sk_family == AF_INET)) { |
| @@ -947,12 +945,11 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 947 | } | 945 | } |
| 948 | 946 | ||
| 949 | *usockaddr_len = len; | 947 | *usockaddr_len = len; |
| 948 | error = 0; | ||
| 950 | 949 | ||
| 951 | sock_put(pls->tunnel_sock); | 950 | sock_put(pls->tunnel_sock); |
| 952 | end_put_sess: | 951 | end_put_sess: |
| 953 | sock_put(sk); | 952 | sock_put(sk); |
| 954 | error = 0; | ||
| 955 | |||
| 956 | end: | 953 | end: |
| 957 | return error; | 954 | return error; |
| 958 | } | 955 | } |
