0004-makefs-strdup-arguments-to-mkfs.patch 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. From c315b79fb43a4d921a533ba0c2cb303324887993 Mon Sep 17 00:00:00 2001
  2. From: Oliver Giles <ohw.giles@gmail.com>
  3. Date: Thu, 13 Feb 2020 08:55:57 +0200
  4. Subject: [PATCH] makefs: strdup arguments to mkfs
  5. Don't pass values from argv[] directly to child process forked using
  6. safe_fork, because it clears argv[]. strdup them first.
  7. [Brandon: backport from https://github.com/systemd/systemd/commit/c315b79fb43a4d921a533ba0c2cb303324887993]
  8. Signed-off-by: Brandon Maier <brandon.maier@rockwellcollins.com>
  9. ---
  10. src/partition/makefs.c | 13 +++++++++----
  11. 1 file changed, 9 insertions(+), 4 deletions(-)
  12. diff --git a/src/partition/makefs.c b/src/partition/makefs.c
  13. index 951989cbb6..d73d67c4e8 100644
  14. --- a/src/partition/makefs.c
  15. +++ b/src/partition/makefs.c
  16. @@ -41,8 +41,7 @@ static int makefs(const char *type, const char *device) {
  17. }
  18. static int run(int argc, char *argv[]) {
  19. - const char *device, *type;
  20. - _cleanup_free_ char *detected = NULL;
  21. + _cleanup_free_ char *device = NULL, *type = NULL, *detected = NULL;
  22. struct stat st;
  23. int r;
  24. @@ -52,8 +51,14 @@ static int run(int argc, char *argv[]) {
  25. return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
  26. "This program expects two arguments.");
  27. - type = argv[1];
  28. - device = argv[2];
  29. + /* type and device must be copied because makefs calls safe_fork, which clears argv[] */
  30. + type = strdup(argv[1]);
  31. + if (!type)
  32. + return -ENOMEM;
  33. +
  34. + device = strdup(argv[2]);
  35. + if (!device)
  36. + return -ENOMEM;
  37. if (stat(device, &st) < 0)
  38. return log_error_errno(errno, "Failed to stat \"%s\": %m", device);
  39. --
  40. 2.23.0