diff options
author | Joel Fernandes <joelf@ti.com> | 2014-03-07 11:28:46 -0500 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2014-03-10 08:17:13 -0400 |
commit | 26a05489ee0eb2a69b729438e63b1038b472fa57 (patch) | |
tree | fd8bf272681f2eb72ccb10ddeec398f1dffeca22 /drivers/crypto/omap-sham.c | |
parent | 6e4e603a9a99c6e27a74c1a813a7c751d85a721d (diff) |
crypto: omap-sham - Map SG pages if they are HIGHMEM before accessing
HIGHMEM pages may not be mapped so we must kmap them before accessing.
This resolves a random OOPs error that was showing up during OpenSSL SHA tests.
Signed-off-by: Joel Fernandes <joelf@ti.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/omap-sham.c')
-rw-r--r-- | drivers/crypto/omap-sham.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/crypto/omap-sham.c b/drivers/crypto/omap-sham.c index 4e2067df300d..710d86386965 100644 --- a/drivers/crypto/omap-sham.c +++ b/drivers/crypto/omap-sham.c | |||
@@ -636,11 +636,17 @@ static size_t omap_sham_append_buffer(struct omap_sham_reqctx *ctx, | |||
636 | static size_t omap_sham_append_sg(struct omap_sham_reqctx *ctx) | 636 | static size_t omap_sham_append_sg(struct omap_sham_reqctx *ctx) |
637 | { | 637 | { |
638 | size_t count; | 638 | size_t count; |
639 | const u8 *vaddr; | ||
639 | 640 | ||
640 | while (ctx->sg) { | 641 | while (ctx->sg) { |
642 | vaddr = kmap_atomic(sg_page(ctx->sg)); | ||
643 | |||
641 | count = omap_sham_append_buffer(ctx, | 644 | count = omap_sham_append_buffer(ctx, |
642 | sg_virt(ctx->sg) + ctx->offset, | 645 | vaddr + ctx->offset, |
643 | ctx->sg->length - ctx->offset); | 646 | ctx->sg->length - ctx->offset); |
647 | |||
648 | kunmap_atomic((void *)vaddr); | ||
649 | |||
644 | if (!count) | 650 | if (!count) |
645 | break; | 651 | break; |
646 | ctx->offset += count; | 652 | ctx->offset += count; |