diff options
| author | Eric Biggers <ebiggers@google.com> | 2017-11-05 21:30:47 -0500 |
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2017-11-10 06:20:20 -0500 |
| commit | 5829cc8da94f500b0c1fe82688d89fd36a1a9a41 (patch) | |
| tree | 570141e078eadcbf1f8548314388afdb9f5baf2d /drivers/crypto/qat | |
| parent | ccd9888f14a8019c0bbdeeae758aba1f58693712 (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.c | 15 |
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, ¶ms); | 505 | ret = qat_dh_set_params(ctx, ¶ms); |
| 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 | |||
| 520 | err_clear_ctx: | ||
| 521 | qat_dh_clear_ctx(dev, ctx); | ||
| 522 | return ret; | ||
| 522 | } | 523 | } |
| 523 | 524 | ||
| 524 | static unsigned int qat_dh_max_size(struct crypto_kpp *tfm) | 525 | static unsigned int qat_dh_max_size(struct crypto_kpp *tfm) |
