2010-12-29 09:58:41

by Dmitry Kasatkin

[permalink] [raw]
Subject: [PATCH 0/1] crypto: omap-sham backlog handling fix

Hi,

Please take this important fix.

- Dmitry


Dmitry Kasatkin (1):
omap-sham: backlog handling fix

drivers/crypto/omap-sham.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)


2010-12-29 09:58:28

by Dmitry Kasatkin

[permalink] [raw]
Subject: [PATCH 1/1] omap-sham: backlog handling fix

Previous commit "removed redundant locking" introduced
a bug in handling backlog.
In certain cases, when async request complete callback will
call complete() on -EINPROGRESS code, it will cause uncompleted requests.
It does not happen in implementation similar to crypto test manager,
but it will happen in implementation similar to dm-crypt.
Backlog needs to be checked before dequeuing next request.

Signed-off-by: Dmitry Kasatkin <[email protected]>
---
drivers/crypto/omap-sham.c | 7 +++----
1 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c
index eb988e7..2e71123 100644
--- a/drivers/crypto/omap-sham.c
+++ b/drivers/crypto/omap-sham.c
@@ -664,7 +664,7 @@ static void omap_sham_finish_req(struct ahash_request *req, int err)
static int omap_sham_handle_queue(struct omap_sham_dev *dd,
struct ahash_request *req)
{
- struct crypto_async_request *async_req, *backlog = 0;
+ struct crypto_async_request *async_req, *backlog;
struct omap_sham_reqctx *ctx;
struct ahash_request *prev_req;
unsigned long flags;
@@ -677,11 +677,10 @@ static int omap_sham_handle_queue(struct omap_sham_dev *dd,
spin_unlock_irqrestore(&dd->lock, flags);
return ret;
}
+ backlog = crypto_get_backlog(&dd->queue);
async_req = crypto_dequeue_request(&dd->queue);
- if (async_req) {
+ if (async_req)
dd->flags |= FLAGS_BUSY;
- backlog = crypto_get_backlog(&dd->queue);
- }
spin_unlock_irqrestore(&dd->lock, flags);

if (!async_req)
--
1.7.0.4


2010-12-29 10:52:21

by Herbert Xu

[permalink] [raw]
Subject: Re: [PATCH 1/1] omap-sham: backlog handling fix

On Wed, Dec 29, 2010 at 11:58:28AM +0200, Dmitry Kasatkin wrote:
> Previous commit "removed redundant locking" introduced
> a bug in handling backlog.
> In certain cases, when async request complete callback will
> call complete() on -EINPROGRESS code, it will cause uncompleted requests.
> It does not happen in implementation similar to crypto test manager,
> but it will happen in implementation similar to dm-crypt.
> Backlog needs to be checked before dequeuing next request.
>
> Signed-off-by: Dmitry Kasatkin <[email protected]>

Patch applied. Thanks Dmitry.
--
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt