From: Oliver Giles Date: Thu, 13 Feb 2020 06:55:57 +0000 (+0200) Subject: makefs: strdup arguments to mkfs X-Git-Tag: v245-rc2~61 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c315b79fb43a4d921a533ba0c2cb303324887993;p=thirdparty%2Fsystemd.git makefs: strdup arguments to mkfs Don't pass values from argv[] directly to child process forked using safe_fork, because it clears argv[]. strdup them first. --- diff --git a/src/partition/makefs.c b/src/partition/makefs.c index 951989cbb6f..d73d67c4e8a 100644 --- a/src/partition/makefs.c +++ b/src/partition/makefs.c @@ -41,8 +41,7 @@ static int makefs(const char *type, const char *device) { } static int run(int argc, char *argv[]) { - const char *device, *type; - _cleanup_free_ char *detected = NULL; + _cleanup_free_ char *device = NULL, *type = NULL, *detected = NULL; struct stat st; int r; @@ -52,8 +51,14 @@ static int run(int argc, char *argv[]) { return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "This program expects two arguments."); - type = argv[1]; - device = argv[2]; + /* type and device must be copied because makefs calls safe_fork, which clears argv[] */ + type = strdup(argv[1]); + if (!type) + return -ENOMEM; + + device = strdup(argv[2]); + if (!device) + return -ENOMEM; if (stat(device, &st) < 0) return log_error_errno(errno, "Failed to stat \"%s\": %m", device);