Author: renodr Date: Thu Oct 3 19:25:29 2019 New Revision: 4009 Log: Add consolidated fixes patch for systemd.
Added: trunk/systemd/systemd-243-consolidated_fixes-1.patch Added: trunk/systemd/systemd-243-consolidated_fixes-1.patch ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ trunk/systemd/systemd-243-consolidated_fixes-1.patch Thu Oct 3 19:25:29 2019 (r4009) @@ -0,0 +1,1277 @@ +Submitted By: Douglas R. Reno <renodr at linuxfromscratch dot org> +Date: 2019-10-02 +Initial Package Version: 243 +Origin: Self / Upstream Stable Repository +Description: In addition to the udev fixes in the last patch, + this patch contains fixes for hwdb, some typo corrections, + a fix for the bug that causes systemd-timesyncd to fail to + initialize and halt the boot process on systems that don't + use networkd, a fix for a bug that originates when running + Samba-4.11.0's new SMB3 filesystem with mounts in + /etc/fstab, and various other upstream fixes since 243's + release. + +diff -Naurp systemd-243.orig/docs/BOOT_LOADER_INTERFACE.md systemd-243/docs/BOOT_LOADER_INTERFACE.md +--- systemd-243.orig/docs/BOOT_LOADER_INTERFACE.md 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/docs/BOOT_LOADER_INTERFACE.md 2019-10-01 21:54:12.930511233 -0500 +@@ -71,7 +71,7 @@ variables. All EFI variables use the ven + * `1 << 3` → The boot loader honours `LoaderEntryOneShot` when set. + * `1 << 4` → The boot loader supports boot counting as described in [Automatic Boot Assessment](https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT). + * `1 << 5` → The boot loader supports looking for boot menu entries in the Extended Boot Loader Partition. +- * `1 << 6` → The boot loader spports passing a random seed to the OS. ++ * `1 << 6` → The boot loader supports passing a random seed to the OS. + + * The EFI variable `LoaderRandomSeed` contains a binary random seed if set. It + is set by the boot loader to pass an entropy seed read from the ESP partition +diff -Naurp systemd-243.orig/docs/RELEASE.md systemd-243/docs/RELEASE.md +--- systemd-243.orig/docs/RELEASE.md 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/docs/RELEASE.md 2019-10-01 21:55:15.264846271 -0500 +@@ -16,4 +16,4 @@ title: Steps to a Successful Release + 10. "Draft" a new release on github (https://github.com/systemd/systemd/releases/new), mark "This is a pre-release" if appropriate. + 11. Check that announcement to systemd-devel, with a copy&paste from NEWS, was sent. This should happen automatically. + 12. Update IRC topic (`/msg chanserv TOPIC #systemd Version NNN released`) +-13. [After final release] Also push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:v${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches). ++13. [After final release] Also push commits to stable, create an empty -stable branch: `git push systemd-stable origin/master:master origin/master:refs/heads/${version}-stable`, and change the default branch to latest release (https://github.com/systemd/systemd-stable/settings/branches). +diff -Naurp systemd-243.orig/hwdb/60-evdev.hwdb systemd-243/hwdb/60-evdev.hwdb +--- systemd-243.orig/hwdb/60-evdev.hwdb 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/hwdb/60-evdev.hwdb 2019-10-01 22:27:15.612615919 -0500 +@@ -267,6 +267,13 @@ evdev:name:AlpsPS/2 ALPS DualPoint Touch + EVDEV_ABS_35=0:1960:24 + EVDEV_ABS_36=113:1436:30 + ++# Dell XPS13 9360 ++evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnDellInc.:pnXPS139360:cvr:* ++ EVDEV_ABS_00=::42 ++ EVDEV_ABS_01=::60 ++ EVDEV_ABS_35=::42 ++ EVDEV_ABS_36=::60 ++ + # Dell XPS15 9550 + evdev:name:SynPS/2 Synaptics TouchPad:dmi:bvn*:bvr*:bd*:svnDellInc.:pnXPS159550* + EVDEV_ABS_00=::41 +diff -Naurp systemd-243.orig/hwdb/60-sensor.hwdb systemd-243/hwdb/60-sensor.hwdb +--- systemd-243.orig/hwdb/60-sensor.hwdb 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/hwdb/60-sensor.hwdb 2019-10-01 22:32:18.677214179 -0500 +@@ -282,22 +282,10 @@ sensor:modalias:acpi:KIOX000A*:dmi:bvnAm + # HP + ######################################### + +-# Laptops using the lis3lv02d device should have a first quirk applied +-# to them in the drivers/platform/x86/hp_accel.c in the kernel. The +-# quirk from "can play neverball" to "matches Windows 8 orientation" +-# is then applied below. ++# Most HP laptops using the lis3lv02d device have it in the base, ++# mark these sensors as such. + sensor:modalias:platform:lis3lv02d:dmi:*svn*Hewlett-Packard*:* +- ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 0, -1; 0, 1, 0 +- +-# HP laptops which have the lis3lv02d device in the base, tell iio-sensor-proxy +-# about this so that the sensor is not used for display orientation +-sensor:modalias:platform:lis3lv02d:dmi:*svn*Hewlett-Packard*:*pnHPProBook4535s* +- ACCEL_LOCATION=base +- +-sensor:modalias:platform:lis3lv02d:dmi:*:svnHewlett-Packard:pnHPENVY17NotebookPC:* +- ACCEL_LOCATION=base +- +-sensor:modalias:platform:lis3lv02d:dmi:*svnHP:pnHPEliteBook850G3* ++sensor:modalias:platform:lis3lv02d:dmi:*svn*HP*:* + ACCEL_LOCATION=base + + sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:* +@@ -429,6 +417,10 @@ sensor:modalias:acpi:KIOX010A*:dmi:*:svn + sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION*:pnE3222*:* + ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 + ++# Medion Akoya E2292 MD63390 ++sensor:modalias:scpi:KIOX010A*:dmi:*:svnMEDION:pnE2292MD63390:* ++ ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 ++ + # Medion Akoya E2293 MD61130 + sensor:modalias:acpi:KIOX010A*:dmi:*:svnMEDION:pnE2293MD61130:* + ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 +diff -Naurp systemd-243.orig/man/systemctl.xml systemd-243/man/systemctl.xml +--- systemd-243.orig/man/systemctl.xml 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/man/systemctl.xml 2019-10-01 21:54:31.634311949 -0500 +@@ -818,7 +818,7 @@ Sun 2017-02-26 20:57:49 EST 2h 3min lef + <listitem> + <para>Stop (deactivate) one or more units specified on the command line.</para> + +- <para>This command will fail if the unit does exist or if stopping of the unit is prohibited (see ++ <para>This command will fail if the unit does not exist or if stopping of the unit is prohibited (see + <varname>RefuseManualStop=</varname> in + <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>). + It will <emphasis>not</emphasis> fail if any of the commands configured to stop the unit +diff -Naurp systemd-243.orig/man/systemd.exec.xml systemd-243/man/systemd.exec.xml +--- systemd-243.orig/man/systemd.exec.xml 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/man/systemd.exec.xml 2019-10-01 22:17:12.896421271 -0500 +@@ -1036,6 +1036,16 @@ StateDirectory=aaa/bbb ccc</programlisti + </varlistentry> + + <varlistentry> ++ <term><varname>TimeoutCleanSec=</varname></term> ++ <listitem><para>Configures a timeout on the clean-up operation requested through <command>systemctl ++ clean …</command>, see ++ <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> for ++ details. Takes the usual time values and defaults to <constant>infinity</constant>, i.e. by default ++ no time-out is applied. If a time-out is configured the clean operation will be aborted forcibly when ++ the time-out is reached, potentially leaving resources on disk.</para></listitem> ++ </varlistentry> ++ ++ <varlistentry> + <term><varname>ReadWritePaths=</varname></term> + <term><varname>ReadOnlyPaths=</varname></term> + <term><varname>InaccessiblePaths=</varname></term> +diff -Naurp systemd-243.orig/man/systemd.netdev.xml systemd-243/man/systemd.netdev.xml +--- systemd-243.orig/man/systemd.netdev.xml 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/man/systemd.netdev.xml 2019-10-01 22:27:54.076183720 -0500 +@@ -1742,8 +1742,8 @@ + <varlistentry> + <term><varname>ARPIntervalSec=</varname></term> + <listitem> +- <para>Specifies the ARP link monitoring frequency in milliseconds. +- A value of 0 disables ARP monitoring. The default value is 0. ++ <para>Specifies the ARP link monitoring frequency. A value of 0 disables ARP monitoring. The ++ default value is 0, and the default unit seconds. + </para> + </listitem> + </varlistentry> +diff -Naurp systemd-243.orig/man/systemd.service.xml systemd-243/man/systemd.service.xml +--- systemd-243.orig/man/systemd.service.xml 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/man/systemd.service.xml 2019-10-01 22:16:39.680799081 -0500 +@@ -637,16 +637,6 @@ + </varlistentry> + + <varlistentry> +- <term><varname>TimeoutCleanSec=</varname></term> +- <listitem><para>Configures a timeout on the clean-up operation requested through <command>systemctl +- clean …</command>, see +- <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry> for +- details. Takes the usual time values and defaults to <constant>infinity</constant>, i.e. by default +- no time-out is applied. If a time-out is configured the clean operation will be aborted forcibly when +- the time-out is reached, potentially leaving resources on disk.</para></listitem> +- </varlistentry> +- +- <varlistentry> + <term><varname>RuntimeMaxSec=</varname></term> + + <listitem><para>Configures a maximum time for the service to run. If this is used and the service has been +diff -Naurp systemd-243.orig/man/systemd.unit.xml systemd-243/man/systemd.unit.xml +--- systemd-243.orig/man/systemd.unit.xml 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/man/systemd.unit.xml 2019-10-01 22:09:50.787496111 -0500 +@@ -163,7 +163,7 @@ + <varname>Wants=</varname>, see below. The preferred way to create symlinks in the + <filename>.wants/</filename> or <filename>.requires/</filename> directory of a unit file is by embedding + the dependency in [Install] section of the target unit, and creating the symlink in the file system with +- the with the <command>enable</command> or <command>preset</command> commands of ++ the <command>enable</command> or <command>preset</command> commands of + <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>.</para> + + <para>Along with a unit file <filename>foo.service</filename>, a "drop-in" directory +diff -Naurp systemd-243.orig/po/pl.po systemd-243/po/pl.po +--- systemd-243.orig/po/pl.po 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/po/pl.po 2019-10-01 22:31:00.793087692 -0500 +@@ -682,7 +682,7 @@ msgid "Revert NTP settings" + msgstr "Przywrócenie ustawień NTP" + + #: src/network/org.freedesktop.network1.policy:122 +-msgid "Authentication is required to revert NTP settings." ++msgid "Authentication is required to reset NTP settings." + msgstr "Wymagane jest uwierzytelnienie, aby przywrócić ustawienia NTP." + + #: src/network/org.freedesktop.network1.policy:132 +@@ -690,7 +690,7 @@ msgid "Revert DNS settings" + msgstr "Przywrócenie ustawień DNS" + + #: src/network/org.freedesktop.network1.policy:133 +-msgid "Authentication is required to revert DNS settings." ++msgid "Authentication is required to reset DNS settings." + msgstr "Wymagane jest uwierzytelnienie, aby przywrócić ustawienia DNS." + + #: src/portable/org.freedesktop.portable1.policy:13 +diff -Naurp systemd-243.orig/shell-completion/zsh/_bootctl systemd-243/shell-completion/zsh/_bootctl +--- systemd-243.orig/shell-completion/zsh/_bootctl 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/shell-completion/zsh/_bootctl 2019-10-01 22:15:42.497450545 -0500 +@@ -1,6 +1,29 @@ + #compdef bootctl -*- shell-script -*- + # SPDX-License-Identifier: LGPL-2.1+ + ++__bootctl() { ++ bootctl --no-pager $@ 2>/dev/null ++} ++ ++_bootctl_comp_ids() { ++ local expl ++ local -a ids ++ __bootctl list | while read a b; do ++ if [[ "$a" == "id:" ]]; then ++ ids+="$b" ++ fi ++ done ++ _wanted id expl 'boot id' compadd "$@" -a ids ++} ++ ++_bootctl_set_default() { ++ _bootctl_comp_ids ++} ++ ++_bootctl_set_oneshot() { ++ _bootctl_comp_ids ++} ++ + (( $+functions[_bootctl_commands] )) || _bootctl_commands() + { + local -a _bootctl_cmds +@@ -9,6 +32,10 @@ + "install:Install systemd-boot to the ESP and EFI variables" + "update:Update systemd-boot in the ESP and EFI variables" + "remove:Remove systemd-boot from the ESP and EFI variables" ++ "random-seed:Initialize random seed in ESP and EFI variables" ++ "is-installed:Test whether systemd-boot is installed in the ESP" ++ "set-default:Set the default boot loader entry" ++ "set-oneshot:Set the default boot loader entry only for the next boot" + ) + if (( CURRENT == 1 )); then + _describe -t commands 'bootctl command' _bootctl_cmds || compadd "$@" +@@ -26,6 +53,10 @@ + _arguments \ + {-h,--help}'[Prints a short help text and exits.]' \ + '--version[Prints a short version string and exits.]' \ +- '--path=[Path to the EFI System Partition (ESP)]:path:_directories' \ ++ '--esp-path=[Path to the EFI System Partition (ESP)]:path:_directories' \ ++ '--boot-path=[Path to the $BOOT partition]:path:_directories' \ ++ {-p,--print-esp-path}'[Print path to the EFI system partition]' \ ++ {-x,--print-boot-path}'[Print path to the $BOOT partition]' \ + '--no-variables[Do not touch EFI variables]' \ ++ '--no-pager[Do not pipe output into a pager]' \ + '*::bootctl command:_bootctl_commands' +diff -Naurp systemd-243.orig/src/basic/fileio.c systemd-243/src/basic/fileio.c +--- systemd-243.orig/src/basic/fileio.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/basic/fileio.c 2019-10-01 22:04:41.821139345 -0500 +@@ -930,10 +930,10 @@ int warn_file_is_world_accessible(const + + if (unit) + log_syntax(unit, LOG_WARNING, filename, line, 0, +- "%s has %04o mode that is too permissive, please adjust the access mode.", ++ "%s has %04o mode that is too permissive, please adjust the ownership and access mode.", + filename, st->st_mode & 07777); + else +- log_warning("%s has %04o mode that is too permissive, please adjust the access mode.", ++ log_warning("%s has %04o mode that is too permissive, please adjust the ownership and access mode.", + filename, st->st_mode & 07777); + return 0; + } +diff -Naurp systemd-243.orig/src/basic/mountpoint-util.c systemd-243/src/basic/mountpoint-util.c +--- systemd-243.orig/src/basic/mountpoint-util.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/basic/mountpoint-util.c 2019-10-01 22:47:11.592172976 -0500 +@@ -299,6 +299,7 @@ bool fstype_is_network(const char *fstyp + "afs", + "cifs", + "smbfs", ++ "smb3", + "sshfs", + "ncpfs", + "ncp", +diff -Naurp systemd-243.orig/src/basic/user-util.c systemd-243/src/basic/user-util.c +--- systemd-243.orig/src/basic/user-util.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/basic/user-util.c 2019-10-01 22:18:37.631459206 -0500 +@@ -410,9 +410,8 @@ char* gid_to_name(gid_t gid) { + } + + int in_gid(gid_t gid) { +- long ngroups_max; + gid_t *gids; +- int r, i; ++ int ngroups, r, i; + + if (getgid() == gid) + return 1; +@@ -423,12 +422,15 @@ int in_gid(gid_t gid) { + if (!gid_is_valid(gid)) + return -EINVAL; + +- ngroups_max = sysconf(_SC_NGROUPS_MAX); +- assert(ngroups_max > 0); ++ ngroups = getgroups(0, NULL); ++ if (ngroups < 0) ++ return -errno; ++ if (ngroups == 0) ++ return 0; + +- gids = newa(gid_t, ngroups_max); ++ gids = newa(gid_t, ngroups); + +- r = getgroups(ngroups_max, gids); ++ r = getgroups(ngroups, gids); + if (r < 0) + return -errno; + +diff -Naurp systemd-243.orig/src/core/load-fragment.c systemd-243/src/core/load-fragment.c +--- systemd-243.orig/src/core/load-fragment.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/load-fragment.c 2019-10-01 22:21:21.153608609 -0500 +@@ -133,6 +133,7 @@ DEFINE_CONFIG_PARSE_PTR(config_parse_cg_ + DEFINE_CONFIG_PARSE_PTR(config_parse_cpu_shares, cg_cpu_shares_parse, uint64_t, "Invalid CPU shares"); + DEFINE_CONFIG_PARSE_PTR(config_parse_exec_mount_flags, mount_propagation_flags_from_string, unsigned long, "Failed to parse mount flag"); + DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_numa_policy, mpol, int, -1, "Invalid NUMA policy type"); ++DEFINE_CONFIG_PARSE_ENUM(config_parse_status_unit_format, status_unit_format, StatusUnitFormat, "Failed to parse status unit format"); + + int config_parse_unit_deps( + const char *unit, +diff -Naurp systemd-243.orig/src/core/load-fragment.h systemd-243/src/core/load-fragment.h +--- systemd-243.orig/src/core/load-fragment.h 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/load-fragment.h 2019-10-01 22:21:39.756398503 -0500 +@@ -117,6 +117,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_num + CONFIG_PARSER_PROTOTYPE(config_parse_ip_filter_bpf_progs); + CONFIG_PARSER_PROTOTYPE(config_parse_cpu_affinity2); + CONFIG_PARSER_PROTOTYPE(config_parse_show_status); ++CONFIG_PARSER_PROTOTYPE(config_parse_status_unit_format); + CONFIG_PARSER_PROTOTYPE(config_parse_output_restricted); + CONFIG_PARSER_PROTOTYPE(config_parse_crash_chvt); + CONFIG_PARSER_PROTOTYPE(config_parse_timeout_abort); +diff -Naurp systemd-243.orig/src/core/main.c systemd-243/src/core/main.c +--- systemd-243.orig/src/core/main.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/main.c 2019-10-01 22:21:54.276234565 -0500 +@@ -538,7 +538,6 @@ DEFINE_SETTER(config_parse_level2, log_s + DEFINE_SETTER(config_parse_target, log_set_target_from_string, "target"); + DEFINE_SETTER(config_parse_color, log_show_color_from_string, "color" ); + DEFINE_SETTER(config_parse_location, log_show_location_from_string, "location"); +-DEFINE_SETTER(config_parse_status_unit_format, status_unit_format_from_string, "value"); + + static int parse_config_file(void) { + +diff -Naurp systemd-243.orig/src/core/mount-setup.c systemd-243/src/core/mount-setup.c +--- systemd-243.orig/src/core/mount-setup.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/mount-setup.c 2019-10-01 22:19:10.803083210 -0500 +@@ -486,6 +486,7 @@ static int relabel_extra(void) { + } + + log_debug("Relabelling additional file/directory '%s'.", line); ++ (void) label_fix(line, 0); + (void) nftw(line, nftw_cb, 64, FTW_MOUNT|FTW_PHYS|FTW_ACTIONRETVAL); + c++; + } +diff -Naurp systemd-243.orig/src/core/path.c systemd-243/src/core/path.c +--- systemd-243.orig/src/core/path.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/path.c 2019-10-01 22:32:54.415957515 -0500 +@@ -480,11 +480,9 @@ static void path_enter_running(Path *p) + + p->inotify_triggered = false; + +- r = path_watch(p); +- if (r < 0) +- goto fail; +- + path_set_state(p, PATH_RUNNING); ++ path_unwatch(p); ++ + return; + + fail: +diff -Naurp systemd-243.orig/src/core/smack-setup.c systemd-243/src/core/smack-setup.c +--- systemd-243.orig/src/core/smack-setup.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/smack-setup.c 2019-10-01 22:45:15.448261632 -0500 +@@ -84,6 +84,7 @@ static int write_access2_rules(const cha + FOREACH_DIRENT(entry, dir, return 0) { + _cleanup_fclose_ FILE *policy = NULL; + ++ dirent_ensure_type(dir, entry); + if (!dirent_is_file(entry)) + continue; + +@@ -150,6 +151,7 @@ static int write_cipso2_rules(const char + FOREACH_DIRENT(entry, dir, return 0) { + _cleanup_fclose_ FILE *policy = NULL; + ++ dirent_ensure_type(dir, entry); + if (!dirent_is_file(entry)) + continue; + +diff -Naurp systemd-243.orig/src/core/unit.c systemd-243/src/core/unit.c +--- systemd-243.orig/src/core/unit.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/core/unit.c 2019-10-01 22:23:09.236388893 -0500 +@@ -3900,6 +3900,7 @@ int unit_add_node_dependency(Unit *u, co + int unit_coldplug(Unit *u) { + int r = 0, q; + char **i; ++ Job *uj; + + assert(u); + +@@ -3922,8 +3923,9 @@ int unit_coldplug(Unit *u) { + r = q; + } + +- if (u->job) { +- q = job_coldplug(u->job); ++ uj = u->job ?: u->nop_job; ++ if (uj) { ++ q = job_coldplug(uj); + if (q < 0 && r >= 0) + r = q; + } +diff -Naurp systemd-243.orig/src/fuzz/fuzz-catalog.c systemd-243/src/fuzz/fuzz-catalog.c +--- systemd-243.orig/src/fuzz/fuzz-catalog.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/fuzz/fuzz-catalog.c 2019-10-01 21:58:22.005842280 -0500 +@@ -9,12 +9,12 @@ + int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + _cleanup_(unlink_tempfilep) char name[] = "/tmp/fuzz-catalog.XXXXXX"; + _cleanup_close_ int fd = -1; +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + + if (!getenv("SYSTEMD_LOG_LEVEL")) + log_set_max_level(LOG_CRIT); + +- assert_se(h = hashmap_new(&catalog_hash_ops)); ++ assert_se(h = ordered_hashmap_new(&catalog_hash_ops)); + + fd = mkostemp_safe(name); + assert_se(fd >= 0); +diff -Naurp systemd-243.orig/src/journal/catalog.c systemd-243/src/journal/catalog.c +--- systemd-243.orig/src/journal/catalog.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/journal/catalog.c 2019-10-01 22:56:29.463659322 -0500 +@@ -143,7 +143,7 @@ static char *combine_entries(const char + } + + static int finish_item( +- Hashmap *h, ++ OrderedHashmap *h, + sd_id128_t id, + const char *language, + char *payload, size_t payload_size) { +@@ -165,14 +165,14 @@ static int finish_item( + strcpy(i->language, language); + } + +- prev = hashmap_get(h, i); ++ prev = ordered_hashmap_get(h, i); + if (prev) { + /* Already have such an item, combine them */ + combined = combine_entries(payload, prev); + if (!combined) + return log_oom(); + +- if (hashmap_update(h, i, combined) < 0) ++ if (ordered_hashmap_update(h, i, combined) < 0) + return log_oom(); + combined = NULL; + } else { +@@ -181,7 +181,7 @@ static int finish_item( + if (!combined) + return log_oom(); + +- if (hashmap_put(h, i, combined) < 0) ++ if (ordered_hashmap_put(h, i, combined) < 0) + return log_oom(); + i = NULL; + combined = NULL; +@@ -247,7 +247,7 @@ static int catalog_entry_lang( + return 0; + } + +-int catalog_import_file(Hashmap *h, const char *path) { ++int catalog_import_file(OrderedHashmap *h, const char *path) { + _cleanup_fclose_ FILE *f = NULL; + _cleanup_free_ char *payload = NULL; + size_t payload_size = 0, payload_allocated = 0; +@@ -446,7 +446,7 @@ int catalog_update(const char* database, + _cleanup_strv_free_ char **files = NULL; + char **f; + _cleanup_(strbuf_cleanupp) struct strbuf *sb = NULL; +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + _cleanup_free_ CatalogItem *items = NULL; + ssize_t offset; + char *payload; +@@ -456,7 +456,7 @@ int catalog_update(const char* database, + int r; + int64_t sz; + +- h = hashmap_new(&catalog_hash_ops); ++ h = ordered_hashmap_new(&catalog_hash_ops); + sb = strbuf_new(); + if (!h || !sb) + return log_oom(); +@@ -472,18 +472,18 @@ int catalog_update(const char* database, + return log_error_errno(r, "Failed to import file '%s': %m", *f); + } + +- if (hashmap_size(h) <= 0) { ++ if (ordered_hashmap_size(h) <= 0) { + log_info("No items in catalog."); + return 0; + } else +- log_debug("Found %u items in catalog.", hashmap_size(h)); ++ log_debug("Found %u items in catalog.", ordered_hashmap_size(h)); + +- items = new(CatalogItem, hashmap_size(h)); ++ items = new(CatalogItem, ordered_hashmap_size(h)); + if (!items) + return log_oom(); + + n = 0; +- HASHMAP_FOREACH_KEY(payload, i, h, j) { ++ ORDERED_HASHMAP_FOREACH_KEY(payload, i, h, j) { + log_debug("Found " SD_ID128_FORMAT_STR ", language %s", + SD_ID128_FORMAT_VAL(i->id), + isempty(i->language) ? "C" : i->language); +@@ -496,7 +496,7 @@ int catalog_update(const char* database, + items[n++] = *i; + } + +- assert(n == hashmap_size(h)); ++ assert(n == ordered_hashmap_size(h)); + typesafe_qsort(items, n, catalog_compare_func); + + strbuf_complete(sb); +diff -Naurp systemd-243.orig/src/journal/catalog.h systemd-243/src/journal/catalog.h +--- systemd-243.orig/src/journal/catalog.h 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/journal/catalog.h 2019-10-01 22:01:03.750798820 -0500 +@@ -9,7 +9,7 @@ + #include "hashmap.h" + #include "strbuf.h" + +-int catalog_import_file(Hashmap *h, const char *path); ++int catalog_import_file(OrderedHashmap *h, const char *path); + int catalog_update(const char* database, const char* root, const char* const* dirs); + int catalog_get(const char* database, sd_id128_t id, char **data); + int catalog_list(FILE *f, const char* database, bool oneline); +diff -Naurp systemd-243.orig/src/journal/test-catalog.c systemd-243/src/journal/test-catalog.c +--- systemd-243.orig/src/journal/test-catalog.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/journal/test-catalog.c 2019-10-01 22:03:38.569901331 -0500 +@@ -26,15 +26,15 @@ static const char *no_catalog_dirs[] = { + NULL + }; + +-static Hashmap* test_import(const char* contents, ssize_t size, int code) { ++static OrderedHashmap* test_import(const char* contents, ssize_t size, int code) { + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-catalog.XXXXXX"; + _cleanup_close_ int fd; +- Hashmap *h; ++ OrderedHashmap *h; + + if (size < 0) + size = strlen(contents); + +- assert_se(h = hashmap_new(&catalog_hash_ops)); ++ assert_se(h = ordered_hashmap_new(&catalog_hash_ops)); + + fd = mkostemp_safe(name); + assert_se(fd >= 0); +@@ -46,14 +46,14 @@ static Hashmap* test_import(const char* + } + + static void test_catalog_import_invalid(void) { +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + + h = test_import("xxx", -1, -EINVAL); +- assert_se(hashmap_isempty(h)); ++ assert_se(ordered_hashmap_isempty(h)); + } + + static void test_catalog_import_badid(void) { +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + const char *input = + "-- 0027229ca0644181a76c4e92458afaff dededededededededededededededede\n" \ + "Subject: message\n" \ +@@ -63,7 +63,7 @@ static void test_catalog_import_badid(vo + } + + static void test_catalog_import_one(void) { +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + char *payload; + Iterator j; + +@@ -78,9 +78,9 @@ static void test_catalog_import_one(void + "payload\n"; + + h = test_import(input, -1, 0); +- assert_se(hashmap_size(h) == 1); ++ assert_se(ordered_hashmap_size(h) == 1); + +- HASHMAP_FOREACH(payload, h, j) { ++ ORDERED_HASHMAP_FOREACH(payload, h, j) { + printf("expect: %s\n", expect); + printf("actual: %s\n", payload); + assert_se(streq(expect, payload)); +@@ -88,7 +88,7 @@ static void test_catalog_import_one(void + } + + static void test_catalog_import_merge(void) { +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + char *payload; + Iterator j; + +@@ -114,15 +114,15 @@ static void test_catalog_import_merge(vo + "override payload\n"; + + h = test_import(input, -1, 0); +- assert_se(hashmap_size(h) == 1); ++ assert_se(ordered_hashmap_size(h) == 1); + +- HASHMAP_FOREACH(payload, h, j) { ++ ORDERED_HASHMAP_FOREACH(payload, h, j) { + assert_se(streq(combined, payload)); + } + } + + static void test_catalog_import_merge_no_body(void) { +- _cleanup_hashmap_free_free_free_ Hashmap *h = NULL; ++ _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + char *payload; + Iterator j; + +@@ -147,9 +147,9 @@ static void test_catalog_import_merge_no + "payload\n"; + + h = test_import(input, -1, 0); +- assert_se(hashmap_size(h) == 1); ++ assert_se(ordered_hashmap_size(h) == 1); + +- HASHMAP_FOREACH(payload, h, j) { ++ ORDERED_HASHMAP_FOREACH(payload, h, j) { + assert_se(streq(combined, payload)); + } + } +diff -Naurp systemd-243.orig/src/libsystemd/sd-netlink/netlink-message.c systemd-243/src/libsystemd/sd-netlink/netlink-message.c +--- systemd-243.orig/src/libsystemd/sd-netlink/netlink-message.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/libsystemd/sd-netlink/netlink-message.c 2019-10-01 22:35:09.553170138 -0500 +@@ -577,7 +577,9 @@ static int netlink_message_read_internal + + assert(m->n_containers < RTNL_CONTAINER_DEPTH); + assert(m->containers[m->n_containers].attributes); +- assert(type < m->containers[m->n_containers].n_attributes); ++ ++ if (type >= m->containers[m->n_containers].n_attributes) ++ return -ENODATA; + + attribute = &m->containers[m->n_containers].attributes[type]; + +diff -Naurp systemd-243.orig/src/libsystemd-network/sd-dhcp6-client.c systemd-243/src/libsystemd-network/sd-dhcp6-client.c +--- systemd-243.orig/src/libsystemd-network/sd-dhcp6-client.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/libsystemd-network/sd-dhcp6-client.c 2019-10-01 22:43:17.317335014 -0500 +@@ -29,6 +29,9 @@ + + #define MAX_MAC_ADDR_LEN INFINIBAND_ALEN + ++#define IRT_DEFAULT (1 * USEC_PER_DAY) ++#define IRT_MINIMUM (600 * USEC_PER_SEC) ++ + /* what to request from the server, addresses (IA_NA) and/or prefixes (IA_PD) */ + enum { + DHCP6_REQUEST_IA_NA = 1, +@@ -71,6 +74,8 @@ struct sd_dhcp6_client { + void *userdata; + struct duid duid; + size_t duid_len; ++ usec_t information_request_time_usec; ++ usec_t information_refresh_time_usec; + }; + + static const uint16_t default_req_opts[] = { +@@ -820,6 +825,7 @@ static int client_parse_message( + uint32_t lt_t1 = ~0, lt_t2 = ~0; + bool clientid = false; + size_t pos = 0; ++ usec_t irt = IRT_DEFAULT; + int r; + + assert(client); +@@ -994,6 +1000,13 @@ static int client_parse_message( + return r; + + break; ++ ++ case SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME: ++ if (optlen != 4) ++ return -EINVAL; ++ ++ irt = unaligned_read_be32((be32_t *) optval) * USEC_PER_SEC; ++ break; + } + + pos += offsetof(DHCP6Option, data) + optlen; +@@ -1025,6 +1038,8 @@ static int client_parse_message( + } + } + ++ client->information_refresh_time_usec = MAX(irt, IRT_MINIMUM); ++ + return 0; + } + +@@ -1425,8 +1440,15 @@ int sd_dhcp6_client_start(sd_dhcp6_clien + client->fd = r; + } + +- if (client->information_request) ++ if (client->information_request) { ++ usec_t t = now(CLOCK_MONOTONIC); ++ ++ if (t < usec_add(client->information_request_time_usec, client->information_refresh_time_usec)) ++ return 0; ++ ++ client->information_request_time_usec = t; + state = DHCP6_STATE_INFORMATION_REQUEST; ++ } + + log_dhcp6_client(client, "Started in %s mode", + client->information_request? "Information request": +diff -Naurp systemd-243.orig/src/libsystemd-network/sd-ndisc.c systemd-243/src/libsystemd-network/sd-ndisc.c +--- systemd-243.orig/src/libsystemd-network/sd-ndisc.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/libsystemd-network/sd-ndisc.c 2019-10-01 22:41:47.438123435 -0500 +@@ -365,7 +365,7 @@ _public_ int sd_ndisc_start(sd_ndisc *nd + + r = event_reset_time(nd->event, &nd->timeout_event_source, + clock_boottime_or_monotonic(), +- 0, 0, ++ time_now + USEC_PER_SEC / 2, 1 * USEC_PER_SEC, /* See RFC 8415 sec. 18.2.1 */ + ndisc_timeout, nd, + nd->event_priority, "ndisc-timeout", true); + if (r < 0) +diff -Naurp systemd-243.orig/src/libsystemd-network/sd-radv.c systemd-243/src/libsystemd-network/sd-radv.c +--- systemd-243.orig/src/libsystemd-network/sd-radv.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/libsystemd-network/sd-radv.c 2019-10-01 22:37:09.776345614 -0500 +@@ -269,6 +269,10 @@ static int radv_recv(sd_event_source *s, + static usec_t radv_compute_timeout(usec_t min, usec_t max) { + assert_return(min <= max, SD_RADV_DEFAULT_MIN_TIMEOUT_USEC); + ++ /* RFC 4861: min must be no less than 3s, max must be no less than 4s */ ++ min = MAX(min, 3*USEC_PER_SEC); ++ max = MAX(max, 4*USEC_PER_SEC); ++ + return min + (random_u32() % (max - min)); + } + +@@ -298,6 +302,13 @@ static int radv_timeout(sd_event_source + min_timeout = SD_RADV_MAX_INITIAL_RTR_ADVERT_INTERVAL_USEC / 3; + } + ++ /* RFC 4861, Section 6.2.1, lifetime must be at least MaxRtrAdvInterval, ++ * so lower the interval here. */ ++ if (ra->lifetime > 0 && (ra->lifetime * USEC_PER_SEC) < max_timeout) { ++ max_timeout = ra->lifetime * USEC_PER_SEC; ++ min_timeout = max_timeout / 3; ++ } ++ + timeout = radv_compute_timeout(min_timeout, max_timeout); + + log_radv("Next Router Advertisement in %s", +diff -Naurp systemd-243.orig/src/login/logind-brightness.c systemd-243/src/login/logind-brightness.c +--- systemd-243.orig/src/login/logind-brightness.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/login/logind-brightness.c 2019-10-01 21:52:23.550672020 -0500 +@@ -213,7 +213,7 @@ int manager_write_brightness( + if (r < 0) + return log_error_errno(r, "Failed to add message to set: %m"); + +- /* We overide any previously requested brightness here: we coalesce writes, and the newest ++ /* We override any previously requested brightness here: we coalesce writes, and the newest + * requested brightness is the one we'll put into effect. */ + existing->brightness = brightness; + existing->again = true; /* request another iteration of the writer when the current one is +diff -Naurp systemd-243.orig/src/login/logind.c systemd-243/src/login/logind.c +--- systemd-243.orig/src/login/logind.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/login/logind.c 2019-10-01 22:45:33.319096088 -0500 +@@ -291,6 +291,7 @@ static int manager_enumerate_linger_user + FOREACH_DIRENT(de, d, return -errno) { + int k; + ++ dirent_ensure_type(d, de); + if (!dirent_is_file(de)) + continue; + +diff -Naurp systemd-243.orig/src/network/netdev/netdev.c systemd-243/src/network/netdev/netdev.c +--- systemd-243.orig/src/network/netdev/netdev.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/network/netdev/netdev.c 2019-10-01 23:01:36.879512311 -0500 +@@ -844,7 +844,7 @@ int netdev_load(Manager *manager) { + STRV_FOREACH(f, files) { + r = netdev_load_one(manager, *f); + if (r < 0) +- return r; ++ log_error_errno(r, "Failed to load %s, ignoring: %m", *f); + } + + return 0; +diff -Naurp systemd-243.orig/src/network/networkd-dhcp4.c systemd-243/src/network/networkd-dhcp4.c +--- systemd-243.orig/src/network/networkd-dhcp4.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/network/networkd-dhcp4.c 2019-10-01 22:20:22.238274559 -0500 +@@ -198,7 +198,7 @@ static int link_set_dhcp_routes(Link *li + if (n == -ENODATA) + log_link_debug_errno(link, n, "DHCP: No routes received from DHCP server: %m"); + else if (n < 0) +- log_link_debug_errno(link, n, "DHCP error: could not get routes: %m"); ++ log_link_debug_errno(link, n, "DHCP: could not get routes: %m"); + + for (i = 0; i < n; i++) { + switch (sd_dhcp_route_get_option(static_routes[i])) { +diff -Naurp systemd-243.orig/src/network/networkd-link.c systemd-243/src/network/networkd-link.c +--- systemd-243.orig/src/network/networkd-link.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/network/networkd-link.c 2019-10-01 22:34:21.629468144 -0500 +@@ -2393,9 +2393,9 @@ static int link_drop_foreign_config(Link + continue; + + if (link_address_is_dynamic(link, address)) { +- if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) ++ if (link->network && FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) + continue; +- } else if (FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_STATIC)) ++ } else if (link->network && FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_STATIC)) + continue; + + if (link_is_static_address_configured(link, address)) { +@@ -2435,11 +2435,11 @@ static int link_drop_foreign_config(Link + in_addr_equal(AF_INET6, &route->dst, &(union in_addr_union) { .in6 = {{{ 0xff,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 }}} })) + continue; + +- if (route->protocol == RTPROT_STATIC && ++ if (route->protocol == RTPROT_STATIC && link->network && + FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_STATIC)) + continue; + +- if (route->protocol == RTPROT_DHCP && ++ if (route->protocol == RTPROT_DHCP && link->network && + FLAGS_SET(link->network->keep_configuration, KEEP_CONFIGURATION_DHCP)) + continue; + +@@ -3116,8 +3116,8 @@ int link_add(Manager *m, sd_netlink_mess + sprintf(ifindex_str, "n%d", link->ifindex); + r = sd_device_new_from_device_id(&device, ifindex_str); + if (r < 0) { +- log_link_warning_errno(link, r, "Could not find device: %m"); +- goto failed; ++ log_link_warning_errno(link, r, "Could not find device, waiting for device initialization: %m"); ++ return 0; + } + + r = sd_device_get_is_initialized(device); +diff -Naurp systemd-243.orig/src/network/networkd-network.c systemd-243/src/network/networkd-network.c +--- systemd-243.orig/src/network/networkd-network.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/network/networkd-network.c 2019-10-01 22:05:57.448236566 -0500 +@@ -506,7 +506,7 @@ int network_load(Manager *manager) { + STRV_FOREACH(f, files) { + r = network_load_one(manager, *f); + if (r < 0) +- return r; ++ log_error_errno(r, "Failed to load %s, ignoring: %m", *f); + } + + return 0; +diff -Naurp systemd-243.orig/src/network/networkd-routing-policy-rule.c systemd-243/src/network/networkd-routing-policy-rule.c +--- systemd-243.orig/src/network/networkd-routing-policy-rule.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/network/networkd-routing-policy-rule.c 2019-10-01 22:23:41.366026741 -0500 +@@ -180,11 +180,11 @@ static int routing_policy_rule_compare_f + return r; + + r = strcmp_ptr(a->iif, b->iif); +- if (!r) ++ if (r != 0) + return r; + + r = strcmp_ptr(a->oif, b->oif); +- if (!r) ++ if (r != 0) + return r; + + r = CMP(a->protocol, b->protocol); +diff -Naurp systemd-243.orig/src/network/org.freedesktop.network1.policy systemd-243/src/network/org.freedesktop.network1.policy +--- systemd-243.orig/src/network/org.freedesktop.network1.policy 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/network/org.freedesktop.network1.policy 2019-10-01 22:29:45.535932148 -0500 +@@ -119,7 +119,7 @@ + + <action id="org.freedesktop.network1.revert-ntp"> + <description gettext-domain="systemd">Revert NTP settings</description> +- <message gettext-domain="systemd">Authentication is required to revert NTP settings.</message> ++ <message gettext-domain="systemd">Authentication is required to reset NTP settings.</message> + <defaults> + <allow_any>auth_admin</allow_any> + <allow_inactive>auth_admin</allow_inactive> +@@ -130,7 +130,7 @@ + + <action id="org.freedesktop.network1.revert-dns"> + <description gettext-domain="systemd">Revert DNS settings</description> +- <message gettext-domain="systemd">Authentication is required to revert DNS settings.</message> ++ <message gettext-domain="systemd">Authentication is required to reset DNS settings.</message> + <defaults> + <allow_any>auth_admin</allow_any> + <allow_inactive>auth_admin</allow_inactive> +diff -Naurp systemd-243.orig/src/pstore/pstore.c systemd-243/src/pstore/pstore.c +--- systemd-243.orig/src/pstore/pstore.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/pstore/pstore.c 2019-10-01 22:04:18.392420804 -0500 +@@ -117,6 +117,7 @@ static int compare_pstore_entries(const + + static int move_file(PStoreEntry *pe, const char *subdir) { + _cleanup_free_ char *ifd_path = NULL, *ofd_path = NULL; ++ _cleanup_free_ void *field = NULL; + const char *suffix, *message; + struct iovec iovec[2]; + int n_iovec = 0, r; +@@ -138,7 +139,6 @@ static int move_file(PStoreEntry *pe, co + iovec[n_iovec++] = IOVEC_MAKE_STRING(message); + + if (pe->content_size > 0) { +- _cleanup_free_ void *field = NULL; + size_t field_size; + + field_size = strlen("FILE=") + pe->content_size; +@@ -157,7 +157,7 @@ static int move_file(PStoreEntry *pe, co + /* Move file from pstore to external storage */ + r = mkdir_parents(ofd_path, 0755); + if (r < 0) +- return log_error_errno(r, "Failed to create directoy %s: %m", ofd_path); ++ return log_error_errno(r, "Failed to create directory %s: %m", ofd_path); + r = copy_file_atomic(ifd_path, ofd_path, 0600, 0, 0, COPY_REPLACE); + if (r < 0) + return log_error_errno(r, "Failed to copy_file_atomic: %s to %s", ifd_path, ofd_path); +diff -Naurp systemd-243.orig/src/resolve/org.freedesktop.resolve1.policy systemd-243/src/resolve/org.freedesktop.resolve1.policy +--- systemd-243.orig/src/resolve/org.freedesktop.resolve1.policy 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/resolve/org.freedesktop.resolve1.policy 2019-10-01 22:30:01.875748763 -0500 +@@ -130,7 +130,7 @@ + + <action id="org.freedesktop.resolve1.revert"> + <description gettext-domain="systemd">Revert name resolution settings</description> +- <message gettext-domain="systemd">Authentication is required to revert name resolution settings.</message> ++ <message gettext-domain="systemd">Authentication is required to reset name resolution settings.</message> + <defaults> + <allow_any>auth_admin</allow_any> + <allow_inactive>auth_admin</allow_inactive> +diff -Naurp systemd-243.orig/src/resolve/resolved-dns-transaction.c systemd-243/src/resolve/resolved-dns-transaction.c +--- systemd-243.orig/src/resolve/resolved-dns-transaction.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/resolve/resolved-dns-transaction.c 2019-10-01 22:10:53.678766616 -0500 +@@ -1183,8 +1183,8 @@ static int on_dns_packet(sd_event_source + if (ERRNO_IS_DISCONNECT(-r)) { + usec_t usec; + +- /* UDP connection failure get reported via ICMP and then are possible delivered to us on the next +- * recvmsg(). Treat this like a lost packet. */ ++ /* UDP connection failures get reported via ICMP and then are possibly delivered to us on the ++ * next recvmsg(). Treat this like a lost packet. */ + + log_debug_errno(r, "Connection failure for DNS UDP packet: %m"); + assert_se(sd_event_now(t->scope->manager->event, clock_boottime_or_monotonic(), &usec) >= 0); +@@ -1199,6 +1199,10 @@ static int on_dns_packet(sd_event_source + return 0; + } + ++ if (r == 0) ++ /* Spurious wakeup without any data */ ++ return 0; ++ + r = dns_packet_validate_reply(p); + if (r < 0) { + log_debug_errno(r, "Received invalid DNS packet as response, ignoring: %m"); +diff -Naurp systemd-243.orig/src/shared/bootspec.c systemd-243/src/shared/bootspec.c +--- systemd-243.orig/src/shared/bootspec.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/shared/bootspec.c 2019-10-01 22:45:44.678990467 -0500 +@@ -475,6 +475,7 @@ static int boot_entries_find_unified( + _cleanup_free_ char *j = NULL, *osrelease = NULL, *cmdline = NULL; + _cleanup_close_ int fd = -1; + ++ dirent_ensure_type(d, de); + if (!dirent_is_file(de)) + continue; + +diff -Naurp systemd-243.orig/src/shared/unit-file.c systemd-243/src/shared/unit-file.c +--- systemd-243.orig/src/shared/unit-file.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/shared/unit-file.c 2019-10-01 22:59:07.440047857 -0500 +@@ -279,6 +279,7 @@ int unit_file_build_name_map( + if (hashmap_contains(ids, de->d_name)) + continue; + ++ dirent_ensure_type(d, de); + if (de->d_type == DT_LNK) { + /* We don't explicitly check for alias loops here. unit_ids_map_get() which + * limits the number of hops should be used to access the map. */ +diff -Naurp systemd-243.orig/src/systemd/sd-dhcp6-client.h systemd-243/src/systemd/sd-dhcp6-client.h +--- systemd-243.orig/src/systemd/sd-dhcp6-client.h 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/systemd/sd-dhcp6-client.h 2019-10-01 22:41:11.624429633 -0500 +@@ -66,6 +66,7 @@ enum { + SD_DHCP6_OPTION_IA_PD_PREFIX = 26, /* RFC 3633, prefix delegation */ + + SD_DHCP6_OPTION_SNTP_SERVERS = 31, /* RFC 4075, deprecated */ ++ SD_DHCP6_OPTION_INFORMATION_REFRESH_TIME = 32, /* RFC 8415, sec. 21.23 */ + + /* option code 35 is unassigned */ + +diff -Naurp systemd-243.orig/src/tty-ask-password-agent/tty-ask-password-agent.c systemd-243/src/tty-ask-password-agent/tty-ask-password-agent.c +--- systemd-243.orig/src/tty-ask-password-agent/tty-ask-password-agent.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/tty-ask-password-agent/tty-ask-password-agent.c 2019-10-01 22:22:15.204998341 -0500 +@@ -322,7 +322,7 @@ static int parse_password(const char *fi + + if (asprintf(&_wall, + "%s%sPassword entry required for \'%s\' (PID %u).\r\n" +- "Please enter password with the systemd-tty-ask-password-agent tool:", ++ "Please enter password with the systemd-tty-ask-password-agent tool.", + strempty(*wall), + *wall ? "\r\n\r\n" : "", + message, +diff -Naurp systemd-243.orig/src/udev/udev-ctrl.c systemd-243/src/udev/udev-ctrl.c +--- systemd-243.orig/src/udev/udev-ctrl.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/udev/udev-ctrl.c 2019-10-01 22:25:31.447787245 -0500 +@@ -76,6 +76,7 @@ int udev_ctrl_new_from_fd(struct udev_ct + *uctrl = (struct udev_ctrl) { + .n_ref = 1, + .sock = fd >= 0 ? fd : TAKE_FD(sock), ++ .sock_connect = -1, + .bound = fd >= 0, + }; + +@@ -394,14 +395,13 @@ int udev_ctrl_wait(struct udev_ctrl *uct + (void) sd_event_source_set_description(source_io, "udev-ctrl-wait-io"); + + if (timeout != USEC_INFINITY) { +- usec_t usec; +- +- usec = now(clock_boottime_or_monotonic()) + timeout; +- r = sd_event_add_time(uctrl->event, &source_timeout, clock_boottime_or_monotonic(), usec, 0, NULL, INT_TO_PTR(-ETIMEDOUT)); ++ r = sd_event_add_time(uctrl->event, &source_timeout, clock_boottime_or_monotonic(), ++ usec_add(now(clock_boottime_or_monotonic()), timeout), ++ 0, NULL, INT_TO_PTR(-ETIMEDOUT)); + if (r < 0) + return r; + +- (void) sd_event_source_set_description(source_timeout, "udev-ctrl-wait-io"); ++ (void) sd_event_source_set_description(source_timeout, "udev-ctrl-wait-timeout"); + } + + return sd_event_loop(uctrl->event); +diff -Naurp systemd-243.orig/src/udev/udev-rules.c systemd-243/src/udev/udev-rules.c +--- systemd-243.orig/src/udev/udev-rules.c 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/src/udev/udev-rules.c 2019-10-01 22:08:29.225447382 -0500 +@@ -43,10 +43,12 @@ typedef enum { + } UdevRuleOperatorType; + + typedef enum { +- MATCH_TYPE_EMPTY, /* empty string */ +- MATCH_TYPE_PLAIN, /* no special characters */ +- MATCH_TYPE_GLOB, /* shell globs ?,*,[] */ +- MATCH_TYPE_SUBSYSTEM, /* "subsystem", "bus", or "class" */ ++ MATCH_TYPE_EMPTY, /* empty string */ ++ MATCH_TYPE_PLAIN, /* no special characters */ ++ MATCH_TYPE_PLAIN_WITH_EMPTY, /* no special characters with empty string, e.g., "|foo" */ ++ MATCH_TYPE_GLOB, /* shell globs ?,*,[] */ ++ MATCH_TYPE_GLOB_WITH_EMPTY, /* shell globs ?,*,[] with empty string, e.g., "|foo*" */ ++ MATCH_TYPE_SUBSYSTEM, /* "subsystem", "bus", or "class" */ + _MATCH_TYPE_MAX, + _MATCH_TYPE_INVALID = -1 + } UdevRuleMatchType; +@@ -431,35 +433,30 @@ static int rule_line_add_token(UdevRuleL + + if (type < TK_M_TEST || type == TK_M_RESULT) { + /* Convert value string to nulstr. */ +- len = strlen(value); +- if (len > 1 && (value[len - 1] == '|' || strstr(value, "||"))) { +- /* In this case, just replacing '|' -> '\0' does not work... */ +- _cleanup_free_ char *tmp = NULL; +- char *i, *j; +- bool v = true; ++ bool bar = true, empty = false; ++ char *a, *b; + +- tmp = strdup(value); +- if (!tmp) +- return log_oom(); +- +- for (i = tmp, j = value; *i != '\0'; i++) +- if (*i == '|') +- v = true; +- else { +- if (v) { +- *j++ = '\0'; +- v = false; +- } +- *j++ = *i; +- } +- j[0] = j[1] = '\0'; +- } else { +- /* Simple conversion. */ +- char *i; +- +- for (i = value; *i != '\0'; i++) +- if (*i == '|') +- *i = '\0'; ++ for (a = b = value; *a != '\0'; a++) { ++ if (*a != '|') { ++ *b++ = *a; ++ bar = false; ++ } else { ++ if (bar) ++ empty = true; ++ else ++ *b++ = '\0'; ++ bar = true; ++ } ++ } ++ *b = '\0'; ++ if (bar) ++ empty = true; ++ ++ if (empty) { ++ if (match_type == MATCH_TYPE_GLOB) ++ match_type = MATCH_TYPE_GLOB_WITH_EMPTY; ++ if (match_type == MATCH_TYPE_PLAIN) ++ match_type = MATCH_TYPE_PLAIN_WITH_EMPTY; + } + } + } +@@ -499,6 +496,9 @@ static int rule_line_add_token(UdevRuleL + TK_A_OWNER_ID, TK_A_GROUP_ID, TK_A_MODE_ID)) + SET_FLAG(rule_line->type, LINE_HAS_DEVLINK, true); + ++ else if (token->type == TK_A_OPTIONS_STATIC_NODE) ++ SET_FLAG(rule_line->type, LINE_HAS_STATIC_NODE, true); ++ + else if (token->type >= _TK_A_MIN || + IN_SET(token->type, TK_M_PROGRAM, + TK_M_IMPORT_FILE, TK_M_IMPORT_PROGRAM, TK_M_IMPORT_BUILTIN, +@@ -1325,7 +1325,17 @@ static bool token_match_string(UdevRuleT + match = isempty(str); + break; + case MATCH_TYPE_SUBSYSTEM: +- value = "subsystem\0class\0bus\0"; ++ NULSTR_FOREACH(i, "subsystem\0class\0bus\0") ++ if (streq(i, str)) { ++ match = true; ++ break; ++ } ++ break; ++ case MATCH_TYPE_PLAIN_WITH_EMPTY: ++ if (isempty(str)) { ++ match = true; ++ break; ++ } + _fallthrough_; + case MATCH_TYPE_PLAIN: + NULSTR_FOREACH(i, value) +@@ -1334,6 +1344,12 @@ static bool token_match_string(UdevRuleT + break; + } + break; ++ case MATCH_TYPE_GLOB_WITH_EMPTY: ++ if (isempty(str)) { ++ match = true; ++ break; ++ } ++ _fallthrough_; + case MATCH_TYPE_GLOB: + NULSTR_FOREACH(i, value) + if ((fnmatch(i, str, 0) == 0)) { +@@ -2301,7 +2317,7 @@ static int apply_static_dev_perms(const + return log_error_errno(errno, "Failed to chown '%s' %u %u: %m", + device_node, uid, gid); + else +- log_debug("chown '%s' %u:%u", device_node, uid, gid); ++ log_debug("chown '%s' %u:%u with mode %#o", device_node, uid, gid, mode); + + (void) utimensat(AT_FDCWD, device_node, NULL, 0); + return 0; +diff -Naurp systemd-243.orig/test/TEST-36-NUMAPOLICY/test.sh systemd-243/test/TEST-36-NUMAPOLICY/test.sh +--- systemd-243.orig/test/TEST-36-NUMAPOLICY/test.sh 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/test/TEST-36-NUMAPOLICY/test.sh 2019-10-01 22:25:58.126487116 -0500 +@@ -1,5 +1,6 @@ + #!/bin/bash + set -e ++ + TEST_DESCRIPTION="test MUMAPolicy= and NUMAMask= options" + TEST_NO_NSPAWN=1 + QEMU_OPTIONS="-numa node,nodeid=0" +@@ -39,7 +40,7 @@ EOF + cp testsuite.sh $initdir/ + + setup_testsuite +- ) || return 1 ++ ) + setup_nspawn_root + } + +diff -Naurp systemd-243.orig/test/udev-test.pl systemd-243/test/udev-test.pl +--- systemd-243.orig/test/udev-test.pl 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/test/udev-test.pl 2019-10-01 22:06:18.490986814 -0500 +@@ -1259,6 +1259,72 @@ KERNEL=="ttyACM0a|nothing", SYMLINK+="wr + EOF + }, + { ++ desc => "test multi matches 5", ++ devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", ++ exp_name => "found", ++ not_exp_name => "bad", ++ rules => <<EOF ++KERNEL=="sda", TAG="foo" ++TAGS=="|foo", SYMLINK+="found" ++TAGS=="|aaa", SYMLINK+="bad" ++EOF ++ }, ++ { ++ desc => "test multi matches 6", ++ devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", ++ exp_name => "found", ++ not_exp_name => "bad", ++ rules => <<EOF ++KERNEL=="sda", TAG="" ++TAGS=="|foo", SYMLINK+="found" ++TAGS=="aaa|bbb", SYMLINK+="bad" ++EOF ++ }, ++ { ++ desc => "test multi matches 7", ++ devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", ++ exp_name => "found", ++ not_exp_name => "bad", ++ rules => <<EOF ++KERNEL=="sda", TAG="foo" ++TAGS=="foo||bar", SYMLINK+="found" ++TAGS=="aaa||bbb", SYMLINK+="bad" ++EOF ++ }, ++ { ++ desc => "test multi matches 8", ++ devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", ++ exp_name => "found", ++ not_exp_name => "bad", ++ rules => <<EOF ++KERNEL=="sda", TAG="" ++TAGS=="foo||bar", SYMLINK+="found" ++TAGS=="aaa|bbb", SYMLINK+="bad" ++EOF ++ }, ++ { ++ desc => "test multi matches 9", ++ devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", ++ exp_name => "found", ++ not_exp_name => "bad", ++ rules => <<EOF ++KERNEL=="sda", TAG="" ++TAGS=="foo|", SYMLINK+="found" ++TAGS=="aaa|", SYMLINK+="bad" ++EOF ++ }, ++ { ++ desc => "test multi matches 10", ++ devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", ++ exp_name => "found", ++ not_exp_name => "bad", ++ rules => <<EOF ++KERNEL=="sda", TAG="" ++TAGS=="foo|", SYMLINK+="found" ++TAGS=="aaa|bbb", SYMLINK+="bad" ++EOF ++ }, ++ { + desc => "IMPORT parent test sequence 1/2 (keep)", + devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", + exp_name => "parent", +diff -Naurp systemd-243.orig/tmpfiles.d/systemd.conf.m4 systemd-243/tmpfiles.d/systemd.conf.m4 +--- systemd-243.orig/tmpfiles.d/systemd.conf.m4 2019-09-03 04:27:19.000000000 -0500 ++++ systemd-243/tmpfiles.d/systemd.conf.m4 2019-10-01 22:19:52.574610185 -0500 +@@ -8,7 +8,9 @@ + # See tmpfiles.d(5) for details + + d /run/user 0755 root root - ++m4_ifdef(`ENABLE_UTMP', + F! /run/utmp 0664 root utmp - ++)m4_dnl + + d /run/systemd/ask-password 0755 root root - + d /run/systemd/seats 0755 root root - -- http://lists.linuxfromscratch.org/listinfo/patches FAQ: http://www.linuxfromscratch.org/blfs/faq.html Unsubscribe: See the above information page