]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - crypto/algif_hash.c
crypto: algif_hash - Only export and import on sockets with data
[karo-tx-linux.git] / crypto / algif_hash.c
index 1396ad0787fc6b84ebdd9a9d552ce7eaccf1e698..b4c24fe3dcfb5ed575350406c9dd7ece3c006aef 100644 (file)
@@ -181,9 +181,14 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags)
        struct sock *sk2;
        struct alg_sock *ask2;
        struct hash_ctx *ctx2;
+       bool more;
        int err;
 
-       err = crypto_ahash_export(req, state);
+       lock_sock(sk);
+       more = ctx->more;
+       err = more ? crypto_ahash_export(req, state) : 0;
+       release_sock(sk);
+
        if (err)
                return err;
 
@@ -194,7 +199,10 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags)
        sk2 = newsock->sk;
        ask2 = alg_sk(sk2);
        ctx2 = ask2->private;
-       ctx2->more = 1;
+       ctx2->more = more;
+
+       if (!more)
+               return err;
 
        err = crypto_ahash_import(&ctx2->req, state);
        if (err) {