crypto: marvell/cesa - fix memory leak
authorBoris BREZILLON <boris.brezillon@free-electrons.com>
Thu, 17 Mar 2016 09:21:34 +0000 (10:21 +0100)
committerHerbert Xu <herbert@gondor.apana.org.au>
Thu, 17 Mar 2016 11:09:04 +0000 (19:09 +0800)
commit7850c91b175d765f09cea3a02a20c7779c79c11d
tree3b5182e34e06100777a6f81a4cb4c6e5f8bb7373
parent03a6f29000fdc13adc2bb2e22efd07a51d334154
crypto: marvell/cesa - fix memory leak

Crypto requests are not guaranteed to be finalized (->final() call),
and can be freed at any moment, without getting any notification from
the core. This can lead to memory leaks of the ->cache buffer.

Make this buffer part of the request object, and allocate an extra buffer
from the DMA cache pool when doing DMA operations.

As a side effect, this patch also fixes another bug related to cache
allocation and DMA operations. When the core allocates a new request and
import an existing state, a cache buffer can be allocated (depending
on the state). The problem is, at that very moment, we don't know yet
whether the request will use DMA or not, and since everything is
likely to be initialized to zero, mv_cesa_ahash_alloc_cache() thinks it
should allocate a buffer for standard operation. But when
mv_cesa_ahash_free_cache() is called, req->type has been set to
CESA_DMA_REQ in the meantime, thus leading to an invalind dma_pool_free()
call (the buffer passed in argument has not been allocated from the pool).

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Reported-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/marvell/cesa.h
drivers/crypto/marvell/hash.c