From a34ec87d2d97787bb62be4325ed2bd8f8ad5a183 Mon Sep 17 00:00:00 2001 From: Martin Kletzander Date: Sun, 7 Sep 2014 20:07:49 +0200 Subject: [PATCH] util: fix potential leak in error codepath Signed-off-by: Martin Kletzander (cherry picked from commit aaaa2d56bd47556b6857ecca33e4b28ab36c8488) Conflicts: src/util/virpidfile.c - undo temporary bisection fix in previous patch --- src/util/virpidfile.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/util/virpidfile.c b/src/util/virpidfile.c index 12ea810f0e..dd29701a75 100644 --- a/src/util/virpidfile.c +++ b/src/util/virpidfile.c @@ -529,6 +529,9 @@ virPidFileConstructPath(bool privileged, const char *progname, char **pidfile) { + int ret = -1; + char *rundir = NULL; + if (privileged) { /* * This is here just to allow calling this function with @@ -537,34 +540,32 @@ virPidFileConstructPath(bool privileged, if (!statedir) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("No statedir specified")); - goto error; + goto cleanup; } if (virAsprintf(pidfile, "%s/run/%s.pid", statedir, progname) < 0) - goto error; + goto cleanup; } else { - char *rundir = NULL; mode_t old_umask; if (!(rundir = virGetUserRuntimeDirectory())) - goto error; + goto cleanup; old_umask = umask(077); if (virFileMakePath(rundir) < 0) { umask(old_umask); - goto error; + goto cleanup; } umask(old_umask); if (virAsprintf(pidfile, "%s/%s.pid", rundir, progname) < 0) { VIR_FREE(rundir); - goto error; + goto cleanup; } - VIR_FREE(rundir); } - return 0; - - error: - return -1; + ret = 0; + cleanup: + VIR_FREE(rundir); + return ret; }