summaryrefslogtreecommitdiff
path: root/sys-apps/systemd/files/236-0001-cryptsetup-generator-Don-t-mistake-NULL-input-as-OOM.patch
blob: d1c451835e311482657479cd76fce44e4e54bd8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From 357ffd95294e1f9a1e91f8ca01213fb7db2b7614 Mon Sep 17 00:00:00 2001
From: Jan Alexander Steffens <jan.steffens@gmail.com>
Date: Mon, 18 Dec 2017 14:47:18 +0100
Subject: [PATCH] cryptsetup-generator: Don't mistake NULL input as OOM (#7688)

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 | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
index 7e61332e5..f91451353 100644
--- a/src/cryptsetup/cryptsetup-generator.c
+++ b/src/cryptsetup/cryptsetup-generator.c
@@ -111,7 +111,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();
 
         f = fopen(p, "wxe");
@@ -184,7 +184,7 @@ static int create_disk(
                 return r;
 
         filtered_escaped = specifier_escape(filtered);
-        if (!filtered_escaped)
+        if (filtered && !filtered_escaped)
                 return log_oom();
 
         fprintf(f,
-- 
2.15.1