diff options
author | Huang Ying <ying.huang@intel.com> | 2009-11-16 21:52:22 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2009-11-16 21:52:22 +0800 |
commit | 62c5593aea4b71d61dc0f37fea96c556c158a042 (patch) | |
tree | 3a168a212ccafa696739c21a97f7ae81096c610e /drivers | |
parent | e8edb3cbd7dd8acf6c748a02d06ec1d82c4124ea (diff) |
crypto: gcm - fix another complete call in complete fuction
The flow of the complete function (xxx_done) in gcm.c is as follow:
void complete(struct crypto_async_request *areq, int err)
{
struct aead_request *req = areq->data;
if (!err) {
err = async_next_step();
if (err == -EINPROGRESS || err == -EBUSY)
return;
}
complete_for_next_step(areq, err);
}
But *areq may be destroyed in async_next_step(), this makes
complete_for_next_step() can not work properly. To fix this, one of
following methods is used for each complete function.
- Add a __complete() for each complete(), which accept struct
aead_request *req instead of areq, so avoid using areq after it is
destroyed.
- Expand complete_for_next_step().
The fixing method is based on the idea of Herbert Xu.
Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers')
0 files changed, 0 insertions, 0 deletions