diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2016-01-13 14:59:03 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2016-01-18 18:16:32 +0800 |
commit | e8ae341ff042e81d49f021aeb53a51a7dbb68e72 (patch) | |
tree | 7baf6fb87f58ade2a6116a4fb36bc715d074fb41 /crypto | |
parent | da014d710016fa4d23b1fda4eb7be878e9c8b26b (diff) | |
download | linux-crypto-e8ae341ff042e81d49f021aeb53a51a7dbb68e72.tar.gz linux-crypto-e8ae341ff042e81d49f021aeb53a51a7dbb68e72.zip |
crypto: af_alg - Allow af_af_alg_release_parent to be called on nokey path
This patch allows af_alg_release_parent to be called even for
nokey sockets.
Cc: stable@vger.kernel.org
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | crypto/af_alg.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/crypto/af_alg.c b/crypto/af_alg.c index 6566d2eb..e7cb8367 100644 --- a/crypto/af_alg.c +++ b/crypto/af_alg.c @@ -133,6 +133,12 @@ void af_alg_release_parent(struct sock *sk) bool last; sk = ask->parent; + + if (ask->nokey_refcnt && !ask->refcnt) { + sock_put(sk); + return; + } + ask = alg_sk(sk); lock_sock(sk); @@ -268,8 +274,8 @@ int af_alg_accept(struct sock *sk, struct socket *newsock) struct alg_sock *ask = alg_sk(sk); const struct af_alg_type *type; struct sock *sk2; + unsigned int nokey; int err; - bool nokey; lock_sock(sk); type = ask->type; @@ -302,6 +308,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock) sock_hold(sk); alg_sk(sk2)->parent = sk; alg_sk(sk2)->type = type; + alg_sk(sk2)->nokey_refcnt = nokey; newsock->ops = type->ops; newsock->state = SS_CONNECTED; |