From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Alex Bennée" <alex.bennee@linaro.org>,
"Pierrick Bouvier" <pierrick.bouvier@oss.qualcomm.com>,
devel@lists.libvirt.org,
"Marc-André Lureau" <marcandre.lureau@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
"Evgeny Kolmakov" <randomjack94dev@gmail.com>
Subject: [PULL 01/13] crypto: Use g_autofree
Date: Fri, 4 Sep 2026 11:59:17 +0100 [thread overview]
Message-ID: <20260904105929.3450663-2-berrange@redhat.com> (raw)
In-Reply-To: <20260904105929.3450663-1-berrange@redhat.com>
From: Evgeny Kolmakov <randomjack94dev@gmail.com>
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>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.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.55.0
next prev parent reply other threads:[~2026-09-04 11:00 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-04 10:59 [PULL 00/13] Misc fixes patches Daniel P. Berrangé
2026-09-04 10:59 ` Daniel P. Berrangé [this message]
2026-09-04 10:59 ` [PULL 02/13] crypto/x509-utils: don't double set errp Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 03/13] crypto/x509-utils: propagate the error Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 04/13] io/channel-socket: do not treat a zero length write as an error Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 05/13] io/channel-websock: send an HTTP 400 when the greeting has no space Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 06/13] io/channel-websock: handle a blocked write during the handshake Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 07/13] tests/unit: add websock handshake test Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 08/13] io/channel-websock: do not lose QIO_CHANNEL_ERR_BLOCK while reading Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 09/13] tests/unit: cover blocked IO during the websock handshake Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 10/13] crypto: deprecate the AF_ALG crypto backend Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 11/13] gitlab: use --emacs --quiet for checkpatch.pl instead of --terse Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 12/13] configure: correctly honour --disable-containers Daniel P. Berrangé
2026-09-04 10:59 ` [PULL 13/13] docs/system/security: exclude uninitialized stack variables as bugs Daniel P. Berrangé
2026-09-04 12:19 ` [PULL 00/13] Misc fixes patches Daniel P. Berrangé
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260904105929.3450663-2-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=devel@lists.libvirt.org \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=pierrick.bouvier@oss.qualcomm.com \
--cc=qemu-devel@nongnu.org \
--cc=randomjack94dev@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.