Revert: "crypto: af_alg - Disallow bind/setkey/... after accept(2)"
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / crypto / af_alg.c
index 0ca108f3c84084278c026173302cccfdce0a487f..1aaa555fab56b6e6fa127fe546e14d7fa69b4a40 100644 (file)
@@ -125,23 +125,6 @@ int af_alg_release(struct socket *sock)
 }
 EXPORT_SYMBOL_GPL(af_alg_release);
 
-void af_alg_release_parent(struct sock *sk)
-{
-       struct alg_sock *ask = alg_sk(sk);
-       bool last;
-
-       sk = ask->parent;
-       ask = alg_sk(sk);
-
-       lock_sock(sk);
-       last = !--ask->refcnt;
-       release_sock(sk);
-
-       if (last)
-               sock_put(sk);
-}
-EXPORT_SYMBOL_GPL(af_alg_release_parent);
-
 static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
 {
        struct sock *sk = sock->sk;
@@ -149,7 +132,6 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
        struct sockaddr_alg *sa = (void *)uaddr;
        const struct af_alg_type *type;
        void *private;
-       int err;
 
        if (sock->state == SS_CONNECTED)
                return -EINVAL;
@@ -175,22 +157,16 @@ static int alg_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
                return PTR_ERR(private);
        }
 
-       err = -EBUSY;
        lock_sock(sk);
-       if (ask->refcnt)
-               goto unlock;
 
        swap(ask->type, type);
        swap(ask->private, private);
 
-       err = 0;
-
-unlock:
        release_sock(sk);
 
        alg_do_release(type, private);
 
-       return err;
+       return 0;
 }
 
 static int alg_setkey(struct sock *sk, char __user *ukey,
@@ -223,15 +199,11 @@ static int alg_setsockopt(struct socket *sock, int level, int optname,
        struct sock *sk = sock->sk;
        struct alg_sock *ask = alg_sk(sk);
        const struct af_alg_type *type;
-       int err = -EBUSY;
+       int err = -ENOPROTOOPT;
 
        lock_sock(sk);
-       if (ask->refcnt)
-               goto unlock;
-
        type = ask->type;
 
-       err = -ENOPROTOOPT;
        if (level != SOL_ALG || !type)
                goto unlock;
 
@@ -280,8 +252,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock)
 
        sk2->sk_family = PF_ALG;
 
-       if (!ask->refcnt++)
-               sock_hold(sk);
+       sock_hold(sk);
        alg_sk(sk2)->parent = sk;
        alg_sk(sk2)->type = type;