crypto/block.c | 17 ++++++----------- crypto/hmac-gcrypt.c | 12 ++++-------- crypto/hmac-glib.c | 10 +++------- crypto/ivgen-essiv.c | 15 ++++----------- crypto/ivgen.c | 6 ++---- crypto/secret_keyring.c | 5 ++--- 6 files changed, 21 insertions(+), 44 deletions(-)
Use g_autofree attribute to reduce the amount
of manual g_free() calls and 'goto out' code
Signed-off-by: Evgeny Kolmakov <randomjack94dev@gmail.com>
---
crypto/block.c | 17 ++++++-----------
crypto/hmac-gcrypt.c | 12 ++++--------
crypto/hmac-glib.c | 10 +++-------
crypto/ivgen-essiv.c | 15 ++++-----------
crypto/ivgen.c | 6 ++----
crypto/secret_keyring.c | 5 ++---
6 files changed, 21 insertions(+), 44 deletions(-)
diff --git a/crypto/block.c b/crypto/block.c
index 96c83e60b9..42558f3caf 100644
--- a/crypto/block.c
+++ b/crypto/block.c
@@ -55,7 +55,7 @@ QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
unsigned int flags,
Error **errp)
{
- QCryptoBlock *block = g_new0(QCryptoBlock, 1);
+ g_autofree QCryptoBlock *block = g_new0(QCryptoBlock, 1);
qemu_mutex_init(&block->mutex);
@@ -65,7 +65,6 @@ QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
!qcrypto_block_drivers[options->format]) {
error_setg(errp, "Unsupported block driver %s",
QCryptoBlockFormat_str(options->format));
- g_free(block);
return NULL;
}
@@ -74,11 +73,10 @@ QCryptoBlock *qcrypto_block_open(QCryptoBlockOpenOptions *options,
if (block->driver->open(block, options, optprefix,
readfunc, opaque, flags, errp) < 0)
{
- g_free(block);
return NULL;
}
- return block;
+ return g_steal_pointer(&block);
}
@@ -90,7 +88,7 @@ QCryptoBlock *qcrypto_block_create(QCryptoBlockCreateOptions *options,
unsigned int flags,
Error **errp)
{
- QCryptoBlock *block = g_new0(QCryptoBlock, 1);
+ g_autofree QCryptoBlock *block = g_new0(QCryptoBlock, 1);
qemu_mutex_init(&block->mutex);
@@ -100,7 +98,6 @@ QCryptoBlock *qcrypto_block_create(QCryptoBlockCreateOptions *options,
!qcrypto_block_drivers[options->format]) {
error_setg(errp, "Unsupported block driver %s",
QCryptoBlockFormat_str(options->format));
- g_free(block);
return NULL;
}
@@ -109,11 +106,10 @@ QCryptoBlock *qcrypto_block_create(QCryptoBlockCreateOptions *options,
if (block->driver->create(block, options, optprefix, initfunc,
writefunc, opaque, errp) < 0) {
- g_free(block);
return NULL;
}
- return block;
+ return g_steal_pointer(&block);
}
@@ -185,17 +181,16 @@ int qcrypto_block_amend_options(QCryptoBlock *block,
QCryptoBlockInfo *qcrypto_block_get_info(QCryptoBlock *block,
Error **errp)
{
- QCryptoBlockInfo *info = g_new0(QCryptoBlockInfo, 1);
+ g_autofree QCryptoBlockInfo *info = g_new0(QCryptoBlockInfo, 1);
info->format = block->format;
if (block->driver->get_info &&
block->driver->get_info(block, info, errp) < 0) {
- g_free(info);
return NULL;
}
- return info;
+ return g_steal_pointer(&info);
}
diff --git a/crypto/hmac-gcrypt.c b/crypto/hmac-gcrypt.c
index e428d17479..44631fb348 100644
--- a/crypto/hmac-gcrypt.c
+++ b/crypto/hmac-gcrypt.c
@@ -50,7 +50,7 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgo alg,
const uint8_t *key, size_t nkey,
Error **errp)
{
- QCryptoHmacGcrypt *ctx;
+ g_autofree QCryptoHmacGcrypt *ctx = NULL;
gcry_error_t err;
if (!qcrypto_hmac_supports(alg)) {
@@ -66,7 +66,7 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgo alg,
if (err != 0) {
error_setg(errp, "Cannot initialize hmac: %s",
gcry_strerror(err));
- goto error;
+ return NULL;
}
err = gcry_mac_setkey(ctx->handle, (const void *)key, nkey);
@@ -74,14 +74,10 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgo alg,
error_setg(errp, "Cannot set key: %s",
gcry_strerror(err));
gcry_mac_close(ctx->handle);
- goto error;
+ return NULL;
}
- return ctx;
-
-error:
- g_free(ctx);
- return NULL;
+ return g_steal_pointer(&ctx);
}
static void
diff --git a/crypto/hmac-glib.c b/crypto/hmac-glib.c
index b845133a05..1f17769c1c 100644
--- a/crypto/hmac-glib.c
+++ b/crypto/hmac-glib.c
@@ -46,7 +46,7 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgo alg,
const uint8_t *key, size_t nkey,
Error **errp)
{
- QCryptoHmacGlib *ctx;
+ g_autofree QCryptoHmacGlib *ctx = NULL;
if (!qcrypto_hmac_supports(alg)) {
error_setg(errp, "Unsupported hmac algorithm %s",
@@ -60,14 +60,10 @@ void *qcrypto_hmac_ctx_new(QCryptoHashAlgo alg,
(const uint8_t *)key, nkey);
if (!ctx->ghmac) {
error_setg(errp, "Cannot initialize hmac and set key");
- goto error;
+ return NULL;
}
- return ctx;
-
-error:
- g_free(ctx);
- return NULL;
+ return g_steal_pointer(&ctx);
}
static void
diff --git a/crypto/ivgen-essiv.c b/crypto/ivgen-essiv.c
index 3d5a188795..d5fa269888 100644
--- a/crypto/ivgen-essiv.c
+++ b/crypto/ivgen-essiv.c
@@ -31,10 +31,10 @@ static int qcrypto_ivgen_essiv_init(QCryptoIVGen *ivgen,
const uint8_t *key, size_t nkey,
Error **errp)
{
- uint8_t *salt;
+ g_autofree uint8_t *salt = NULL;
size_t nhash;
size_t nsalt;
- QCryptoIVGenESSIV *essiv = g_new0(QCryptoIVGenESSIV, 1);
+ g_autofree QCryptoIVGenESSIV *essiv = g_new0(QCryptoIVGenESSIV, 1);
/* Not necessarily the same as nkey */
nsalt = qcrypto_cipher_get_key_len(ivgen->cipher);
@@ -46,8 +46,6 @@ static int qcrypto_ivgen_essiv_init(QCryptoIVGen *ivgen,
if (qcrypto_hash_bytes(ivgen->hash, (const gchar *)key, nkey,
&salt, &nhash,
errp) < 0) {
- g_free(essiv);
- g_free(salt);
return -1;
}
@@ -57,13 +55,10 @@ static int qcrypto_ivgen_essiv_init(QCryptoIVGen *ivgen,
salt, MIN(nhash, nsalt),
errp);
if (!essiv->cipher) {
- g_free(essiv);
- g_free(salt);
return -1;
}
- g_free(salt);
- ivgen->private = essiv;
+ ivgen->private = g_steal_pointer(&essiv);
return 0;
}
@@ -75,7 +70,7 @@ static int qcrypto_ivgen_essiv_calculate(QCryptoIVGen *ivgen,
{
QCryptoIVGenESSIV *essiv = ivgen->private;
size_t ndata = qcrypto_cipher_get_block_len(ivgen->cipher);
- uint8_t *data = g_new(uint8_t, ndata);
+ g_autofree uint8_t *data = g_new(uint8_t, ndata);
sector = cpu_to_le64(sector);
memcpy(data, (uint8_t *)§or, MIN(sizeof(sector), ndata));
@@ -88,7 +83,6 @@ static int qcrypto_ivgen_essiv_calculate(QCryptoIVGen *ivgen,
data,
ndata,
errp) < 0) {
- g_free(data);
return -1;
}
@@ -99,7 +93,6 @@ static int qcrypto_ivgen_essiv_calculate(QCryptoIVGen *ivgen,
if (ndata < niv) {
memset(iv + ndata, 0, niv - ndata);
}
- g_free(data);
return 0;
}
diff --git a/crypto/ivgen.c b/crypto/ivgen.c
index 6b7d24d889..9f1f7d7dca 100644
--- a/crypto/ivgen.c
+++ b/crypto/ivgen.c
@@ -33,7 +33,7 @@ QCryptoIVGen *qcrypto_ivgen_new(QCryptoIVGenAlgo alg,
const uint8_t *key, size_t nkey,
Error **errp)
{
- QCryptoIVGen *ivgen = g_new0(QCryptoIVGen, 1);
+ g_autofree QCryptoIVGen *ivgen = g_new0(QCryptoIVGen, 1);
ivgen->algorithm = alg;
ivgen->cipher = cipheralg;
@@ -51,16 +51,14 @@ QCryptoIVGen *qcrypto_ivgen_new(QCryptoIVGenAlgo alg,
break;
default:
error_setg(errp, "Unknown block IV generator algorithm %d", alg);
- g_free(ivgen);
return NULL;
}
if (ivgen->driver->init(ivgen, key, nkey, errp) < 0) {
- g_free(ivgen);
return NULL;
}
- return ivgen;
+ return g_steal_pointer(&ivgen);
}
diff --git a/crypto/secret_keyring.c b/crypto/secret_keyring.c
index 78d7f09b3b..3b332276ef 100644
--- a/crypto/secret_keyring.c
+++ b/crypto/secret_keyring.c
@@ -41,7 +41,7 @@ qcrypto_secret_keyring_load_data(QCryptoSecretCommon *sec_common,
Error **errp)
{
QCryptoSecretKeyring *secret = QCRYPTO_SECRET_KEYRING(sec_common);
- uint8_t *buffer = NULL;
+ g_autofree uint8_t *buffer = NULL;
long retcode;
*output = NULL;
@@ -61,12 +61,11 @@ qcrypto_secret_keyring_load_data(QCryptoSecretCommon *sec_common,
retcode = keyctl_read(secret->serial, buffer, retcode);
if (retcode < 0) {
- g_free(buffer);
goto keyctl_error;
}
*outputlen = retcode;
- *output = buffer;
+ *output = g_steal_pointer(&buffer);
return;
keyctl_error:
--
2.43.0
On Fri, Jul 10, 2026 at 12:27:50AM +0300, Evgeny Kolmakov wrote: > Use g_autofree attribute to reduce the amount > of manual g_free() calls and 'goto out' code > > Signed-off-by: Evgeny Kolmakov <randomjack94dev@gmail.com> > --- > crypto/block.c | 17 ++++++----------- > crypto/hmac-gcrypt.c | 12 ++++-------- > crypto/hmac-glib.c | 10 +++------- > crypto/ivgen-essiv.c | 15 ++++----------- > crypto/ivgen.c | 6 ++---- > crypto/secret_keyring.c | 5 ++--- > 6 files changed, 21 insertions(+), 44 deletions(-) Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel -- |: https://berrange.com ~~ https://hachyderm.io/@berrange :| |: https://libvirt.org ~~ https://entangle-photo.org :| |: https://pixelfed.art/berrange ~~ https://fstop138.berrange.com :|
© 2016 - 2026 Red Hat, Inc.