aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/qat
diff options
context:
space:
mode:
authorEric Biggers <ebiggers@google.com>2017-11-05 21:30:47 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2017-11-10 06:20:20 -0500
commit5829cc8da94f500b0c1fe82688d89fd36a1a9a41 (patch)
tree570141e078eadcbf1f8548314388afdb9f5baf2d /drivers/crypto/qat
parentccd9888f14a8019c0bbdeeae758aba1f58693712 (diff)
crypto: qat - Clean up error handling in qat_dh_set_secret()
Update the error handling in qat_dh_set_secret() to mirror dh_set_secret(). The new version is less error-prone because freeing memory and setting the pointers to NULL is now only done in one place. Signed-off-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/qat')
-rw-r--r--drivers/crypto/qat/qat_common/qat_asym_algs.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/crypto/qat/qat_common/qat_asym_algs.c b/drivers/crypto/qat/qat_common/qat_asym_algs.c
index 6f5dd68449c6..7655fdb499de 100644
--- a/drivers/crypto/qat/qat_common/qat_asym_algs.c
+++ b/drivers/crypto/qat/qat_common/qat_asym_algs.c
@@ -462,11 +462,8 @@ static int qat_dh_set_params(struct qat_dh_ctx *ctx, struct dh *params)
462 } 462 }
463 463
464 ctx->g = dma_zalloc_coherent(dev, ctx->p_size, &ctx->dma_g, GFP_KERNEL); 464 ctx->g = dma_zalloc_coherent(dev, ctx->p_size, &ctx->dma_g, GFP_KERNEL);
465 if (!ctx->g) { 465 if (!ctx->g)
466 dma_free_coherent(dev, ctx->p_size, ctx->p, ctx->dma_p);
467 ctx->p = NULL;
468 return -ENOMEM; 466 return -ENOMEM;
469 }
470 memcpy(ctx->g + (ctx->p_size - params->g_size), params->g, 467 memcpy(ctx->g + (ctx->p_size - params->g_size), params->g,
471 params->g_size); 468 params->g_size);
472 469
@@ -507,18 +504,22 @@ static int qat_dh_set_secret(struct crypto_kpp *tfm, const void *buf,
507 504
508 ret = qat_dh_set_params(ctx, &params); 505 ret = qat_dh_set_params(ctx, &params);
509 if (ret < 0) 506 if (ret < 0)
510 return ret; 507 goto err_clear_ctx;
511 508
512 ctx->xa = dma_zalloc_coherent(dev, ctx->p_size, &ctx->dma_xa, 509 ctx->xa = dma_zalloc_coherent(dev, ctx->p_size, &ctx->dma_xa,
513 GFP_KERNEL); 510 GFP_KERNEL);
514 if (!ctx->xa) { 511 if (!ctx->xa) {
515 qat_dh_clear_ctx(dev, ctx); 512 ret = -ENOMEM;
516 return -ENOMEM; 513 goto err_clear_ctx;
517 } 514 }
518 memcpy(ctx->xa + (ctx->p_size - params.key_size), params.key, 515 memcpy(ctx->xa + (ctx->p_size - params.key_size), params.key,
519 params.key_size); 516 params.key_size);
520 517
521 return 0; 518 return 0;
519
520err_clear_ctx:
521 qat_dh_clear_ctx(dev, ctx);
522 return ret;
522} 523}
523 524
524static unsigned int qat_dh_max_size(struct crypto_kpp *tfm) 525static unsigned int qat_dh_max_size(struct crypto_kpp *tfm)