X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fnspawn%2Fnspawn.c;h=a49cbc2238cf142de9adcd6b0929407794e2a3bb;hb=d7e011e5bfa3361faf52b7b2dbacd11373d7fb86;hp=1e7df38c16c54340c05713e77267af1b70335e2c;hpb=aff38e74bd776471f15ba54b305a24b0251eb865;p=elogind.git diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index 1e7df38c1..a49cbc223 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -173,7 +173,7 @@ static int parse_argv(int argc, char *argv[]) { assert(argc >= 0); assert(argv); - while ((c = getopt_long(argc, argv, "+hD:u:C:bj", options, NULL)) >= 0) { + while ((c = getopt_long(argc, argv, "+hD:u:C:bM:j", options, NULL)) >= 0) { switch (c) { @@ -1212,7 +1212,7 @@ finish: int main(int argc, char *argv[]) { pid_t pid = 0; int r = EXIT_FAILURE, k; - _cleanup_free_ char *machine_root = NULL, *newcg = NULL; + _cleanup_free_ char *machine_root = NULL, *name = NULL, *escaped = NULL, *newcg = NULL; _cleanup_close_ int master = -1; int n_fd_passed; const char *console = NULL; @@ -1298,9 +1298,21 @@ int main(int argc, char *argv[]) { goto finish; } - newcg = strjoin(machine_root, "/", arg_machine, ".nspawn", NULL); + name = strappend(arg_machine, ".nspawn"); + if (!name) { + log_oom(); + goto finish; + } + + escaped = cg_escape(name); + if (!escaped) { + log_oom(); + goto finish; + } + + newcg = strjoin(machine_root, "/", escaped, NULL); if (!newcg) { - log_error("Failed to allocate cgroup path."); + log_oom(); goto finish; }