From: Jeremy Kerr Date: Thu, 14 Nov 2013 05:18:59 +0000 (+1100) Subject: lib/system: Don't leak in pb_mkdir_recursive X-Git-Tag: v1.0.0~331 X-Git-Url: https://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=89f43bf771edf352479f26395b56594201f0d958 lib/system: Don't leak in pb_mkdir_recursive If the mkdir fails, we'll exit without freeing str. Signed-off-by: Jeremy Kerr --- diff --git a/lib/system/system.c b/lib/system/system.c index 0253ac8..917d444 100644 --- a/lib/system/system.c +++ b/lib/system/system.c @@ -39,8 +39,8 @@ enum tftp_type tftp_type = TFTP_TYPE; int pb_mkdir_recursive(const char *dir) { struct stat statbuf; + int rc, mode = 0755; char *str, *sep; - int mode = 0755; if (!*dir) return 0; @@ -57,6 +57,8 @@ int pb_mkdir_recursive(const char *dir) str = talloc_strdup(NULL, dir); sep = strchr(*str == '/' ? str + 1 : str, '/'); + rc = 0; + while (1) { /* terminate the path at sep */ @@ -65,7 +67,8 @@ int pb_mkdir_recursive(const char *dir) if (mkdir(str, mode) && errno != EEXIST) { pb_log("mkdir(%s): %s\n", str, strerror(errno)); - return -1; + rc = -1; + break; } if (!sep) @@ -78,7 +81,7 @@ int pb_mkdir_recursive(const char *dir) talloc_free(str); - return 0; + return rc; } int pb_rmdir_recursive(const char *base, const char *dir)