summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Giles <ohw.giles@gmail.com>2020-02-13 08:55:57 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2020-02-13 20:36:17 +0900
commitc315b79fb43a4d921a533ba0c2cb303324887993 (patch)
treecb3778139be75714f1d126c5d5549d3f6971f7c4
parent1d6cfd25a23b2da1364e5dc62c3cf28b37277d32 (diff)
downloadsystemd-c315b79fb43a4d921a533ba0c2cb303324887993.tar.gz
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.
-rw-r--r--src/partition/makefs.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/partition/makefs.c b/src/partition/makefs.c
index 951989cbb6..d73d67c4e8 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);