projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
45e9af7
)
crypto: caam - fix uninitialized edesc->dst_dma field
author
Horia Geanta
<horia.geanta@freescale.com>
Fri, 11 Jul 2014 12:34:54 +0000
(15:34 +0300)
committer
Herbert Xu
<herbert@gondor.apana.org.au>
Wed, 23 Jul 2014 13:31:36 +0000
(21:31 +0800)
dst_dma not being properly initialized causes ahash_done_ctx_dst
to try to free unallocated DMA memory:
caam_jr
ffe301000
.jr: DMA-API: device driver tries to free DMA memory it has not allocated [device address=0x0000000006513340] [size=28 bytes]
WARNING: at lib/dma-debug.c:1080
Modules linked in: caamhash(+) [last unloaded: caamhash]
CPU: 0 PID: 1373 Comm: cryptomgr_test Tainted: G W 3.16.0-rc1 #23
task:
ee23e350
ti:
effd2000
task.ti:
ee1f6000
NIP:
c02889fc
LR:
c02889fc
CTR:
c02d7020
REGS:
effd3d50
TRAP: 0700 Tainted: G W (3.16.0-rc1)
MSR:
00029002
<CE,EE,ME> CR:
44048082
XER:
00000000
GPR00:
c02889fc
effd3e00
ee23e350
0000008e
c1de3478
c1de382c
00000000
00029002
GPR08:
00000007
00000000
01660000
00000000
24048082
00000000
00000018
c07db080
GPR16:
00000006
00000100
0000002c
eeb4a7e0
c07e1e10
c0da1180
00029002
c0d9b3c8
GPR24:
eeb4a7c0
00000000
effd3e58
00000000
c078ad4c
ee130210
00000000
06513340
NIP [
c02889fc
] check_unmap+0x8ac/0xab0
LR [
c02889fc
] check_unmap+0x8ac/0xab0
Call Trace:
[
effd3e00
] [
c02889fc
] check_unmap+0x8ac/0xab0 (unreliable)
[
effd3e50
] [
c0288c78
] debug_dma_unmap_page+0x78/0x90
[
effd3ed0
] [
f94b89ec
] ahash_done_ctx_dst+0x11c/0x200 [caamhash]
[
effd3f00
] [
c0429640
] caam_jr_dequeue+0x1c0/0x280
[
effd3f50
] [
c002c94c
] tasklet_action+0xcc/0x1a0
[
effd3f80
] [
c002cb30
] __do_softirq+0x110/0x220
[
effd3fe0
] [
c002cf34
] irq_exit+0xa4/0xe0
[
effd3ff0
] [
c000d834
] call_do_irq+0x24/0x3c
[
ee1f7ae0
] [
c000489c
] do_IRQ+0x8c/0x110
[
ee1f7b00
] [
c000f86c
] ret_from_except+0x0/0x18
--- Exception: 501 at _raw_spin_unlock_irq+0x30/0x50
LR = _raw_spin_unlock_irq+0x2c/0x50
[
ee1f7bd0
] [
c0590158
] wait_for_common+0xb8/0x170
[
ee1f7c10
] [
c059024c
] wait_for_completion_interruptible+0x1c/0x40
[
ee1f7c20
] [
c022fc78
] do_one_async_hash_op.isra.2.part.3+0x18/0x40
[
ee1f7c30
] [
c022ffb8
] __test_hash+0x318/0x6c0
[
ee1f7de0
] [
c0230388
] test_hash+0x28/0xb0
[
ee1f7e00
] [
c02304a4
] alg_test_hash+0x94/0xc0
[
ee1f7e20
] [
c022fa94
] alg_test+0x114/0x2e0
[
ee1f7ea0
] [
c022cd1c
] cryptomgr_test+0x4c/0x60
[
ee1f7eb0
] [
c00497a4
] kthread+0xc4/0xe0
[
ee1f7f40
] [
c000f2fc
] ret_from_kernel_thread+0x5c/0x64
Instruction dump:
41de01c8
80a9002c
2f850000
40fe0008
80a90008
80fa0018
3c60c06d
811a001c
3863f4a4
813a0020
815a0024
4830cd01
<
0fe00000
>
81340048
2f890000
40feff48
Signed-off-by: Horia Geanta <horia.geanta@freescale.com>
Acked-by: Kim Phillips <kim.phillips@freescale.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/caam/caamhash.c
patch
|
blob
|
history
diff --git
a/drivers/crypto/caam/caamhash.c
b/drivers/crypto/caam/caamhash.c
index 126d80c23571bf900749789a90efd2c4ad76cb9b..44be5ad38ad7d997b03d18d13787d92b87b387a1 100644
(file)
--- a/
drivers/crypto/caam/caamhash.c
+++ b/
drivers/crypto/caam/caamhash.c
@@
-1255,6
+1255,7
@@
static int ahash_update_no_ctx(struct ahash_request *req)
edesc->sec4_sg_bytes = sec4_sg_bytes;
edesc->sec4_sg = (void *)edesc + sizeof(struct ahash_edesc) +
DESC_JOB_IO_LEN;
+ edesc->dst_dma = 0;
state->buf_dma = buf_map_to_sec4_sg(jrdev, edesc->sec4_sg,
buf, *buflen);
@@
-1454,6
+1455,7
@@
static int ahash_update_first(struct ahash_request *req)
edesc->sec4_sg_bytes = sec4_sg_bytes;
edesc->sec4_sg = (void *)edesc + sizeof(struct ahash_edesc) +
DESC_JOB_IO_LEN;
+ edesc->dst_dma = 0;
if (src_nents) {
sg_to_sec4_sg_last(req->src, src_nents,