Commit bdd0292f authored by Guillaume Nault's avatar Guillaume Nault Committed by David S. Miller

l2tp: simplify pppol2tp_ioctl()

* Drop test on 'sk': sock->sk cannot be NULL, or pppox_ioctl() could
    not have called us.

  * Drop test on 'SOCK_DEAD' state: if this flag was set, the socket
    would be in the process of being released and no ioctl could be
    running anymore.

  * Drop test on 'PPPOX_*' state: we depend on ->sk_user_data to get
    the session structure. If it is non-NULL, then the socket is
    connected. Testing for PPPOX_* is redundant.

  * Retrieve session using ->sk_user_data directly, instead of going
    through pppol2tp_sock_to_session(). This avoids grabbing a useless
    reference on the socket.
Signed-off-by: default avatarGuillaume Nault <g.nault@alphalink.fr>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 01e28b92
...@@ -1179,28 +1179,12 @@ static int pppol2tp_tunnel_ioctl(struct l2tp_tunnel *tunnel, ...@@ -1179,28 +1179,12 @@ static int pppol2tp_tunnel_ioctl(struct l2tp_tunnel *tunnel,
static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd, static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
struct sock *sk = sock->sk;
struct l2tp_session *session; struct l2tp_session *session;
struct l2tp_tunnel *tunnel; struct l2tp_tunnel *tunnel;
int err;
if (!sk)
return 0;
err = -EBADF;
if (sock_flag(sk, SOCK_DEAD) != 0)
goto end;
err = -ENOTCONN;
if ((sk->sk_user_data == NULL) ||
(!(sk->sk_state & (PPPOX_CONNECTED | PPPOX_BOUND))))
goto end;
/* Get session context from the socket */ session = sock->sk->sk_user_data;
err = -EBADF; if (!session)
session = pppol2tp_sock_to_session(sk); return -ENOTCONN;
if (session == NULL)
goto end;
/* Special case: if session's session_id is zero, treat ioctl as a /* Special case: if session's session_id is zero, treat ioctl as a
* tunnel ioctl * tunnel ioctl
...@@ -1208,16 +1192,11 @@ static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd, ...@@ -1208,16 +1192,11 @@ static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd,
if ((session->session_id == 0) && if ((session->session_id == 0) &&
(session->peer_session_id == 0)) { (session->peer_session_id == 0)) {
tunnel = session->tunnel; tunnel = session->tunnel;
err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg);
goto end_put_sess;
}
err = pppol2tp_session_ioctl(session, cmd, arg); return pppol2tp_tunnel_ioctl(tunnel, cmd, arg);
}
end_put_sess: return pppol2tp_session_ioctl(session, cmd, arg);
sock_put(sk);
end:
return err;
} }
/***************************************************************************** /*****************************************************************************
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment