From 3c5fb0f885e64ae1cb2ebcbff4340d2dbe4e8f38 Mon Sep 17 00:00:00 2001 From: Thomas Richter Date: Wed, 27 Nov 2024 13:36:05 +0100 Subject: [PATCH] cpumf/lshwc: Free buffer allocated with malloc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Free all buffers allocated with malloc before program exit. Handle memory leak in libcpumf_cpuset(). Signed-off-by: Thomas Richter Signed-off-by: Jan Höppner --- cpumf/lshwc.c | 1 + libcpumf/libcpumf_cpuset.c | 11 ++++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/cpumf/lshwc.c b/cpumf/lshwc.c index 38a47f4e..aba27d36 100644 --- a/cpumf/lshwc.c +++ b/cpumf/lshwc.c @@ -767,5 +767,6 @@ int main(int argc, char **argv) } free_counternames(); free(check); + free(ioctlbuffer); return ch; } diff --git a/libcpumf/libcpumf_cpuset.c b/libcpumf/libcpumf_cpuset.c index ae8b244f..91dfbce7 100644 --- a/libcpumf/libcpumf_cpuset.c +++ b/libcpumf/libcpumf_cpuset.c @@ -11,14 +11,14 @@ #include #include "lib/libcpumf.h" +#include "lib/util_libc.h" int libcpumf_cpuset(const char *parm, cpu_set_t *mask) { - char *cp, *buffer = strdup(parm); + char *cp, *buffer = util_strdup(parm); + char *cp2 = buffer; int to, from, rc; - if (!buffer) /* Errno set to ENOMEM */ - return -1; /* Check for invalid characters, such as 11.12 instead 11-12 * but allow blanks and newline. Newline is appended * when the string is taken from sysfs files, for example @@ -26,7 +26,8 @@ int libcpumf_cpuset(const char *parm, cpu_set_t *mask) */ if (strspn(buffer, "0123456789-,\n ") != strlen(buffer)) { errno = EINVAL; - return -1; + rc = -1; + goto out; } CPU_ZERO(mask); for (; (cp = strtok(buffer, ",")); buffer = NULL) { @@ -51,7 +52,7 @@ int libcpumf_cpuset(const char *parm, cpu_set_t *mask) } rc = 0; out: - free(buffer); + free(cp2); return rc; }