lkml.org 
[lkml]   [2016]   [Feb]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13.y-ckt 095/136] crypto: af_alg - Allow af_af_alg_release_parent to be called on nokey path
    Date
    3.13.11-ckt34 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    From: Herbert Xu <herbert@gondor.apana.org.au>

    commit 6a935170a980024dd29199e9dbb5c4da4767a1b9 upstream.

    This patch allows af_alg_release_parent to be called even for
    nokey sockets.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    crypto/af_alg.c | 9 ++++++++-
    include/crypto/if_alg.h | 1 +
    2 files changed, 9 insertions(+), 1 deletion(-)

    diff --git a/crypto/af_alg.c b/crypto/af_alg.c
    index afe3dad..d86ef33 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);
    @@ -258,8 +264,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;
    @@ -292,6 +298,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;
    diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
    index 9e6a2f3..bfefd81 100644
    --- a/include/crypto/if_alg.h
    +++ b/include/crypto/if_alg.h
    @@ -31,6 +31,7 @@ struct alg_sock {
    struct sock *parent;

    unsigned int refcnt;
    + unsigned int nokey_refcnt;

    const struct af_alg_type *type;
    void *private;
    --
    1.9.1
    \
     
     \ /
      Last update: 2016-02-02 20:01    [W:3.681 / U:0.296 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site