On Friday, December 20, 2013 at 01:04:08 PM, Herbert Xu wrote: > On Tue, Dec 10, 2013 at 08:26:19PM +0100, Marek Vasut wrote: > > When finishing the ahash request, the ahash_op_unaligned_done() will > > call complete() on the request. Yet, this will not call the correct > > complete callback. The correct complete callback was previously stored > > in the requests' private data, as seen in ahash_op_unaligned(). This > > patch restores the correct complete callback and .data field of the > > request before calling complete() on it. > > > > Signed-off-by: Marek Vasut <marex@xxxxxxx> > > Cc: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> > > Cc: David S. Miller <davem@xxxxxxxxxxxxx> > > Cc: Fabio Estevam <fabio.estevam@xxxxxxxxxxxxx> > > Cc: Shawn Guo <shawn.guo@xxxxxxxxxx> > > Cc: linux-crypto@xxxxxxxxxxxxxxx > > --- > > > > crypto/ahash.c | 5 ++++- > > 1 file changed, 4 insertions(+), 1 deletion(-) > > > > diff --git a/crypto/ahash.c b/crypto/ahash.c > > index 793a27f..a92dc38 100644 > > --- a/crypto/ahash.c > > +++ b/crypto/ahash.c > > @@ -213,7 +213,10 @@ static void ahash_op_unaligned_done(struct > > crypto_async_request *req, int err) > > > > ahash_op_unaligned_finish(areq, err); > > > > - complete(data, err); > > + areq->base.complete = complete; > > + areq->base.data = data; > > + > > + complete(&areq->base, err); > > This looks completely bogus. While restoring areq isn't wrong per > se, calling complete with &areq->base makes no sense. The original > completion data is in the variable "data". Is there some documentation for this so I can understand why this is wrong, please? I really don't quite get it, sorry. Actually, is there some documentation for writing crypto API drivers at all please ? > Which driver relies on this behaviour? This one. > Also, does your subsequent patches rely on this? Yes > Cheers, Best regards, Marek Vasut -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html