X-Git-Url: http://git.agner.ch/gitweb/?a=blobdiff_plain;f=crypto%2Falgif_hash.c;h=b4c24fe3dcfb5ed575350406c9dd7ece3c006aef;hb=8d3de01cfa37bfcf54f1d84eafb7db8530b74199;hp=1396ad0787fc6b84ebdd9a9d552ce7eaccf1e698;hpb=71f881ce5783482635d9534225cedd06b4fe21cb;p=linux-drm-fsl-dcu.git diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c index 1396ad0787fc..b4c24fe3dcfb 100644 --- a/crypto/algif_hash.c +++ b/crypto/algif_hash.c @@ -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) {