diff options
author | Victoria Milhoan <vicki.milhoan@freescale.com> | 2015-06-15 19:52:57 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2015-06-16 02:35:07 -0400 |
commit | 8af7b0f809a3d34657433ec545d64dff9808ce34 (patch) | |
tree | a35024c4de3b7066fb381b474f4e22ceee885ec7 /drivers/crypto/caam/caamhash.c | |
parent | d37e296979ed1652aec6850e2d736bd0ebf0cdb1 (diff) |
crypto: caam - Fix incorrect size when DMA unmapping buffer
The CAAM driver uses two data buffers to store data for a hashing operation,
with one buffer defined as active. This change forces switching of the
active buffer when executing a hashing operation to avoid a later DMA unmap
using the length of the opposite buffer.
Signed-off-by: Victoria Milhoan <vicki.milhoan@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/caam/caamhash.c')
-rw-r--r-- | drivers/crypto/caam/caamhash.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c index ba0532efd3ae..75125a26bd2a 100644 --- a/drivers/crypto/caam/caamhash.c +++ b/drivers/crypto/caam/caamhash.c | |||
@@ -835,17 +835,17 @@ static int ahash_update_ctx(struct ahash_request *req) | |||
835 | src_map_to_sec4_sg(jrdev, req->src, src_nents, | 835 | src_map_to_sec4_sg(jrdev, req->src, src_nents, |
836 | edesc->sec4_sg + sec4_sg_src_index, | 836 | edesc->sec4_sg + sec4_sg_src_index, |
837 | chained); | 837 | chained); |
838 | if (*next_buflen) { | 838 | if (*next_buflen) |
839 | scatterwalk_map_and_copy(next_buf, req->src, | 839 | scatterwalk_map_and_copy(next_buf, req->src, |
840 | to_hash - *buflen, | 840 | to_hash - *buflen, |
841 | *next_buflen, 0); | 841 | *next_buflen, 0); |
842 | state->current_buf = !state->current_buf; | ||
843 | } | ||
844 | } else { | 842 | } else { |
845 | (edesc->sec4_sg + sec4_sg_src_index - 1)->len |= | 843 | (edesc->sec4_sg + sec4_sg_src_index - 1)->len |= |
846 | SEC4_SG_LEN_FIN; | 844 | SEC4_SG_LEN_FIN; |
847 | } | 845 | } |
848 | 846 | ||
847 | state->current_buf = !state->current_buf; | ||
848 | |||
849 | sh_len = desc_len(sh_desc); | 849 | sh_len = desc_len(sh_desc); |
850 | desc = edesc->hw_desc; | 850 | desc = edesc->hw_desc; |
851 | init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER | | 851 | init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER | |
@@ -1268,9 +1268,10 @@ static int ahash_update_no_ctx(struct ahash_request *req) | |||
1268 | scatterwalk_map_and_copy(next_buf, req->src, | 1268 | scatterwalk_map_and_copy(next_buf, req->src, |
1269 | to_hash - *buflen, | 1269 | to_hash - *buflen, |
1270 | *next_buflen, 0); | 1270 | *next_buflen, 0); |
1271 | state->current_buf = !state->current_buf; | ||
1272 | } | 1271 | } |
1273 | 1272 | ||
1273 | state->current_buf = !state->current_buf; | ||
1274 | |||
1274 | sh_len = desc_len(sh_desc); | 1275 | sh_len = desc_len(sh_desc); |
1275 | desc = edesc->hw_desc; | 1276 | desc = edesc->hw_desc; |
1276 | init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER | | 1277 | init_job_desc_shared(desc, ptr, sh_len, HDR_SHARE_DEFER | |