[PATCH 0/3] leak fixes and buffer allocation optimization
Peter Krempa (3): qemu: driver: Don't leak 'qemu_driver->backupPorts' secret: config: Don't leak 'cfg->secretsEncryptionKey' util: file: Shrink buffer returned from 'saferead_lim' to actual size src/qemu/qemu_driver.c | 1 + src/secret/secret_config.c | 1 + src/util/virfile.c | 1 + 3 files changed, 3 insertions(+) -- 2.53.0
From: Peter Krempa <pkrempa@redhat.com> ==2413993== 23 (16 direct, 7 indirect) bytes in 1 blocks are definitely lost in loss record 1,238 of 4,225 ==2413993== at 0x48FC683: calloc (vg_replace_malloc.c:1678) ==2413993== by 0x4ED0A51: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.8600.4) ==2413993== by 0x49A62CF: virPortAllocatorRangeNew (virportallocator.c:104) ==2413993== by 0xEA35F27: qemuStateInitialize (qemu_driver.c:723) ==2413993== by 0x4BABC76: virStateInitialize (libvirt.c:667) ==2413993== by 0x40148D4: daemonRunStateInit (remote_daemon.c:583) ==2413993== by 0x49BB8A5: virThreadHelper (virthread.c:256) ==2413993== by 0x52DD463: start_thread (in /usr/lib64/libc.so.6) ==2413993== by 0x5360413: clone (in /usr/lib64/libc.so.6) Fixes: 36cf50f85b9c8f3351332dc5302401e4b06176e1 Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/qemu/qemu_driver.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index ca26356a03..861795724a 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -1037,6 +1037,7 @@ qemuStateCleanup(void) virLockManagerPluginUnref(qemu_driver->lockManager); virSysinfoDefFree(qemu_driver->hostsysinfo); virPortAllocatorRangeFree(qemu_driver->migrationPorts); + virPortAllocatorRangeFree(qemu_driver->backupPorts); virPortAllocatorRangeFree(qemu_driver->webSocketPorts); virPortAllocatorRangeFree(qemu_driver->rdpPorts); virPortAllocatorRangeFree(qemu_driver->remotePorts); -- 2.53.0
From: Peter Krempa <pkrempa@redhat.com> ==2413993== 8,193 bytes in 1 blocks are definitely lost in loss record 4,201 of 4,225 ==2413993== at 0x48FC897: realloc (vg_replace_malloc.c:1804) ==2413993== by 0x4ED0B0A: g_realloc (in /usr/lib64/libglib-2.0.so.0.8600.4) ==2413993== by 0x494112B: virReallocN (viralloc.c:52) ==2413993== by 0x49684F6: saferead_lim (virfile.c:1511) ==2413993== by 0x4968C8B: virFileReadLimFD (virfile.c:1587) ==2413993== by 0x4968D2C: virFileReadAll (virfile.c:1613) ==2413993== by 0xC2CC488: virGetSecretsEncryptionKey (secret_config.c:93) ==2413993== by 0xC2CC488: virSecretDaemonConfigNew (secret_config.c:162) ==2413993== by 0xC2CADFD: secretStateInitialize (secret_driver.c:533) ==2413993== by 0x4BABC76: virStateInitialize (libvirt.c:667) ==2413993== by 0x40148D4: daemonRunStateInit (remote_daemon.c:583) ==2413993== by 0x49BB8A5: virThreadHelper (virthread.c:256) ==2413993== by 0x52DD463: start_thread (in /usr/lib64/libc.so.6) Fixes: 1c86748cf140a8710d6d8ec3ab3a2bd10ceeac67 Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/secret/secret_config.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/secret/secret_config.c b/src/secret/secret_config.c index 84514ac5d5..01db4bbe33 100644 --- a/src/secret/secret_config.c +++ b/src/secret/secret_config.c @@ -175,5 +175,6 @@ virSecretDaemonConfigDispose(void *obj) virSecretDaemonConfig *cfg = obj; virSecureErase(cfg->secretsEncryptionKey, cfg->secretsKeyLen); + g_free(cfg->secretsEncryptionKey); g_free(cfg->secretsEncryptionKeyPath); } -- 2.53.0
From: Peter Krempa <pkrempa@redhat.com> The bufer resizing algorithm resizes the buffer in increments of the value of the 'BUFSIZ' macro. On linux it's currently 8k. In case when the caller wants to retain the buffer for long time with little data read this creates massive overhead. Realloc the buffer to actual size before returning it to the user. Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- src/util/virfile.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/virfile.c b/src/util/virfile.c index 91d5853481..fbcaf15429 100644 --- a/src/util/virfile.c +++ b/src/util/virfile.c @@ -1523,6 +1523,7 @@ saferead_lim(int fd, size_t max_len, size_t *length) break; buf[size] = '\0'; *length = size; + VIR_REALLOC_N(buf, size + 1); return buf; } } -- 2.53.0
On Thu, Mar 26, 2026 at 06:50:20PM +0100, Peter Krempa via Devel wrote:
Peter Krempa (3): qemu: driver: Don't leak 'qemu_driver->backupPorts' secret: config: Don't leak 'cfg->secretsEncryptionKey' util: file: Shrink buffer returned from 'saferead_lim' to actual size
Reviewed-by: Pavel Hrdina <phrdina@redhat.com>
participants (2)
-
Pavel Hrdina -
Peter Krempa