diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2011-06-27 15:45:19 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2011-06-30 07:44:06 +0800 |
commit | 8ab917010e95bf4db05457cc455b3e178787c1fb (patch) | |
tree | 2626d6081ff0dab9ce0cd2de50946a6e6464a16d | |
parent | d6bdf4bc032abb66238c87463d89fe1275bebef9 (diff) | |
download | linux-crypto-8ab917010e95bf4db05457cc455b3e178787c1fb.tar.gz linux-crypto-8ab917010e95bf4db05457cc455b3e178787c1fb.zip |
crypto: algif_hash - Handle initial af_alg_make_sg error correctly
When the first call to af_alg_make_sg fails, we may return garbage
instead of the real error. This patch fixes it by setting the error
if "copied" is zero.
Based on a patch by Jesper Juhl.
Reported-by: Jesper Juhl <jj@chaosbits.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | crypto/algif_hash.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c index 62122a1a..ef5356cd 100644 --- a/crypto/algif_hash.c +++ b/crypto/algif_hash.c @@ -68,8 +68,10 @@ static int hash_sendmsg(struct kiocb *unused, struct socket *sock, int newlen; newlen = af_alg_make_sg(&ctx->sgl, from, len, 0); - if (newlen < 0) + if (newlen < 0) { + err = copied ? 0 : newlen; goto unlock; + } ahash_request_set_crypt(&ctx->req, ctx->sgl.sg, NULL, newlen); |