Hello community, here is the log from the commit of package systemd for openSUSE:Factory checked in at 2019-02-20 14:09:03 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/systemd (Old) and /work/SRC/openSUSE:Factory/.systemd.new.28833 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "systemd" Wed Feb 20 14:09:03 2019 rev:292 rq:677368 version:239 Changes: -------- --- /work/SRC/openSUSE:Factory/systemd/systemd-mini.changes 2019-01-29 14:44:39.767095888 +0100 +++ /work/SRC/openSUSE:Factory/.systemd.new.28833/systemd-mini.changes 2019-02-20 14:09:08.714983072 +0100 @@ -1,0 +2,24 @@ +Tue Feb 19 11:08:13 UTC 2019 - Franck Bui <f...@suse.com> + +- Import commit a1d86af7ed49dacef671e8ec8dae9472a8fa47f5 + + 92d860fc12 sysctl: Don't pass null directive argument to '%s' (bsc#1121563) + 1379e30d59 Allocate temporary strings to hold dbus paths on the heap (bsc#1125352 CVE-2019-6454) + b5569a03ae Refuse dbus message paths longer than BUS_PATH_SIZE_MAX limit. (bsc#1125352 CVE-2019-6454) + +------------------------------------------------------------------- +Fri Feb 15 09:58:17 UTC 2019 - Franck Bui <f...@suse.com> + +- Import commit 01b4746d3c6f6cbf969fa2176c77ac3f616a7eda + + 7af53e005b sd-bus: if we receive an invalid dbus message, ignore and proceeed + 92dcbfdd7f bus: move BUS_DONT_DESTROY calls after asserts + a83e7b3b43 automount: don't pass non-blocking pipe to kernel. + 726127ea1d units: make sure initrd-cleanup.service terminates before switching to rootfs (bsc#1123333) + a6347a3cb6 core: Fix use after free case in load_from_path() (bsc#1121563) + 22e2550222 strv: rework FOREACH_STRING() macro (bsc#1121563) + 2ddd38f41a test,systemctl,nspawn: use "const char*" instead of "char*" as iterator for FOREACH_STRING() + c2c8333e0b strv: add new macro STARTSWITH_SET() + 1db243a601 Update systemd-system.conf.xml (bsc#1122000) + +------------------------------------------------------------------- systemd.changes: same change Old: ---- systemd-v239+suse.191.gad34cc45f.tar.xz New: ---- systemd-v239+suse.205.ga1d86af7e.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ systemd-mini.spec ++++++ --- /var/tmp/diff_new_pack.leMukU/_old 2019-02-20 14:09:11.142982267 +0100 +++ /var/tmp/diff_new_pack.leMukU/_new 2019-02-20 14:09:11.154982263 +0100 @@ -26,7 +26,7 @@ ##### WARNING: please do not edit this auto generated spec file. Use the systemd.spec! ##### %define mini -mini %define min_kernel_version 4.5 -%define suse_version +suse.191.gad34cc45f +%define suse_version +suse.205.ga1d86af7e %bcond_with gnuefi %if 0%{?bootstrap} ++++++ systemd.spec ++++++ --- /var/tmp/diff_new_pack.leMukU/_old 2019-02-20 14:09:11.178982255 +0100 +++ /var/tmp/diff_new_pack.leMukU/_new 2019-02-20 14:09:11.178982255 +0100 @@ -24,7 +24,7 @@ %define bootstrap 0 %define mini %nil %define min_kernel_version 4.5 -%define suse_version +suse.191.gad34cc45f +%define suse_version +suse.205.ga1d86af7e %bcond_with gnuefi %if 0%{?bootstrap} ++++++ systemd-v239+suse.191.gad34cc45f.tar.xz -> systemd-v239+suse.205.ga1d86af7e.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/man/systemd-system.conf.xml new/systemd-v239+suse.205.ga1d86af7e/man/systemd-system.conf.xml --- old/systemd-v239+suse.191.gad34cc45f/man/systemd-system.conf.xml 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/man/systemd-system.conf.xml 2019-02-19 12:07:58.000000000 +0100 @@ -274,7 +274,9 @@ <varname>TimeoutStopSec=</varname> and <varname>RestartSec=</varname> (for services, see <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry> - for details on the per-unit settings). For non-service units, + for details on the per-unit settings). Disabled by default, when + service with <varname>Type=oneshot</varname> is used. + For non-service units, <varname>DefaultTimeoutStartSec=</varname> sets the default <varname>TimeoutSec=</varname> value. <varname>DefaultTimeoutStartSec=</varname> and diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/basic/strv.h new/systemd-v239+suse.205.ga1d86af7e/src/basic/strv.h --- old/systemd-v239+suse.191.gad34cc45f/src/basic/strv.h 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/basic/strv.h 2019-02-19 12:07:58.000000000 +0100 @@ -136,17 +136,22 @@ _x && strv_contains(STRV_MAKE(__VA_ARGS__), _x); \ }) -#define FOREACH_STRING(x, ...) \ - for (char **_l = ({ \ - char **_ll = STRV_MAKE(__VA_ARGS__); \ - x = _ll ? _ll[0] : NULL; \ - _ll; \ - }); \ - _l && *_l; \ - x = ({ \ - _l ++; \ - _l[0]; \ - })) +#define STARTSWITH_SET(p, ...) \ + ({ \ + const char *_p = (p); \ + char *_found = NULL, **_i; \ + STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ + _found = startswith(_p, *_i); \ + if (_found) \ + break; \ + } \ + _found; \ + }) + +#define FOREACH_STRING(x, y, ...) \ + for (char **_l = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \ + x; \ + x = *(++_l)) char **strv_reverse(char **l); char **strv_shell_escape(char **l, const char *bad); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/core/automount.c new/systemd-v239+suse.205.ga1d86af7e/src/core/automount.c --- old/systemd-v239+suse.191.gad34cc45f/src/core/automount.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/core/automount.c 2019-02-19 12:07:58.000000000 +0100 @@ -574,10 +574,13 @@ goto fail; } - if (pipe2(p, O_NONBLOCK|O_CLOEXEC) < 0) { + if (pipe2(p, O_CLOEXEC) < 0) { r = -errno; goto fail; } + r = fd_nonblock(p[0], true); + if (r < 0) + goto fail; xsprintf(options, "fd=%i,pgrp="PID_FMT",minproto=5,maxproto=5,direct", p[1], getpgrp()); xsprintf(name, "systemd-"PID_FMT, getpid_cached()); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/core/load-fragment.c new/systemd-v239+suse.205.ga1d86af7e/src/core/load-fragment.c --- old/systemd-v239+suse.191.gad34cc45f/src/core/load-fragment.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/core/load-fragment.c 2019-02-19 12:07:58.000000000 +0100 @@ -4290,7 +4290,6 @@ r = open_follow(&filename, &f, symlink_names, &id); if (r >= 0) break; - filename = mfree(filename); /* ENOENT means that the file is missing or is a dangling symlink. * ENOTDIR means that one of paths we expect to be is a directory @@ -4302,6 +4301,7 @@ else if (!IN_SET(r, -ENOENT, -ENOTDIR)) return r; + filename = mfree(filename); /* Empty the symlink names for the next run */ set_clear_free(symlink_names); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-internal.c new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-internal.c --- old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-internal.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-internal.c 2019-02-19 12:07:58.000000000 +0100 @@ -45,7 +45,7 @@ if (slash) return false; - return true; + return (q - p) <= BUS_PATH_SIZE_MAX; } char* object_path_startswith(const char *a, const char *b) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-internal.h new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-internal.h --- old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-internal.h 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-internal.h 2019-02-19 12:07:58.000000000 +0100 @@ -333,6 +333,10 @@ #define BUS_MESSAGE_SIZE_MAX (128*1024*1024) #define BUS_AUTH_SIZE_MAX (64*1024) +/* Note that the D-Bus specification states that bus paths shall have no size limit. We enforce here one + * anyway, since truly unbounded strings are a security problem. The limit we pick is relatively large however, + * to not clash unnecessarily with real-life applications. */ +#define BUS_PATH_SIZE_MAX (64*1024) #define BUS_CONTAINER_DEPTH 128 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-objects.c new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-objects.c --- old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-objects.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-objects.c 2019-02-19 12:07:58.000000000 +0100 @@ -1134,7 +1134,8 @@ const char *path, sd_bus_error *error) { - char *prefix; + _cleanup_free_ char *prefix = NULL; + size_t pl; int r; assert(bus); @@ -1150,7 +1151,12 @@ return 0; /* Second, add fallback vtables registered for any of the prefixes */ - prefix = alloca(strlen(path) + 1); + pl = strlen(path); + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; + OBJECT_PATH_FOREACH_PREFIX(prefix, path) { r = object_manager_serialize_path(bus, reply, prefix, path, true, error); if (r < 0) @@ -1346,6 +1352,7 @@ } int bus_process_object(sd_bus *bus, sd_bus_message *m) { + _cleanup_free_ char *prefix = NULL; int r; size_t pl; bool found_object = false; @@ -1370,9 +1377,12 @@ assert(m->member); pl = strlen(m->path); - do { - char prefix[pl+1]; + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; + do { bus->nodes_modified = false; r = object_find_and_run(bus, m, m->path, false, &found_object); @@ -1499,9 +1509,15 @@ n = hashmap_get(bus->nodes, path); if (!n) { - char *prefix; + _cleanup_free_ char *prefix = NULL; + size_t pl; + + pl = strlen(path); + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; - prefix = alloca(strlen(path) + 1); OBJECT_PATH_FOREACH_PREFIX(prefix, path) { n = hashmap_get(bus->nodes, prefix); if (n) @@ -2090,9 +2106,9 @@ const char *interface, char **names) { - BUS_DONT_DESTROY(bus); + _cleanup_free_ char *prefix = NULL; bool found_interface = false; - char *prefix; + size_t pl; int r; assert_return(bus, -EINVAL); @@ -2111,6 +2127,14 @@ if (names && names[0] == NULL) return 0; + BUS_DONT_DESTROY(bus); + + pl = strlen(path); + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; + do { bus->nodes_modified = false; @@ -2120,7 +2144,6 @@ if (bus->nodes_modified) continue; - prefix = alloca(strlen(path) + 1); OBJECT_PATH_FOREACH_PREFIX(prefix, path) { r = emit_properties_changed_on_interface(bus, prefix, path, interface, true, &found_interface, names); if (r != 0) @@ -2252,7 +2275,8 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *path) { _cleanup_set_free_ Set *s = NULL; - char *prefix; + _cleanup_free_ char *prefix = NULL; + size_t pl; int r; assert(bus); @@ -2297,7 +2321,12 @@ if (bus->nodes_modified) return 0; - prefix = alloca(strlen(path) + 1); + pl = strlen(path); + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; + OBJECT_PATH_FOREACH_PREFIX(prefix, path) { r = object_added_append_all_prefix(bus, m, s, prefix, path, true); if (r < 0) @@ -2310,8 +2339,6 @@ } _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) { - BUS_DONT_DESTROY(bus); - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; struct node *object_manager; int r; @@ -2341,6 +2368,8 @@ if (r == 0) return -ESRCH; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; m = sd_bus_message_unref(m); @@ -2436,7 +2465,8 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char *path) { _cleanup_set_free_ Set *s = NULL; - char *prefix; + _cleanup_free_ char *prefix = NULL; + size_t pl; int r; assert(bus); @@ -2468,7 +2498,12 @@ if (bus->nodes_modified) return 0; - prefix = alloca(strlen(path) + 1); + pl = strlen(path); + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; + OBJECT_PATH_FOREACH_PREFIX(prefix, path) { r = object_removed_append_all_prefix(bus, m, s, prefix, path, true); if (r < 0) @@ -2481,8 +2516,6 @@ } _public_ int sd_bus_emit_object_removed(sd_bus *bus, const char *path) { - BUS_DONT_DESTROY(bus); - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; struct node *object_manager; int r; @@ -2512,6 +2545,8 @@ if (r == 0) return -ESRCH; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; m = sd_bus_message_unref(m); @@ -2618,7 +2653,8 @@ const char *path, const char *interface) { - char *prefix; + _cleanup_free_ char *prefix = NULL; + size_t pl; int r; assert(bus); @@ -2632,7 +2668,12 @@ if (bus->nodes_modified) return 0; - prefix = alloca(strlen(path) + 1); + pl = strlen(path); + assert(pl <= BUS_PATH_SIZE_MAX); + prefix = new(char, pl + 1); + if (!prefix) + return -ENOMEM; + OBJECT_PATH_FOREACH_PREFIX(prefix, path) { r = interfaces_added_append_one_prefix(bus, m, prefix, path, interface, true); if (r != 0) @@ -2645,8 +2686,6 @@ } _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) { - BUS_DONT_DESTROY(bus); - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; struct node *object_manager; char **i; @@ -2669,6 +2708,8 @@ if (r == 0) return -ESRCH; + BUS_DONT_DESTROY(bus); + do { bus->nodes_modified = false; m = sd_bus_message_unref(m); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-socket.c new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-socket.c --- old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/bus-socket.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/bus-socket.c 2019-02-19 12:07:58.000000000 +0100 @@ -1078,7 +1078,7 @@ } static int bus_socket_make_message(sd_bus *bus, size_t size) { - sd_bus_message *t; + sd_bus_message *t = NULL; void *b; int r; @@ -1103,7 +1103,9 @@ bus->fds, bus->n_fds, NULL, &t); - if (r < 0) { + if (r == -EBADMSG) + log_debug_errno(r, "Received invalid message from connection %s, dropping.", strna(bus->description)); + else if (r < 0) { free(b); return r; } @@ -1114,7 +1116,8 @@ bus->fds = NULL; bus->n_fds = 0; - bus->rqueue[bus->rqueue_size++] = t; + if (t) + bus->rqueue[bus->rqueue_size++] = t; return 1; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/sd-bus.c new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/sd-bus.c --- old/systemd-v239+suse.191.gad34cc45f/src/libsystemd/sd-bus/sd-bus.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/libsystemd/sd-bus/sd-bus.c 2019-02-19 12:07:58.000000000 +0100 @@ -2883,7 +2883,6 @@ } static int bus_process_internal(sd_bus *bus, bool hint_priority, int64_t priority, sd_bus_message **ret) { - BUS_DONT_DESTROY(bus); int r; /* Returns 0 when we didn't do anything. This should cause the @@ -2899,6 +2898,8 @@ assert_return(!bus->current_message, -EBUSY); assert(!bus->current_slot); + BUS_DONT_DESTROY(bus); + switch (bus->state) { case BUS_UNSET: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/sysctl/sysctl.c new/systemd-v239+suse.205.ga1d86af7e/src/sysctl/sysctl.c --- old/systemd-v239+suse.191.gad34cc45f/src/sysctl/sysctl.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/sysctl/sysctl.c 2019-02-19 12:07:58.000000000 +0100 @@ -112,7 +112,7 @@ value = strchr(p, '='); if (!value) { - log_error("Line is not an assignment at '%s:%u': %s", path, c, value); + log_error("Line is not an assignment at '%s:%u': %s", path, c, p); if (r == 0) r = -EINVAL; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/systemctl/systemctl.c new/systemd-v239+suse.205.ga1d86af7e/src/systemctl/systemctl.c --- old/systemd-v239+suse.191.gad34cc45f/src/systemctl/systemctl.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/systemctl/systemctl.c 2019-02-19 12:07:58.000000000 +0100 @@ -6768,9 +6768,9 @@ if (r < 0) return r; if (r == 0) { - const char **args; + const char **args, *p; char *editor, **editor_args = NULL; - char **tmp_path, **original_path, *p; + char **tmp_path, **original_path; size_t n_editor_args = 0, i = 1; size_t argc; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/test/test-execute.c new/systemd-v239+suse.205.ga1d86af7e/src/test/test-execute.c --- old/systemd-v239+suse.191.gad34cc45f/src/test/test-execute.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/test/test-execute.c 2019-02-19 12:07:58.000000000 +0100 @@ -106,7 +106,7 @@ } static bool is_inaccessible_available(void) { - char *p; + const char *p; FOREACH_STRING(p, "/run/systemd/inaccessible/reg", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/src/test/test-strv.c new/systemd-v239+suse.205.ga1d86af7e/src/test/test-strv.c --- old/systemd-v239+suse.191.gad34cc45f/src/test/test-strv.c 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/src/test/test-strv.c 2019-02-19 12:07:58.000000000 +0100 @@ -56,6 +56,20 @@ assert_se(!STRPTR_IN_SET(NULL, NULL)); } +static void test_startswith_set(void) { + assert_se(!STARTSWITH_SET("foo", "bar", "baz", "waldo")); + assert_se(!STARTSWITH_SET("foo", "bar")); + + assert_se(STARTSWITH_SET("abc", "a", "ab", "abc")); + assert_se(STARTSWITH_SET("abc", "ax", "ab", "abc")); + assert_se(STARTSWITH_SET("abc", "ax", "abx", "abc")); + assert_se(!STARTSWITH_SET("abc", "ax", "abx", "abcx")); + + assert_se(streq_ptr(STARTSWITH_SET("foobar", "hhh", "kkk", "foo", "zzz"), "bar")); + assert_se(streq_ptr(STARTSWITH_SET("foobar", "hhh", "kkk", "", "zzz"), "foobar")); + assert_se(streq_ptr(STARTSWITH_SET("", "hhh", "kkk", "zzz", ""), "")); +} + static const char* const input_table_multiple[] = { "one", "two", @@ -700,6 +714,7 @@ test_specifier_printf(); test_str_in_set(); test_strptr_in_set(); + test_startswith_set(); test_strv_foreach(); test_strv_foreach_backwards(); test_strv_foreach_pair(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/systemd-v239+suse.191.gad34cc45f/units/initrd-switch-root.target new/systemd-v239+suse.205.ga1d86af7e/units/initrd-switch-root.target --- old/systemd-v239+suse.191.gad34cc45f/units/initrd-switch-root.target 2019-01-15 10:04:30.000000000 +0100 +++ new/systemd-v239+suse.205.ga1d86af7e/units/initrd-switch-root.target 2019-02-19 12:07:58.000000000 +0100 @@ -15,4 +15,4 @@ Before=initrd-switch-root.service AllowIsolate=yes Wants=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd-fs.target systemd-journald.service initrd-cleanup.service -After=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd-fs.target emergency.service emergency.target +After=initrd-udevadm-cleanup-db.service initrd-root-fs.target initrd-fs.target emergency.service emergency.target initrd-cleanup.service