mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-01-23 21:29:39 +07:00
crypto: ccree - fix resource leak on error path
Fix a small resource leak on the error path of cipher processing.
Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
Fixes: 63ee04c8b4
("crypto: ccree - add skcipher support")
Cc: Markus Elfring <Markus.Elfring@web.de>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
d095146cae
commit
9bc6165d60
@ -159,7 +159,6 @@ static int cc_cipher_init(struct crypto_tfm *tfm)
|
||||
skcipher_alg.base);
|
||||
struct device *dev = drvdata_to_dev(cc_alg->drvdata);
|
||||
unsigned int max_key_buf_size = cc_alg->skcipher_alg.max_keysize;
|
||||
int rc = 0;
|
||||
|
||||
dev_dbg(dev, "Initializing context @%p for %s\n", ctx_p,
|
||||
crypto_tfm_alg_name(tfm));
|
||||
@ -171,10 +170,19 @@ static int cc_cipher_init(struct crypto_tfm *tfm)
|
||||
ctx_p->flow_mode = cc_alg->flow_mode;
|
||||
ctx_p->drvdata = cc_alg->drvdata;
|
||||
|
||||
if (ctx_p->cipher_mode == DRV_CIPHER_ESSIV) {
|
||||
/* Alloc hash tfm for essiv */
|
||||
ctx_p->shash_tfm = crypto_alloc_shash("sha256-generic", 0, 0);
|
||||
if (IS_ERR(ctx_p->shash_tfm)) {
|
||||
dev_err(dev, "Error allocating hash tfm for ESSIV.\n");
|
||||
return PTR_ERR(ctx_p->shash_tfm);
|
||||
}
|
||||
}
|
||||
|
||||
/* Allocate key buffer, cache line aligned */
|
||||
ctx_p->user.key = kmalloc(max_key_buf_size, GFP_KERNEL);
|
||||
if (!ctx_p->user.key)
|
||||
return -ENOMEM;
|
||||
goto free_shash;
|
||||
|
||||
dev_dbg(dev, "Allocated key buffer in context. key=@%p\n",
|
||||
ctx_p->user.key);
|
||||
@ -186,21 +194,19 @@ static int cc_cipher_init(struct crypto_tfm *tfm)
|
||||
if (dma_mapping_error(dev, ctx_p->user.key_dma_addr)) {
|
||||
dev_err(dev, "Mapping Key %u B at va=%pK for DMA failed\n",
|
||||
max_key_buf_size, ctx_p->user.key);
|
||||
return -ENOMEM;
|
||||
goto free_key;
|
||||
}
|
||||
dev_dbg(dev, "Mapped key %u B at va=%pK to dma=%pad\n",
|
||||
max_key_buf_size, ctx_p->user.key, &ctx_p->user.key_dma_addr);
|
||||
|
||||
if (ctx_p->cipher_mode == DRV_CIPHER_ESSIV) {
|
||||
/* Alloc hash tfm for essiv */
|
||||
ctx_p->shash_tfm = crypto_alloc_shash("sha256-generic", 0, 0);
|
||||
if (IS_ERR(ctx_p->shash_tfm)) {
|
||||
dev_err(dev, "Error allocating hash tfm for ESSIV.\n");
|
||||
return PTR_ERR(ctx_p->shash_tfm);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return rc;
|
||||
free_key:
|
||||
kfree(ctx_p->user.key);
|
||||
free_shash:
|
||||
crypto_free_shash(ctx_p->shash_tfm);
|
||||
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
static void cc_cipher_exit(struct crypto_tfm *tfm)
|
||||
|
Loading…
Reference in New Issue
Block a user