]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
makefs: strdup arguments to mkfs
authorOliver Giles <ohw.giles@gmail.com>
Thu, 13 Feb 2020 06:55:57 +0000 (08:55 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 13 Feb 2020 11:36:17 +0000 (20:36 +0900)
Don't pass values from argv[] directly to child process forked using
safe_fork, because it clears argv[]. strdup them first.

src/partition/makefs.c

index 951989cbb6f818725958454fce39403d226c7ef7..d73d67c4e8a4d80e457af13794630c84af0e3970 100644 (file)
@@ -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);