> -----Original Message----- > From: longpeng > Sent: Monday, April 17, 2017 9:33 AM > To: berra...@redhat.com > Cc: Gonglei (Arei); Huangweidong (C); arm...@redhat.com; > ebl...@redhat.com; m...@redhat.com; qemu-devel@nongnu.org; longpeng > Subject: [PATCH v2 for-2.10 01/18] crypto: cipher: introduce context free > function > > Refactors the qcrypto_cipher_free(), splits it into two parts. One > is gcrypt/nettle__cipher_free_ctx() to free the special context. > > This makes code more clear, what's more, it would be used by the > later patch. > > Signed-off-by: Longpeng(Mike) <longpe...@huawei.com> > --- > crypto/cipher-gcrypt.c | 31 ++++++++++++++++++------------- > crypto/cipher-nettle.c | 18 ++++++++++++++---- > 2 files changed, 32 insertions(+), 17 deletions(-) >
Reviewed-by: Gonglei <arei.gong...@huawei.com> > diff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.c > index 6487eca..0ecffa2 100644 > --- a/crypto/cipher-gcrypt.c > +++ b/crypto/cipher-gcrypt.c > @@ -64,6 +64,22 @@ struct QCryptoCipherGcrypt { > uint8_t *iv; > }; > > +static void gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, > + QCryptoCipherMode mode) > +{ > + if (!ctx) { > + return; > + } > + > + gcry_cipher_close(ctx->handle); > + if (mode == QCRYPTO_CIPHER_MODE_XTS) { > + gcry_cipher_close(ctx->tweakhandle); > + } > + g_free(ctx->iv); > + g_free(ctx); > +} > + > + > QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > QCryptoCipherMode mode, > const uint8_t *key, size_t nkey, > @@ -228,11 +244,7 @@ QCryptoCipher > *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > return cipher; > > error: > - gcry_cipher_close(ctx->handle); > - if (cipher->mode == QCRYPTO_CIPHER_MODE_XTS) { > - gcry_cipher_close(ctx->tweakhandle); > - } > - g_free(ctx); > + gcrypt_cipher_free_ctx(ctx, mode); > g_free(cipher); > return NULL; > } > @@ -240,17 +252,10 @@ QCryptoCipher > *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > > void qcrypto_cipher_free(QCryptoCipher *cipher) > { > - QCryptoCipherGcrypt *ctx; > if (!cipher) { > return; > } > - ctx = cipher->opaque; > - gcry_cipher_close(ctx->handle); > - if (cipher->mode == QCRYPTO_CIPHER_MODE_XTS) { > - gcry_cipher_close(ctx->tweakhandle); > - } > - g_free(ctx->iv); > - g_free(ctx); > + gcrypt_cipher_free_ctx(cipher->opaque, cipher->mode); > g_free(cipher); > } > > diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c > index dfc9030..e04e3a1 100644 > --- a/crypto/cipher-nettle.c > +++ b/crypto/cipher-nettle.c > @@ -249,6 +249,19 @@ bool > qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, > } > > > +static void nettle_cipher_free_ctx(QCryptoCipherNettle *ctx) > +{ > + if (!ctx) { > + return; > + } > + > + g_free(ctx->iv); > + g_free(ctx->ctx); > + g_free(ctx->ctx_tweak); > + g_free(ctx); > +} > + > + > QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, > QCryptoCipherMode mode, > const uint8_t *key, size_t nkey, > @@ -440,10 +453,7 @@ void qcrypto_cipher_free(QCryptoCipher *cipher) > } > > ctx = cipher->opaque; > - g_free(ctx->iv); > - g_free(ctx->ctx); > - g_free(ctx->ctx_tweak); > - g_free(ctx); > + nettle_cipher_free_ctx(ctx); > g_free(cipher); > } > > -- > 1.8.3.1 >