Bug#924255: stretch-pu: package systemd/232-25+deb9u10

Michael Biebl biebl at debian.org
Sun Mar 10 16:18:23 GMT 2019


Am 10.03.19 um 16:55 schrieb Michael Biebl:
> I'd like to make a stable upload for systemd, fixing 5 separate issues.
> Two of them have a CVE.

...

> The fix for CVE-2018-15686/#912005 is the most invasive one. I based it
> partially on what was uploaded to old-stable by the debian-lts team.
> With this patch applied, the demo exploit from [1] no longer causes
> systemctl stop to hang.
> That said, I would appreciate a second pair of eyes to look over the
> patch.

Sorry, forgot to attach the debdiff.
Doing that now...

-- 
Why is it that all of the instruments seeking intelligent life in the
universe are pointed away from Earth?
-------------- next part --------------
diff --git a/debian/changelog b/debian/changelog
index ecb5bc7..9adb6f5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,22 @@
+systemd (232-25+deb9u10) stretch; urgency=medium
+
+  * journald: fix assertion failure on journal_file_link_data (Closes: #916880)
+  * tmpfiles: fix "e" to support shell style globs (Closes: #918400)
+  * mount-util: accept that name_to_handle_at() might fail with EPERM.
+    Container managers frequently block name_to_handle_at(), returning
+    EACCES or EPERM when this is issued. Accept that, and simply fall back
+    to fdinfo-based checks. (Closes: #917122)
+  * automount: ack automount requests even when already mounted.
+    Fixes a race condition in systemd which could result in automount requests
+    not being serviced and processes using them to hang, causing denial of
+    service. (CVE-2018-1049)
+  * core: when deserializing state always use read_line(…, LONG_LINE_MAX, …)
+    Fixes improper serialization on upgrade which can influence systemd
+    execution environment and lead to root privilege escalation.
+    (CVE-2018-15686, Closes: #912005)
+
+ -- Michael Biebl <biebl at debian.org>  Sun, 10 Mar 2019 15:52:46 +0100
+
 systemd (232-25+deb9u9) stretch-security; urgency=high
 
   * Non-maintainer upload by the Security Team.
diff --git a/debian/patches/automount-ack-automount-requests-even-when-already-mounte.patch b/debian/patches/automount-ack-automount-requests-even-when-already-mounte.patch
new file mode 100644
index 0000000..36d5ee1
--- /dev/null
+++ b/debian/patches/automount-ack-automount-requests-even-when-already-mounte.patch
@@ -0,0 +1,86 @@
+From: Anchor Cat <githubanchorcat at anchor.net.au>
+Date: Wed, 10 May 2017 21:23:58 +1000
+Subject: automount: ack automount requests even when already mounted (#5916)
+
+If a process accesses an autofs filesystem while systemd is in the
+middle of starting the mount unit on top of it, it is possible for the
+autofs_ptype_missing_direct request from the kernel to be received after
+the mount unit has been fully started:
+
+  systemd forks and execs mount             ...
+            ...                     access autofs, blocks
+  mount exits                               ...
+  systemd receives SIGCHLD                  ...
+            ...                     kernel sends request
+  systemd receives request                  ...
+
+systemd needs to respond to this request, otherwise the kernel will
+continue to block access to the mount point.
+
+(cherry picked from commit e7d54bf58789545a9eb0b3964233defa0b007318)
+---
+ src/core/automount.c | 33 ++++++++++++++++++---------------
+ 1 file changed, 18 insertions(+), 15 deletions(-)
+
+diff --git a/src/core/automount.c b/src/core/automount.c
+index f091a9a..a64374b 100644
+--- a/src/core/automount.c
++++ b/src/core/automount.c
+@@ -742,8 +742,9 @@ static void automount_stop_expire(Automount *a) {
+         (void) sd_event_source_set_enabled(a->expire_event_source, SD_EVENT_OFF);
+ }
+ 
+-static void automount_enter_runnning(Automount *a) {
++static void automount_enter_running(Automount *a) {
+         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
++        Unit *trigger;
+         struct stat st;
+         int r;
+ 
+@@ -772,22 +773,24 @@ static void automount_enter_runnning(Automount *a) {
+                 goto fail;
+         }
+ 
+-        if (!S_ISDIR(st.st_mode) || st.st_dev != a->dev_id)
++        /* The mount unit may have been explicitly started before we got the
++         * autofs request. Ack it to unblock anything waiting on the mount point. */
++        if (!S_ISDIR(st.st_mode) || st.st_dev != a->dev_id) {
+                 log_unit_info(UNIT(a), "Automount point already active?");
+-        else {
+-                Unit *trigger;
++                automount_send_ready(a, a->tokens, 0);
++                return;
++        }
+ 
+-                trigger = UNIT_TRIGGER(UNIT(a));
+-                if (!trigger) {
+-                        log_unit_error(UNIT(a), "Unit to trigger vanished.");
+-                        goto fail;
+-                }
++        trigger = UNIT_TRIGGER(UNIT(a));
++        if (!trigger) {
++                log_unit_error(UNIT(a), "Unit to trigger vanished.");
++                goto fail;
++        }
+ 
+-                r = manager_add_job(UNIT(a)->manager, JOB_START, trigger, JOB_REPLACE, &error, NULL);
+-                if (r < 0) {
+-                        log_unit_warning(UNIT(a), "Failed to queue mount startup job: %s", bus_error_message(&error, r));
+-                        goto fail;
+-                }
++        r = manager_add_job(UNIT(a)->manager, JOB_START, trigger, JOB_REPLACE, &error, NULL);
++        if (r < 0) {
++                log_unit_warning(UNIT(a), "Failed to queue mount startup job: %s", bus_error_message(&error, r));
++                goto fail;
+         }
+ 
+         automount_set_state(a, AUTOMOUNT_RUNNING);
+@@ -1012,7 +1015,7 @@ static int automount_dispatch_io(sd_event_source *s, int fd, uint32_t events, vo
+                         goto fail;
+                 }
+ 
+-                automount_enter_runnning(a);
++                automount_enter_running(a);
+                 break;
+ 
+         case autofs_ptype_expire_direct:
diff --git a/debian/patches/backport-read_line-from-systemd-master.patch b/debian/patches/backport-read_line-from-systemd-master.patch
new file mode 100644
index 0000000..c77ba09
--- /dev/null
+++ b/debian/patches/backport-read_line-from-systemd-master.patch
@@ -0,0 +1,167 @@
+From: =?utf-8?q?Antoine_Beaupr=C3=A9?= <anarcat at debian.org>
+Date: Sun, 10 Mar 2019 15:04:40 +0100
+Subject: backport read_line() from systemd master
+
+CVE-2018-15686 requires a refactoring of fgets() to use the internal
+read_line() instead, which is not present in v232.
+---
+ src/basic/def.h    |  2 ++
+ src/basic/fileio.c | 94 +++++++++++++++++++++++++++++++++++++++++++++---------
+ src/basic/fileio.h |  2 ++
+ 3 files changed, 83 insertions(+), 15 deletions(-)
+
+diff --git a/src/basic/def.h b/src/basic/def.h
+index 2266eff..756ed91 100644
+--- a/src/basic/def.h
++++ b/src/basic/def.h
+@@ -88,3 +88,5 @@
+         "/usr/local/lib/" n "\0" \
+         "/usr/lib/" n "\0" \
+         _CONF_PATHS_SPLIT_USR(n)
++
++#define LONG_LINE_MAX (1U*1024U*1024U)
+diff --git a/src/basic/fileio.c b/src/basic/fileio.c
+index 1615456..0652959 100644
+--- a/src/basic/fileio.c
++++ b/src/basic/fileio.c
+@@ -27,6 +27,8 @@
+ #include <sys/stat.h>
+ #include <sys/types.h>
+ #include <unistd.h>
++#include <stdio.h>
++#include <stdio_ext.h>
+ 
+ #include "alloc-util.h"
+ #include "ctype.h"
+@@ -47,6 +49,7 @@
+ #include "time-util.h"
+ #include "umask-util.h"
+ #include "utf8.h"
++#include "def.h"
+ 
+ #define READ_FULL_BYTES_MAX (4U*1024U*1024U)
+ 
+@@ -154,7 +157,7 @@ fail:
+ 
+ int read_one_line_file(const char *fn, char **line) {
+         _cleanup_fclose_ FILE *f = NULL;
+-        char t[LINE_MAX], *c;
++        int r;
+ 
+         assert(fn);
+         assert(line);
+@@ -162,22 +165,11 @@ int read_one_line_file(const char *fn, char **line) {
+         f = fopen(fn, "re");
+         if (!f)
+                 return -errno;
++        (void) __fsetlocking(f, FSETLOCKING_BYCALLER);
+ 
+-        if (!fgets(t, sizeof(t), f)) {
+-
+-                if (ferror(f))
+-                        return errno > 0 ? -errno : -EIO;
+-
+-                t[0] = 0;
+-        }
+-
+-        c = strdup(t);
+-        if (!c)
+-                return -ENOMEM;
+-        truncate_nl(c);
++        r = read_line(f, LONG_LINE_MAX, line);
+ 
+-        *line = c;
+-        return 0;
++        return r < 0 ? r : 0;
+ }
+ 
+ int verify_file(const char *fn, const char *blob, bool accept_extra_nl) {
+@@ -1409,3 +1401,75 @@ int read_nul_string(FILE *f, char **ret) {
+ 
+         return 0;
+ }
++
++DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, funlockfile);
++
++int read_line(FILE *f, size_t limit, char **ret) {
++        _cleanup_free_ char *buffer = NULL;
++        size_t n = 0, allocated = 0, count = 0;
++
++        assert(f);
++
++        /* Something like a bounded version of getline().
++         *
++         * Considers EOF, \n and \0 end of line delimiters, and does not include these delimiters in the string
++         * returned.
++         *
++         * Returns the number of bytes read from the files (i.e. including delimiters — this hence usually differs from
++         * the number of characters in the returned string). When EOF is hit, 0 is returned.
++         *
++         * The input parameter limit is the maximum numbers of characters in the returned string, i.e. excluding
++         * delimiters. If the limit is hit we fail and return -ENOBUFS.
++         *
++         * If a line shall be skipped ret may be initialized as NULL. */
++
++        if (ret) {
++                if (!GREEDY_REALLOC(buffer, allocated, 1))
++                        return -ENOMEM;
++        }
++
++        {
++                _unused_ _cleanup_(funlockfilep) FILE *flocked = f;
++                flockfile(f);
++
++                for (;;) {
++                        int c;
++
++                        if (n >= limit)
++                                return -ENOBUFS;
++
++                        errno = 0;
++                        c = fgetc_unlocked(f);
++                        if (c == EOF) {
++                                /* if we read an error, and have no data to return, then propagate the error */
++                                if (ferror_unlocked(f) && n == 0)
++                                        return errno > 0 ? -errno : -EIO;
++
++                                break;
++                        }
++
++                        count++;
++
++                        if (IN_SET(c, '\n', 0)) /* Reached a delimiter */
++                                break;
++
++                        if (ret) {
++                                if (!GREEDY_REALLOC(buffer, allocated, n + 2))
++                                        return -ENOMEM;
++
++                                buffer[n] = (char) c;
++                        }
++
++                        n++;
++                }
++        }
++
++        if (ret) {
++                buffer[n] = 0;
++
++                *ret = buffer;
++                buffer = NULL;
++        }
++
++        return (int) count;
++}
+diff --git a/src/basic/fileio.h b/src/basic/fileio.h
+index b58c83e..336491f 100644
+--- a/src/basic/fileio.h
++++ b/src/basic/fileio.h
+@@ -82,6 +82,8 @@ int read_timestamp_file(const char *fn, usec_t *ret);
+ 
+ int fputs_with_space(FILE *f, const char *s, const char *separator, bool *space);
+ 
++int read_line(FILE *f, size_t limit, char **ret);
++
+ int open_tmpfile_unlinkable(const char *directory, int flags);
+ int open_tmpfile_linkable(const char *target, int flags, char **ret_path);
+ 
diff --git a/debian/patches/core-when-deserializing-state-always-use-read_line-LONG_L.patch b/debian/patches/core-when-deserializing-state-always-use-read_line-LONG_L.patch
new file mode 100644
index 0000000..ea17dd7
--- /dev/null
+++ b/debian/patches/core-when-deserializing-state-always-use-read_line-LONG_L.patch
@@ -0,0 +1,176 @@
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 17 Oct 2018 18:36:24 +0200
+Subject: =?utf-8?q?core=3A_when_deserializing_state_always_use_read=5Fline?=
+ =?utf-8?q?=28=E2=80=A6=2C_LONG=5FLINE=5FMAX=2C_=E2=80=A6=29?=
+
+This should be much better than fgets(), as we can read substantially
+longer lines and overly long lines result in proper errors.
+
+Fixes a vulnerability discovered by Jann Horn at Google.
+
+CVE-2018-15686
+LP: #1796402
+https://bugzilla.redhat.com/show_bug.cgi?id=1639071
+
+(cherry picked from commit 8948b3415d762245ebf5e19d80b97d4d8cc208c1)
+---
+ src/core/job.c     | 19 +++++++++++--------
+ src/core/manager.c | 39 +++++++++++++++++----------------------
+ src/core/unit.c    | 18 ++++++++----------
+ 3 files changed, 36 insertions(+), 40 deletions(-)
+
+diff --git a/src/core/job.c b/src/core/job.c
+index ac6910a..bd947b8 100644
+--- a/src/core/job.c
++++ b/src/core/job.c
+@@ -27,6 +27,7 @@
+ #include "dbus-job.h"
+ #include "dbus.h"
+ #include "escape.h"
++#include "fileio.h"
+ #include "job.h"
+ #include "log.h"
+ #include "macro.h"
+@@ -1020,24 +1021,26 @@ int job_serialize(Job *j, FILE *f) {
+ }
+ 
+ int job_deserialize(Job *j, FILE *f) {
++        int r;
++
+         assert(j);
+         assert(f);
+ 
+         for (;;) {
+-                char line[LINE_MAX], *l, *v;
++                _cleanup_free_ char *line = NULL;
++                char *l, *v;
+                 size_t k;
+ 
+-                if (!fgets(line, sizeof(line), f)) {
+-                        if (feof(f))
+-                                return 0;
+-                        return -errno;
+-                }
++                r = read_line(f, LONG_LINE_MAX, &line);
++                if (r < 0)
++                        return log_error_errno(r, "Failed to read serialization line: %m");
++                if (r == 0)
++                        return 0;
+ 
+-                char_array_0(line);
+                 l = strstrip(line);
+ 
+                 /* End marker */
+-                if (l[0] == 0)
++                if (isempty(l))
+                         return 0;
+ 
+                 k = strcspn(l, "=");
+diff --git a/src/core/manager.c b/src/core/manager.c
+index 190019c..363e221 100644
+--- a/src/core/manager.c
++++ b/src/core/manager.c
+@@ -2572,21 +2572,19 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+         m->n_reloading++;
+ 
+         for (;;) {
+-                char line[LINE_MAX], *l;
+-
+-                if (!fgets(line, sizeof(line), f)) {
+-                        if (feof(f))
+-                                r = 0;
+-                        else
+-                                r = -errno;
++                _cleanup_free_ char *line = NULL;
++                const char *l;
+ 
++                r = read_line(f, LONG_LINE_MAX, &line);
++                if (r < 0) {
++                        r = log_error_errno(r, "Failed to read serialization line: %m");
+                         goto finish;
+                 }
++                if (r == 0)
++                        break;
+ 
+-                char_array_0(line);
+                 l = strstrip(line);
+-
+-                if (l[0] == 0)
++                if (isempty(l)) /* end marker */
+                         break;
+ 
+                 if (startswith(l, "current-job-id=")) {
+@@ -2726,21 +2724,21 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+ 
+         for (;;) {
+                 Unit *u;
+-                char name[UNIT_NAME_MAX+2];
++                _cleanup_free_ char *line = NULL;
++                const char* unit_name;
+ 
+                 /* Start marker */
+-                if (!fgets(name, sizeof(name), f)) {
+-                        if (feof(f))
+-                                r = 0;
+-                        else
+-                                r = -errno;
+-
++                r = read_line(f, LONG_LINE_MAX, &line);
++                if (r < 0) {
++                        r = log_error_errno(r, "Failed to read serialization line: %m");
+                         goto finish;
+                 }
++                if (r == 0)
++                        break;
+ 
+-                char_array_0(name);
++                unit_name = strstrip(line);
+ 
+-                r = manager_load_unit(m, strstrip(name), NULL, NULL, &u);
++                r = manager_load_unit(m, unit_name, NULL, NULL, &u);
+                 if (r < 0)
+                         goto finish;
+ 
+@@ -2750,9 +2748,6 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
+         }
+ 
+ finish:
+-        if (ferror(f))
+-                r = -EIO;
+-
+         assert(m->n_reloading > 0);
+         m->n_reloading--;
+ 
+diff --git a/src/core/unit.c b/src/core/unit.c
+index 0ab6d92..34a2224 100644
+--- a/src/core/unit.c
++++ b/src/core/unit.c
+@@ -2802,20 +2802,18 @@ int unit_deserialize(Unit *u, FILE *f, FDSet *fds) {
+                 rt = (ExecRuntime**) ((uint8_t*) u + offset);
+ 
+         for (;;) {
+-                char line[LINE_MAX], *l, *v;
++                _cleanup_free_ char *line = NULL;
++                char *l, *v;
+                 size_t k;
+ 
+-                if (!fgets(line, sizeof(line), f)) {
+-                        if (feof(f))
+-                                return 0;
+-                        return -errno;
+-                }
++                r = read_line(f, LONG_LINE_MAX, &line);
++                if (r < 0)
++                        return log_error_errno(r, "Failed to read serialization line: %m");
++                if (r == 0) /* eof */
++                        break;
+ 
+-                char_array_0(line);
+                 l = strstrip(line);
+-
+-                /* End marker */
+-                if (isempty(l))
++                if (isempty(l)) /* End marker */
+                         break;
+ 
+                 k = strcspn(l, "=");
diff --git a/debian/patches/journald-fix-assertion-failure-on-journal_file_link_data..patch b/debian/patches/journald-fix-assertion-failure-on-journal_file_link_data..patch
new file mode 100644
index 0000000..b5e6a1e
--- /dev/null
+++ b/debian/patches/journald-fix-assertion-failure-on-journal_file_link_data..patch
@@ -0,0 +1,31 @@
+From: Yusuke Nojima <nojima718 at gmail.com>
+Date: Sun, 30 Apr 2017 02:37:53 +0900
+Subject: journald: fix assertion failure on journal_file_link_data. (#5843)
+
+When some error occurs during the initialization of JournalFile,
+the JournalFile can be left without hash tables created.  When later
+trying to append an entry to that file, the assertion in
+journal_file_link_data() fails, and journald crashes.
+
+This patch fix this issue by checking *_hash_table_size in
+journal_file_verify_header().
+
+(cherry picked from commit 5b3cc0c86aeddd4615e7e28e79aa89e5b77a6507)
+---
+ src/journal/journal-file.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
+index d3e0214..b6962a3 100644
+--- a/src/journal/journal-file.c
++++ b/src/journal/journal-file.c
+@@ -590,6 +590,9 @@ static int journal_file_verify_header(JournalFile *f) {
+                         return -EBUSY;
+                 }
+ 
++                if (f->header->field_hash_table_size == 0 || f->header->data_hash_table_size == 0)
++                        return -EBADMSG;
++
+                 /* Don't permit appending to files from the future. Because otherwise the realtime timestamps wouldn't
+                  * be strictly ordered in the entries in the file anymore, and we can't have that since it breaks
+                  * bisection. */
diff --git a/debian/patches/mount-util-accept-that-name_to_handle_at-might-fail-with-.patch b/debian/patches/mount-util-accept-that-name_to_handle_at-might-fail-with-.patch
new file mode 100644
index 0000000..f1e22ff
--- /dev/null
+++ b/debian/patches/mount-util-accept-that-name_to_handle_at-might-fail-with-.patch
@@ -0,0 +1,48 @@
+From: Lennart Poettering <lennart at poettering.net>
+Date: Wed, 1 Mar 2017 17:35:05 +0100
+Subject: mount-util: accept that name_to_handle_at() might fail with EPERM
+ (#5499)
+
+Container managers frequently block name_to_handle_at(), returning
+EACCES or EPERM when this is issued. Accept that, and simply fall back
+to to fdinfo-based checks.
+
+Note that we accept either EACCES or EPERM here, as container managers
+can choose the error code and aren't very good on agreeing on just one.
+
+(note that this is a non-issue with nspawn, as we permit
+name_to_handle_at() there, only block open_by_handle_at(), which should
+be sufficiently safe).
+
+(cherry picked from commit 059c35f507b3efecf1b7d77e62427766f7a25b1a)
+---
+ src/basic/mount-util.c | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/src/basic/mount-util.c b/src/basic/mount-util.c
+index 5d37fb4..265d5fd 100644
+--- a/src/basic/mount-util.c
++++ b/src/basic/mount-util.c
+@@ -111,9 +111,10 @@ int fd_is_mount_point(int fd, const char *filename, int flags) {
+ 
+         r = name_to_handle_at(fd, filename, &h.handle, &mount_id, flags);
+         if (r < 0) {
+-                if (errno == ENOSYS)
+-                        /* This kernel does not support name_to_handle_at()
+-                         * fall back to simpler logic. */
++                if (IN_SET(errno, ENOSYS, EACCES, EPERM))
++                        /* This kernel does not support name_to_handle_at() at all, or the syscall was blocked (maybe
++                         * through seccomp, because we are running inside of a container?): fall back to simpler
++                         * logic. */
+                         goto fallback_fdinfo;
+                 else if (errno == EOPNOTSUPP)
+                         /* This kernel or file system does not support
+@@ -162,7 +163,7 @@ int fd_is_mount_point(int fd, const char *filename, int flags) {
+ 
+ fallback_fdinfo:
+         r = fd_fdinfo_mnt_id(fd, filename, flags, &mount_id);
+-        if (IN_SET(r, -EOPNOTSUPP, -EACCES))
++        if (IN_SET(r, -EOPNOTSUPP, -EACCES, -EPERM))
+                 goto fallback_fstat;
+         if (r < 0)
+                 return r;
diff --git a/debian/patches/series b/debian/patches/series
index d1e7804..309ca3f 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -94,6 +94,12 @@ journal-do-not-remove-multiple-spaces-after-identifi.patch
 Refuse-dbus-message-paths-longer-than-BUS_PATH_SIZE_.patch
 Allocate-temporary-strings-to-hold-dbus-paths-on-the.patch
 sd-bus-if-we-receive-an-invalid-dbus-message-ignore-.patch
+journald-fix-assertion-failure-on-journal_file_link_data..patch
+tmpfiles-e-takes-globs.patch
+mount-util-accept-that-name_to_handle_at-might-fail-with-.patch
+automount-ack-automount-requests-even-when-already-mounte.patch
+backport-read_line-from-systemd-master.patch
+core-when-deserializing-state-always-use-read_line-LONG_L.patch
 debian/Use-Debian-specific-config-files.patch
 debian/don-t-try-to-start-autovt-units-when-not-running-wit.patch
 debian/Make-logind-hostnamed-localed-timedated-D-Bus-activa.patch
diff --git a/debian/patches/tmpfiles-e-takes-globs.patch b/debian/patches/tmpfiles-e-takes-globs.patch
new file mode 100644
index 0000000..eff8cb4
--- /dev/null
+++ b/debian/patches/tmpfiles-e-takes-globs.patch
@@ -0,0 +1,29 @@
+From: =?utf-8?q?Zbigniew_J=C4=99drzejewski-Szmek?= <zbyszek at in.waw.pl>
+Date: Wed, 22 Nov 2017 15:16:48 +0100
+Subject: tmpfiles: "e" takes globs
+
+Fixes #7369.
+
+(cherry picked from commit 65241c1485dbad934e22544cd9d8724f4d7ff91d)
+---
+ src/tmpfiles/tmpfiles.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c
+index 97a564d..e139694 100644
+--- a/src/tmpfiles/tmpfiles.c
++++ b/src/tmpfiles/tmpfiles.c
+@@ -1615,12 +1615,12 @@ static int clean_item(Item *i) {
+         case CREATE_SUBVOLUME:
+         case CREATE_SUBVOLUME_INHERIT_QUOTA:
+         case CREATE_SUBVOLUME_NEW_QUOTA:
+-        case EMPTY_DIRECTORY:
+         case TRUNCATE_DIRECTORY:
+         case IGNORE_PATH:
+         case COPY_FILES:
+                 clean_item_instance(i, i->path);
+                 return 0;
++        case EMPTY_DIRECTORY:
+         case IGNORE_DIRECTORY_PATH:
+                 return glob_item(i, clean_item_instance, false);
+         default:
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <http://alioth-lists.debian.net/pipermail/pkg-systemd-maintainers/attachments/20190310/fd3def0b/attachment-0001.sig>


More information about the Pkg-systemd-maintainers mailing list