crypto: ahash - Fix EINPROGRESS notification callback
authorHerbert Xu <herbert@gondor.apana.org.au>
Mon, 10 Apr 2017 09:27:57 +0000 (17:27 +0800)
committerSasha Levin <alexander.levin@verizon.com>
Wed, 17 May 2017 19:08:22 +0000 (15:08 -0400)
commitce0e21e44f9766aeef6a8c18a750ef9d94c1ca8c
tree513578f2986fe58e7e38b4b558d4ce7f68940ce5
parent4ee5f3baad194e4850c80f31af72406a5faa5639
crypto: ahash - Fix EINPROGRESS notification callback

[ Upstream commit ef0579b64e93188710d48667cb5e014926af9f1b ]

The ahash API modifies the request's callback function in order
to clean up after itself in some corner cases (unaligned final
and missing finup).

When the request is complete ahash will restore the original
callback and everything is fine.  However, when the request gets
an EBUSY on a full queue, an EINPROGRESS callback is made while
the request is still ongoing.

In this case the ahash API will incorrectly call its own callback.

This patch fixes the problem by creating a temporary request
object on the stack which is used to relay EINPROGRESS back to
the original completion function.

This patch also adds code to preserve the original flags value.

Fixes: ab6bf4e5e5e4 ("crypto: hash - Fix the pointer voodoo in...")
Cc: <stable@vger.kernel.org>
Reported-by: Sabrina Dubroca <sd@queasysnail.net>
Tested-by: Sabrina Dubroca <sd@queasysnail.net>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
crypto/ahash.c
include/crypto/internal/hash.h