linux/drivers/crypto/caam
Horia Geantă 944c3d4dca crypto: caam - fix state buffer DMA (un)mapping
If we register the DMA API debug notification chain to
receive platform bus events:
    dma_debug_add_bus(&platform_bus_type);
we start receiving warnings after a simple test like "modprobe caam_jr &&
modprobe caamhash && modprobe -r caamhash && modprobe -r caam_jr":
platform ffe301000.jr: DMA-API: device driver has pending DMA allocations while released from device [count=1938]
One of leaked entries details: [device address=0x0000000173fda090] [size=63 bytes] [mapped with DMA_TO_DEVICE] [mapped as single]

It turns out there are several issues with handling buf_dma (mapping of buffer
holding the previous chunk smaller than hash block size):
-detection of buf_dma mapping failure occurs too late, after a job descriptor
using that value has been submitted for execution
-dma mapping leak - unmapping is not performed in all places: for e.g.
in ahash_export or in most ahash_fin* callbacks (due to current back-to-back
implementation of buf_dma unmapping/mapping)

Fix these by:
-calling dma_mapping_error() on buf_dma right after the mapping and providing
an error code if needed
-unmapping buf_dma during the "job done" (ahash_done_*) callbacks

Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
2017-02-15 13:23:43 +08:00
..
Kconfig crypto: caam - make aamalg_desc a proper module 2016-12-01 21:06:40 +08:00
Makefile crypto: caam - refactor encryption descriptors generation 2016-11-28 21:23:23 +08:00
caamalg.c crypto: caam - fix DMA API leaks for multiple setkey() calls 2017-02-15 13:23:41 +08:00
caamalg_desc.c crypto: caam - make aamalg_desc a proper module 2016-12-01 21:06:40 +08:00
caamalg_desc.h crypto: caam - refactor encryption descriptors generation 2016-11-28 21:23:23 +08:00
caamhash.c crypto: caam - fix state buffer DMA (un)mapping 2017-02-15 13:23:43 +08:00
caampkc.c crypto: caam - fix sparse warnings 2016-11-13 17:45:08 +08:00
caampkc.h crypto: caam - add support for RSA algorithm 2016-07-05 23:05:24 +08:00
caamrng.c crypto: caam - trivial code clean-up 2016-11-13 17:45:12 +08:00
compat.h crypto: caam - add support for RSA algorithm 2016-07-05 23:05:24 +08:00
ctrl.c crypto: caam - fix JR IO mapping if one fails 2017-02-15 13:23:38 +08:00
ctrl.h
desc.h crypto: caam - move sec4_sg_entry to sg_sw_sec4.h 2016-11-13 17:45:14 +08:00
desc_constr.h crypto: caam - pass key buffers with typesafe pointers 2016-12-01 21:06:40 +08:00
error.c crypto: caam - don't include unneeded headers 2017-02-15 13:23:36 +08:00
error.h
intern.h Revert "crypto: caam - get rid of tasklet" 2016-11-13 17:45:13 +08:00
jr.c crypto: caam - check return code of dma_set_mask_and_coherent() 2017-02-15 13:23:37 +08:00
jr.h
key_gen.c crypto: caam - consolidate split key length computation 2016-11-28 21:23:23 +08:00
key_gen.h crypto: caam - consolidate split key length computation 2016-11-28 21:23:23 +08:00
pdb.h crypto: caam - add support for RSA algorithm 2016-07-05 23:05:24 +08:00
pkc_desc.c crypto: caam - add support for RSA algorithm 2016-07-05 23:05:24 +08:00
regs.h crypto: caam - treat SGT address pointer as u64 2016-10-02 22:33:45 +08:00
sg_sw_sec4.h crypto: caam - replace sg_count() with sg_nents_for_len() 2017-02-15 13:23:39 +08:00