From 0901ff383524e896424921f4e8a1ba7020e7613d Mon Sep 17 00:00:00 2001 From: Cristian Stoica Date: Tue, 9 Feb 2016 11:53:33 +0200 Subject: [PATCH 44/48] cryptodev: check for errors inside cryptodev_dh_compute_key_async Signed-off-by: Cristian Stoica --- crypto/engine/eng_cryptodev.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/crypto/engine/eng_cryptodev.c b/crypto/engine/eng_cryptodev.c index 753e326..b9c7ff3 100644 --- a/crypto/engine/eng_cryptodev.c +++ b/crypto/engine/eng_cryptodev.c @@ -4108,19 +4108,28 @@ static int cryptodev_dh_compute_key_async(unsigned char *key, const BIGNUM *pub_key, DH *dh, struct pkc_cookie_s *cookie) { - struct crypt_kop *kop = malloc(sizeof(struct crypt_kop)); + struct crypt_kop *kop; int ret = 1; int p_len; unsigned char *padded_pub_key = NULL, *p = NULL; + kop = malloc(sizeof(struct crypt_kop)); + if (kop == NULL) { + goto err; + } + memset(kop, 0, sizeof(struct crypt_kop)); kop->crk_op = CRK_DH_COMPUTE_KEY; /* inputs: dh->priv_key pub_key dh->p key */ - spcf_bn2bin(dh->p, &p, &p_len); - spcf_bn2bin_ex(pub_key, &padded_pub_key, &p_len); - - if (bn2crparam(dh->priv_key, &kop->crk_param[0])) + if (spcf_bn2bin(dh->p, &p, &p_len) != 0) { + goto err; + } + if (spcf_bn2bin_ex(pub_key, &padded_pub_key, &p_len) != 0) { goto err; + } + if (bn2crparam(dh->priv_key, &kop->crk_param[0]) != 0) { + goto err; + } kop->crk_param[1].crp_p = padded_pub_key; kop->crk_param[1].crp_nbits = p_len * 8; kop->crk_param[2].crp_p = p; @@ -4132,16 +4141,20 @@ cryptodev_dh_compute_key_async(unsigned char *key, const BIGNUM *pub_key, kop->crk_param[3].crp_nbits = p_len * 8; kop->crk_oparams = 1; - if (cryptodev_asym_async(kop, 0, NULL, 0, NULL)) + if (cryptodev_asym_async(kop, 0, NULL, 0, NULL)) { goto err; + } return p_len; err: { const DH_METHOD *meth = DH_OpenSSL(); - - if (kop) + free(p); + free(padded_pub_key); + if (kop) { free(kop); + } + ret = (meth->compute_key) (key, pub_key, dh); /* Call user cookie handler */ cookie->pkc_callback(cookie, 0); -- 2.7.3