Merge tag 'for-v5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power...
[linux-2.6-microblaze.git] / net / l2tp / l2tp_ppp.c
index e58fe7e..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);
        }
 }
@@ -1242,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;
@@ -1256,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;
@@ -1474,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);