]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cryptsetup-generator: Don't mistake NULL input as OOM (#7688)
authorJan Alexander Steffens <jan.steffens@gmail.com>
Mon, 18 Dec 2017 13:47:18 +0000 (14:47 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 18 Dec 2017 13:47:18 +0000 (14:47 +0100)
Since systemd v236, several Arch users complained that
systemd-cryptsetup-generator exits with an OOM error and that it
prevents the boot from continuing.

Investigating the diff of cryptsetup-generator between v235 and v236 I
noticed that create_disk allowed for the `password` and `filtered`
variables to be NULL (they're handled with `strempty()`) but not their
`*_escaped` versions, and returned OOM errors in those cases.

Fix this by checking that the input string is non-NULL before deciding
that `specifier_escape` had an OOM error.

I could not test this fix myself, but some users have reported success.

Downstream bug: https://bugs.archlinux.org/task/56733

src/cryptsetup/cryptsetup-generator.c

index 531edc6847476eb6826245a9528bbb9dfd2e3836..b41faed6ad4023b0318cba90f6e3d29c2b8f03fc 100644 (file)
@@ -107,7 +107,7 @@ static int create_disk(
                 return log_error_errno(r, "Failed to generate unit name: %m");
 
         password_escaped = specifier_escape(password);
-        if (!password_escaped)
+        if (password && !password_escaped)
                 return log_oom();
 
         r = generator_open_unit_file(arg_dest, NULL, n, &f);
@@ -177,7 +177,7 @@ static int create_disk(
                 return r;
 
         filtered_escaped = specifier_escape(filtered);
-        if (!filtered_escaped)
+        if (filtered && !filtered_escaped)
                 return log_oom();
 
         fprintf(f,