crypto: algif_hash - Fix result clobbering in recvmsg
authorHerbert Xu <herbert@gondor.apana.org.au>
Mon, 21 Nov 2016 07:34:00 +0000 (15:34 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 22 Nov 2016 07:02:24 +0000 (15:02 +0800)
Recently an init call was added to hash_recvmsg so as to reset
the hash state in case a sendmsg call was never made.

Unfortunately this ended up clobbering the result if the previous
sendmsg was done with a MSG_MORE flag.  This patch fixes it by
excluding that case when we make the init call.

Fixes: a8348bca2944 ("algif_hash - Fix NULL hash crash with shash")
Reported-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/algif_hash.c

index 05e21b46443300e76a0663d37c4a3cb071254270..d19b09cdf284d93dc63820a7cfc648217b220a7d 100644 (file)
@@ -214,7 +214,7 @@ static int hash_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 
        ahash_request_set_crypt(&ctx->req, NULL, ctx->result, 0);
 
-       if (!result) {
+       if (!result && !ctx->more) {
                err = af_alg_wait_for_completion(
                                crypto_ahash_init(&ctx->req),
                                &ctx->completion);