Merge tag 'tag-chrome-platform-for-v5.9' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / net / l2tp / l2tp_ppp.c
index 7404661..13c3153 100644 (file)
@@ -163,8 +163,11 @@ static inline struct l2tp_session *pppol2tp_sock_to_session(struct sock *sk)
                sock_put(sk);
                goto out;
        }
-
-       BUG_ON(session->magic != L2TP_SESSION_MAGIC);
+       if (WARN_ON(session->magic != L2TP_SESSION_MAGIC)) {
+               session = NULL;
+               sock_put(sk);
+               goto out;
+       }
 
 out:
        return session;
@@ -419,7 +422,8 @@ static void pppol2tp_session_destruct(struct sock *sk)
 
        if (session) {
                sk->sk_user_data = NULL;
-               BUG_ON(session->magic != L2TP_SESSION_MAGIC);
+               if (WARN_ON(session->magic != L2TP_SESSION_MAGIC))
+                       return;
                l2tp_session_dec_refcount(session);
        }
 }
@@ -802,8 +806,7 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr,
         * the internal context for use by ioctl() and sockopt()
         * handlers.
         */
-       if ((session->session_id == 0) &&
-           (session->peer_session_id == 0)) {
+       if (session->session_id == 0 && session->peer_session_id == 0) {
                error = 0;
                goto out_no_ppp;
        }
@@ -925,7 +928,7 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
        tunnel = session->tunnel;
 
        inet = inet_sk(tunnel->sock);
-       if ((tunnel->version == 2) && (tunnel->sock->sk_family == AF_INET)) {
+       if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET) {
                struct sockaddr_pppol2tp sp;
 
                len = sizeof(sp);
@@ -943,8 +946,7 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
                sp.pppol2tp.addr.sin_addr.s_addr = inet->inet_daddr;
                memcpy(uaddr, &sp, len);
 #if IS_ENABLED(CONFIG_IPV6)
-       } else if ((tunnel->version == 2) &&
-                  (tunnel->sock->sk_family == AF_INET6)) {
+       } else if (tunnel->version == 2 && tunnel->sock->sk_family == AF_INET6) {
                struct sockaddr_pppol2tpin6 sp;
 
                len = sizeof(sp);
@@ -962,8 +964,7 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr,
                memcpy(&sp.pppol2tp.addr.sin6_addr, &tunnel->sock->sk_v6_daddr,
                       sizeof(tunnel->sock->sk_v6_daddr));
                memcpy(uaddr, &sp, len);
-       } else if ((tunnel->version == 3) &&
-                  (tunnel->sock->sk_family == AF_INET6)) {
+       } else if (tunnel->version == 3 && tunnel->sock->sk_family == AF_INET6) {
                struct sockaddr_pppol2tpv3in6 sp;
 
                len = sizeof(sp);
@@ -1179,7 +1180,7 @@ static int pppol2tp_session_setsockopt(struct sock *sk,
 
        switch (optname) {
        case PPPOL2TP_SO_RECVSEQ:
-               if ((val != 0) && (val != 1)) {
+               if (val != 0 && val != 1) {
                        err = -EINVAL;
                        break;
                }
@@ -1190,7 +1191,7 @@ static int pppol2tp_session_setsockopt(struct sock *sk,
                break;
 
        case PPPOL2TP_SO_SENDSEQ:
-               if ((val != 0) && (val != 1)) {
+               if (val != 0 && val != 1) {
                        err = -EINVAL;
                        break;
                }
@@ -1208,7 +1209,7 @@ static int pppol2tp_session_setsockopt(struct sock *sk,
                break;
 
        case PPPOL2TP_SO_LNSMODE:
-               if ((val != 0) && (val != 1)) {
+               if (val != 0 && val != 1) {
                        err = -EINVAL;
                        break;
                }
@@ -1245,7 +1246,7 @@ static int pppol2tp_session_setsockopt(struct sock *sk,
  * session or the special tunnel type.
  */
 static int pppol2tp_setsockopt(struct socket *sock, int level, int optname,
-                              char __user *optval, unsigned int optlen)
+                              sockptr_t optval, unsigned int optlen)
 {
        struct sock *sk = sock->sk;
        struct l2tp_session *session;
@@ -1259,7 +1260,7 @@ static int pppol2tp_setsockopt(struct socket *sock, int level, int optname,
        if (optlen < sizeof(int))
                return -EINVAL;
 
-       if (get_user(val, (int __user *)optval))
+       if (copy_from_sockptr(&val, optval, sizeof(int)))
                return -EFAULT;
 
        err = -ENOTCONN;
@@ -1274,8 +1275,7 @@ static int pppol2tp_setsockopt(struct socket *sock, int level, int optname,
 
        /* Special case: if session_id == 0x0000, treat as operation on tunnel
         */
-       if ((session->session_id == 0) &&
-           (session->peer_session_id == 0)) {
+       if (session->session_id == 0 && session->peer_session_id == 0) {
                tunnel = session->tunnel;
                err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val);
        } else {
@@ -1392,8 +1392,7 @@ static int pppol2tp_getsockopt(struct socket *sock, int level, int optname,
                goto end;
 
        /* Special case: if session_id == 0x0000, treat as operation on tunnel */
-       if ((session->session_id == 0) &&
-           (session->peer_session_id == 0)) {
+       if (session->session_id == 0 && session->peer_session_id == 0) {
                tunnel = session->tunnel;
                err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val);
                if (err)
@@ -1479,7 +1478,11 @@ static void *pppol2tp_seq_start(struct seq_file *m, loff_t *offs)
        if (!pos)
                goto out;
 
-       BUG_ON(!m->private);
+       if (WARN_ON(!m->private)) {
+               pd = NULL;
+               goto out;
+       }
+
        pd = m->private;
        net = seq_file_net(m);