mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-30 08:02:30 +00:00
crypto: ccp - fix memleak in ccp_init_dm_workarea
[ Upstream commita1c95dd5bc
] When dma_map_single() fails, wa->address is supposed to be freed by the callers of ccp_init_dm_workarea() through ccp_dm_free(). However, many of the call spots don't expect to have to call ccp_dm_free() on failure of ccp_init_dm_workarea(), which may lead to a memleak. Let's free wa->address in ccp_init_dm_workarea() when dma_map_single() fails. Fixes:63b945091a
("crypto: ccp - CCP device driver and interface support") Signed-off-by: Dinghao Liu <dinghao.liu@zju.edu.cn> Acked-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
b94f7e34d6
commit
1e9d707233
1 changed files with 4 additions and 1 deletions
|
@ -179,8 +179,11 @@ static int ccp_init_dm_workarea(struct ccp_dm_workarea *wa,
|
||||||
|
|
||||||
wa->dma.address = dma_map_single(wa->dev, wa->address, len,
|
wa->dma.address = dma_map_single(wa->dev, wa->address, len,
|
||||||
dir);
|
dir);
|
||||||
if (dma_mapping_error(wa->dev, wa->dma.address))
|
if (dma_mapping_error(wa->dev, wa->dma.address)) {
|
||||||
|
kfree(wa->address);
|
||||||
|
wa->address = NULL;
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
wa->dma.length = len;
|
wa->dma.length = len;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue