From eb260af6bf0a63e076240398aa6568d5530bdee1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20G=C3=B6ttsche?= Date: Mon, 21 Sep 2020 13:47:39 +0200 Subject: [PATCH] Fix memory leak on cgroup read failure --- linux/LinuxProcess.c | 2 +- linux/LinuxProcessList.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/linux/LinuxProcess.c b/linux/LinuxProcess.c index bef648a9..9dd3b93d 100644 --- a/linux/LinuxProcess.c +++ b/linux/LinuxProcess.c @@ -251,7 +251,7 @@ void LinuxProcess_writeField(Process* this, RichString* str, ProcessField field) case VXID: xSnprintf(buffer, n, "%5u ", lp->vxid); break; #endif #ifdef HAVE_CGROUP - case CGROUP: xSnprintf(buffer, n, "%-10s ", lp->cgroup); break; + case CGROUP: xSnprintf(buffer, n, "%-10s ", lp->cgroup ? lp->cgroup : ""); break; #endif case OOM: xSnprintf(buffer, n, "%4u ", lp->oom); break; case IO_PRIORITY: { diff --git a/linux/LinuxProcessList.c b/linux/LinuxProcessList.c index a02509fc..55879236 100644 --- a/linux/LinuxProcessList.c +++ b/linux/LinuxProcessList.c @@ -509,7 +509,10 @@ static void LinuxProcessList_readCGroupFile(LinuxProcess* process, const char* d xSnprintf(filename, MAX_NAME, "%s/%s/cgroup", dirname, name); FILE* file = fopen(filename, "r"); if (!file) { - process->cgroup = xStrdup(""); + if (process->cgroup) { + free(process->cgroup); + process->cgroup = NULL; + } return; } char output[PROC_LINE_LENGTH + 1];