Package: release.debian.org
Severity: normal
Tags: bookworm
User: release.debian....@packages.debian.org
Usertags: pu
X-Debbugs-Cc: pkg-systemd-maintain...@lists.alioth.debian.org

Dear Release Team,

We would like to upload the latest stable point release of systemd 252
to bookworm-p-u. Stable release branches are maintained upstream with
the intention of providing bug fixes only and no compatibility
breakages, and with automated non-trivial CI jobs that also cover
Debian and Ubuntu. I have already uploaded to p-u.

Packaging changes are refreshing patches and adding a missing
dependency for one autopkgtest suite, that should now result in a fully
green DebCI run. Attached debdiff excludes hwdb.d/ changes, which are
just a large number of hardware vendor/devices IDs and constitutes the
bulk of the changes. The list of commits included can be seen at:

https://github.com/systemd/systemd-stable/compare/v252.21...v252.22

-- 
Kind regards,
Luca Boccassi
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/debian/changelog systemd-252.22/debian/changelog
--- systemd-252.21/debian/changelog	2023-12-24 14:29:22.000000000 +0000
+++ systemd-252.22/debian/changelog	2024-01-26 21:48:36.000000000 +0000
@@ -1,3 +1,12 @@
+systemd (252.22-1~deb12u1) bookworm; urgency=medium
+
+  * d/t/control: add dependency on stress for upstream suite. Needed by
+    TEST-55-OOMD
+  * New upstream version 252.22
+  * Refresh patches
+
+ -- Luca Boccassi <bl...@debian.org>  Fri, 26 Jan 2024 21:48:36 +0000
+
 systemd (252.21-1~deb12u1) bookworm; urgency=medium
 
   * New upstream version 252.21
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/debian/patches/debian/fsckd-daemon-for-inter-fsckd-communication.patch systemd-252.22/debian/patches/debian/fsckd-daemon-for-inter-fsckd-communication.patch
--- systemd-252.21/debian/patches/debian/fsckd-daemon-for-inter-fsckd-communication.patch	2023-12-24 14:29:22.000000000 +0000
+++ systemd-252.22/debian/patches/debian/fsckd-daemon-for-inter-fsckd-communication.patch	2024-01-26 21:48:26.000000000 +0000
@@ -239,10 +239,10 @@
 +
 +</refentry>
 diff --git a/meson.build b/meson.build
-index b9f2c7e..d2b021d 100644
+index 27d95e7..9ace3e6 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -3367,6 +3367,15 @@ executable(
+@@ -3368,6 +3368,15 @@ executable(
          install : true,
          install_dir : rootlibexecdir)
  
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/debian/patches/debian/Revert-core-one-step-back-again-for-nspawn-we-actual.patch systemd-252.22/debian/patches/debian/Revert-core-one-step-back-again-for-nspawn-we-actual.patch
--- systemd-252.21/debian/patches/debian/Revert-core-one-step-back-again-for-nspawn-we-actual.patch	2023-12-24 14:29:22.000000000 +0000
+++ systemd-252.22/debian/patches/debian/Revert-core-one-step-back-again-for-nspawn-we-actual.patch	2024-01-26 21:48:26.000000000 +0000
@@ -14,7 +14,7 @@
  1 file changed, 1 insertion(+), 10 deletions(-)
 
 diff --git a/src/core/unit.c b/src/core/unit.c
-index 767e821..1f2651e 100644
+index 52df7ce..fb9a740 100644
 --- a/src/core/unit.c
 +++ b/src/core/unit.c
 @@ -4646,16 +4646,7 @@ int unit_kill_context(
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/debian/patches/p11kit-switch-to-dlopen.patch systemd-252.22/debian/patches/p11kit-switch-to-dlopen.patch
--- systemd-252.21/debian/patches/p11kit-switch-to-dlopen.patch	2023-12-24 14:29:22.000000000 +0000
+++ systemd-252.22/debian/patches/p11kit-switch-to-dlopen.patch	2024-01-26 21:48:26.000000000 +0000
@@ -13,10 +13,10 @@
  7 files changed, 202 insertions(+), 60 deletions(-)
 
 diff --git a/meson.build b/meson.build
-index b250474..b9f2c7e 100644
+index 9de2309..27d95e7 100644
 --- a/meson.build
 +++ b/meson.build
-@@ -1461,8 +1461,10 @@ if want_p11kit != 'false' and not skip_deps
+@@ -1462,8 +1462,10 @@ if want_p11kit != 'false' and not skip_deps
                                 version : '>= 0.23.3',
                                 required : want_p11kit == 'true')
          have = libp11kit.found()
@@ -718,10 +718,10 @@
  }
  
 diff --git a/test/test-functions b/test/test-functions
-index 29f346f..c169635 100644
+index 73fbef8..0ba7ce2 100644
 --- a/test/test-functions
 +++ b/test/test-functions
-@@ -1369,7 +1369,7 @@ install_missing_libraries() {
+@@ -1386,7 +1386,7 @@ install_missing_libraries() {
      local lib path
      # A number of dependencies is now optional via dlopen, so the install
      # script will not pick them up, since it looks at linkage.
@@ -730,7 +730,7 @@
          ddebug "Searching for $lib via pkg-config"
          if pkg-config --exists "$lib"; then
                  path="$(pkg-config --variable=libdir "$lib")"
-@@ -1381,6 +1381,10 @@ install_missing_libraries() {
+@@ -1398,6 +1398,10 @@ install_missing_libraries() {
                  if ! [[ ${lib} =~ ^lib ]]; then
                          lib="lib${lib}"
                  fi
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/debian/tests/control systemd-252.22/debian/tests/control
--- systemd-252.21/debian/tests/control	2023-12-24 14:29:22.000000000 +0000
+++ systemd-252.22/debian/tests/control	2024-01-26 21:46:55.000000000 +0000
@@ -191,6 +191,7 @@
   xkb-data,
   locales,
   locales-all,
+  stress,
 Restrictions: needs-root, allow-stderr, isolation-machine
 
 Tests: boot-smoke
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/factory/etc/pam.d/system-auth systemd-252.22/factory/etc/pam.d/system-auth
--- systemd-252.21/factory/etc/pam.d/system-auth	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/factory/etc/pam.d/system-auth	2024-01-26 21:35:39.000000000 +0000
@@ -13,7 +13,7 @@
 account   required   pam_permit.so
 
 -password sufficient pam_systemd_home.so
-password  sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
+password  sufficient pam_unix.so sha512 shadow try_first_pass
 password  required   pam_deny.so
 
 -session  optional   pam_keyinit.so revoke
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/man/pam_systemd_home.xml systemd-252.22/man/pam_systemd_home.xml
--- systemd-252.21/man/pam_systemd_home.xml	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/man/pam_systemd_home.xml	2024-01-26 21:35:39.000000000 +0000
@@ -148,7 +148,7 @@
 account   required   pam_permit.so
 
 <command>-password sufficient pam_systemd_home.so</command>
-password  sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
+password  sufficient pam_unix.so sha512 shadow try_first_pass
 password  required   pam_deny.so
 
 -session  optional   pam_keyinit.so revoke
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/man/pam_systemd.xml systemd-252.22/man/pam_systemd.xml
--- systemd-252.21/man/pam_systemd.xml	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/man/pam_systemd.xml	2024-01-26 21:35:39.000000000 +0000
@@ -318,8 +318,7 @@
 account   required   pam_permit.so
 
 -password sufficient pam_systemd_home.so
-password  sufficient pam_unix.so sha512 shadow try_first_pass use_authtok
-
+password  sufficient pam_unix.so sha512 shadow try_first_pass
 password  required   pam_deny.so
 
 -session  optional   pam_keyinit.so revoke
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/man/systemctl.xml systemd-252.22/man/systemctl.xml
--- systemd-252.21/man/systemctl.xml	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/man/systemctl.xml	2024-01-26 21:35:39.000000000 +0000
@@ -2287,9 +2287,10 @@
         <term><option>--firmware-setup</option></term>
 
         <listitem>
-          <para>When used with the <command>reboot</command> command, indicate to the system's firmware to
-          reboot into the firmware setup interface. Note that this functionality is not available on all
-          systems.</para>
+          <para>When used with the <command>reboot</command>, <command>poweroff</command>, or
+          <command>halt</command> command, indicate to the system's firmware to reboot into the firmware
+          setup interface for the next boot. Note that this functionality is not available on all systems.
+          </para>
         </listitem>
       </varlistentry>
 
@@ -2297,10 +2298,11 @@
         <term><option>--boot-loader-menu=<replaceable>timeout</replaceable></option></term>
 
         <listitem>
-          <para>When used with the <command>reboot</command> command, indicate to the system's boot loader to
-          show the boot loader menu on the following boot. Takes a time value as parameter — indicating the
-          menu timeout. Pass zero in order to disable the menu timeout. Note that not all boot loaders
-          support this functionality.</para>
+          <para>When used with the <command>reboot</command>, <command>poweroff</command>, or
+          <command>halt</command> command, indicate to the system's boot loader to show the boot loader menu
+          on the following boot. Takes a time value as parameter — indicating the menu timeout. Pass zero
+          in order to disable the menu timeout. Note that not all boot loaders support this functionality.
+          </para>
         </listitem>
       </varlistentry>
 
@@ -2308,10 +2310,11 @@
         <term><option>--boot-loader-entry=<replaceable>ID</replaceable></option></term>
 
         <listitem>
-          <para>When used with the <command>reboot</command> command, indicate to the system's boot loader to
-          boot into a specific boot loader entry on the following boot. Takes a boot loader entry identifier
-          as argument, or <literal>help</literal> in order to list available entries. Note that not all boot
-          loaders support this functionality.</para>
+          <para>When used with the <command>reboot</command>, <command>poweroff</command>, or
+          <command>halt</command> command, indicate to the system's boot loader to boot into a specific
+          boot loader entry on the following boot. Takes a boot loader entry identifier as argument,
+          or <literal>help</literal> in order to list available entries. Note that not all boot loaders
+          support this functionality.</para>
         </listitem>
       </varlistentry>
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/man/systemd-analyze.xml systemd-252.22/man/systemd-analyze.xml
--- systemd-252.21/man/systemd-analyze.xml	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/man/systemd-analyze.xml	2024-01-26 21:35:39.000000000 +0000
@@ -1253,6 +1253,7 @@
       <xi:include href="user-system-options.xml" xpointer="machine" />
 
       <varlistentry>
+        <term><option>-q</option></term>
         <term><option>--quiet</option></term>
 
         <listitem><para>Suppress hints and other non-essential output.</para></listitem>
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/man/systemd-detect-virt.xml systemd-252.22/man/systemd-detect-virt.xml
--- systemd-252.21/man/systemd-detect-virt.xml	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/man/systemd-detect-virt.xml	2024-01-26 21:35:39.000000000 +0000
@@ -139,7 +139,7 @@
 
           <row>
             <entry><varname>apple</varname></entry>
-            <entry><ulink url="https://developer.apple.com/documentation/virtualization";>Apple Virtualization.framework</ulink></entry>
+            <entry><ulink url="https://developer.apple.com/documentation/virtualization";>Apple virtualization framework</ulink></entry>
           </row>
 
           <row>
@@ -148,6 +148,11 @@
           </row>
 
           <row>
+            <entry><varname>google</varname></entry>
+            <entry><ulink url="https://cloud.google.com/compute";>Google Compute Engine</ulink></entry>
+          </row>
+
+          <row>
             <entry valign="top" morerows="9">Container</entry>
             <entry><varname>openvz</varname></entry>
             <entry>OpenVZ/Virtuozzo</entry>
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/meson.build systemd-252.22/meson.build
--- systemd-252.21/meson.build	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/meson.build	2024-01-26 21:35:39.000000000 +0000
@@ -349,6 +349,7 @@
 basic_disabled_warnings = [
         '-Wno-missing-field-initializers',
         '-Wno-unused-parameter',
+        '-Wno-nonnull-compare',
 ]
 
 possible_common_cc_flags = [
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/mkosi.default.d/debian/10-mkosi.debian systemd-252.22/mkosi.default.d/debian/10-mkosi.debian
--- systemd-252.21/mkosi.default.d/debian/10-mkosi.debian	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/mkosi.default.d/debian/10-mkosi.debian	2024-01-26 21:35:39.000000000 +0000
@@ -23,6 +23,7 @@
         libpam0g
         libpwquality1
         libqrencode4
+        libip4tc2
         libtss2-dev # Use the -dev package to avoid churn in updating version numbers
         netcat-openbsd
         policykit-1
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/modprobe.d/systemd.conf systemd-252.22/modprobe.d/systemd.conf
--- systemd-252.21/modprobe.d/systemd.conf	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/modprobe.d/systemd.conf	2024-01-26 21:35:39.000000000 +0000
@@ -18,3 +18,7 @@
 # Do the same for dummy0.
 
 options dummy numdummies=0
+
+# Do the same for ifb0.
+
+options ifb numifbs=0
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/.packit.yml systemd-252.22/.packit.yml
--- systemd-252.21/.packit.yml	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/.packit.yml	2024-01-26 21:35:39.000000000 +0000
@@ -16,6 +16,13 @@
 srpm_build_deps: []
 
 actions:
+  get-current-version:
+    # Show the closest matching tag for the checked out revision, otherwise
+    # Packit tries to get the latest tag by creation date, which doesn't work
+    # well in the systemd-stable repo. We also need to sanitize it manually
+    # since "upstream_tag_template" defined above doesn't apply here.
+    - "bash -ec 'git describe --tags --abbrev=0 | cut -b 2-'"
+
   post-upstream-clone:
     # Use the Fedora 38 specfile
     - "git clone --branch f38 https://src.fedoraproject.org/rpms/systemd .packit_rpm --depth=1"
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/rules.d/50-udev-default.rules.in systemd-252.22/rules.d/50-udev-default.rules.in
--- systemd-252.21/rules.d/50-udev-default.rules.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/rules.d/50-udev-default.rules.in	2024-01-26 21:35:39.000000000 +0000
@@ -14,6 +14,8 @@
 SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"
 SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"
 
+SUBSYSTEM=="hidraw", IMPORT{builtin}="hwdb"
+
 SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
 ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/rules.d/99-systemd.rules.in systemd-252.22/rules.d/99-systemd.rules.in
--- systemd-252.21/rules.d/99-systemd.rules.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/rules.d/99-systemd.rules.in	2024-01-26 21:35:39.000000000 +0000
@@ -73,7 +73,7 @@
 # Pull in backlight save/restore for all backlight devices and
 # keyboard backlights
 SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service"
-SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
+SUBSYSTEM=="leds", KERNEL=="*kbd_backlight*", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service"
 {% endif %}
 
 # Pull in rfkill save/restore for all rfkill devices
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/shell-completion/bash/systemctl.in systemd-252.22/shell-completion/bash/systemctl.in
--- systemd-252.21/shell-completion/bash/systemctl.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/shell-completion/bash/systemctl.in	2024-01-26 21:35:39.000000000 +0000
@@ -62,6 +62,8 @@
                               | { while read -r a b; do [[ $a =~ @\. ]] && echo " ${a%%@.*}@"; done; }; }
 __get_active_units   () { __systemctl $1 list-units "$2*"      \
                               | { while read -r a b; do echo " $a"; done; }; }
+__get_active_services() { __systemctl $1 list-units "$2*.service" \
+                              | { while read -r a b; do echo " $a"; done; }; }
 
 __get_not_masked_unit_files() {
     # filter out masked, not-found, or template units.
@@ -219,12 +221,15 @@
                              list-timers list-units list-unit-files poweroff
                              reboot rescue show-environment suspend get-default
                              is-system-running preset-all list-automounts'
-        [FILE]='link switch-root bind mount-image'
+        [FILE]='link switch-root'
         [TARGETS]='set-default'
         [MACHINES]='list-machines'
         [LOG_LEVEL]='log-level'
         [LOG_TARGET]='log-target'
+        [SERVICE_LOG_LEVEL]='service-log-level'
+        [SERVICE_LOG_TARGET]='service-log-target'
         [SERVICE_WATCHDOGS]='service-watchdogs'
+        [MOUNT]='bind mount-image'
     )
 
     for ((i=0; i < COMP_CWORD; i++)); do
@@ -353,8 +358,33 @@
         comps='debug info notice warning err crit alert emerg'
     elif __contains_word "$verb" ${VERBS[LOG_TARGET]}; then
         comps='console journal kmsg journal-or-kmsg null'
+    elif __contains_word "$verb" ${VERBS[SERVICE_LOG_LEVEL]}; then
+        if __contains_word "$prev" ${VERBS[SERVICE_LOG_LEVEL]}; then
+            comps=$( __get_all_unit_files $mode "$cur" )
+        elif __contains_word "$prev" debug info notice warning err crit alert emerg; then
+            return 0
+        else
+            comps='debug info notice warning err crit alert emerg'
+        fi
+    elif __contains_word "$verb" ${VERBS[SERVICE_LOG_TARGET]}; then
+        if __contains_word "$prev" ${VERBS[SERVICE_LOG_TARGET]}; then
+            comps=$( __get_all_unit_files $mode "$cur" )
+        elif __contains_word "$prev" console journal kmsg journal-or-kmsg null; then
+            return 0
+        else
+            comps='console journal kmsg journal-or-kmsg null'
+        fi
     elif __contains_word "$verb" ${VERBS[SERVICE_WATCHDOGS]}; then
         comps='on off'
+    elif __contains_word "$verb" ${VERBS[MOUNT]}; then
+        if __contains_word "$prev" ${VERBS[MOUNT]}; then
+            comps=$( __get_active_services $mode "$cur" )
+        elif [[ "$prev" =~ .service ]]; then
+            comps=$( compgen -A file -- "$cur" )
+            compopt -o filenames
+        else
+            return 0
+        fi
     fi
 
     COMPREPLY=( $(compgen -o filenames -W '$comps' -- "$cur_orig") )
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/shell-completion/bash/systemd-analyze systemd-252.22/shell-completion/bash/systemd-analyze
--- systemd-252.21/shell-completion/bash/systemd-analyze	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/shell-completion/bash/systemd-analyze	2024-01-26 21:35:39.000000000 +0000
@@ -57,7 +57,7 @@
 
     local -A OPTS=(
         [STANDALONE]='-h --help --version --system --user --global --order --require --no-pager
-                             --man=no --generators=yes --quiet'
+                             --man=no --generators=yes -q --quiet'
         [ARG]='-H --host -M --machine --fuzz --from-pattern --to-pattern --root'
     )
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/analyze/analyze.c systemd-252.22/src/analyze/analyze.c
--- systemd-252.21/src/analyze/analyze.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/analyze/analyze.c	2024-01-26 21:35:39.000000000 +0000
@@ -318,7 +318,7 @@
         assert(argc >= 0);
         assert(argv);
 
-        while ((c = getopt_long(argc, argv, "hH:M:U:", options, NULL)) >= 0)
+        while ((c = getopt_long(argc, argv, "hH:M:U:q", options, NULL)) >= 0)
                 switch (c) {
 
                 case 'h':
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/basic/alloc-util.h systemd-252.22/src/basic/alloc-util.h
--- systemd-252.21/src/basic/alloc-util.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/basic/alloc-util.h	2024-01-26 21:35:39.000000000 +0000
@@ -20,7 +20,7 @@
  * proceeding and smashing the stack limits. Note that by default RLIMIT_STACK is 8M on Linux. */
 #define ALLOCA_MAX (4U*1024U*1024U)
 
-#define new(t, n) ((t*) malloc_multiply(sizeof(t), (n)))
+#define new(t, n) ((t*) malloc_multiply((n), sizeof(t)))
 
 #define new0(t, n) ((t*) calloc((n) ?: 1, sizeof(t)))
 
@@ -45,9 +45,9 @@
                 (t*) alloca0((sizeof(t)*_n_));                          \
         })
 
-#define newdup(t, p, n) ((t*) memdup_multiply(p, sizeof(t), (n)))
+#define newdup(t, p, n) ((t*) memdup_multiply(p, (n), sizeof(t)))
 
-#define newdup_suffix0(t, p, n) ((t*) memdup_suffix0_multiply(p, sizeof(t), (n)))
+#define newdup_suffix0(t, p, n) ((t*) memdup_suffix0_multiply(p, (n), sizeof(t)))
 
 #define malloc0(n) (calloc(1, (n) ?: 1))
 
@@ -112,7 +112,7 @@
         return _unlikely_(need != 0 && size > (SIZE_MAX / need));
 }
 
-_malloc_  _alloc_(1, 2) static inline void *malloc_multiply(size_t size, size_t need) {
+_malloc_ _alloc_(1, 2) static inline void *malloc_multiply(size_t need, size_t size) {
         if (size_multiply_overflow(size, need))
                 return NULL;
 
@@ -128,7 +128,7 @@
 }
 #endif
 
-_alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t size, size_t need) {
+_alloc_(2, 3) static inline void *memdup_multiply(const void *p, size_t need, size_t size) {
         if (size_multiply_overflow(size, need))
                 return NULL;
 
@@ -137,7 +137,7 @@
 
 /* Note that we can't decorate this function with _alloc_() since the returned memory area is one byte larger
  * than the product of its parameters. */
-static inline void *memdup_suffix0_multiply(const void *p, size_t size, size_t need) {
+static inline void *memdup_suffix0_multiply(const void *p, size_t need, size_t size) {
         if (size_multiply_overflow(size, need))
                 return NULL;
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/basic/sigbus.c systemd-252.22/src/basic/sigbus.c
--- systemd-252.21/src/basic/sigbus.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/basic/sigbus.c	2024-01-26 21:35:39.000000000 +0000
@@ -39,14 +39,14 @@
         }
 
         /* If we can't, make sure the queue size is out of bounds, to
-         * mark it as overflow */
+         * mark it as overflowed */
         for (;;) {
                 sig_atomic_t c;
 
                 __atomic_thread_fence(__ATOMIC_SEQ_CST);
                 c = n_sigbus_queue;
 
-                if (c > SIGBUS_QUEUE_MAX) /* already overflow */
+                if (c > SIGBUS_QUEUE_MAX) /* already overflowed */
                         return;
 
                 /* OK if we clobber c here, since we either immediately return
@@ -69,7 +69,7 @@
                 if (_likely_(c == 0))
                         return 0;
 
-                if (_unlikely_(c >= SIGBUS_QUEUE_MAX))
+                if (_unlikely_(c > SIGBUS_QUEUE_MAX))
                         return -EOVERFLOW;
 
                 for (u = 0; u < SIGBUS_QUEUE_MAX; u++) {
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/basic/strv.c systemd-252.22/src/basic/strv.c
--- systemd-252.21/src/basic/strv.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/basic/strv.c	2024-01-26 21:35:39.000000000 +0000
@@ -97,6 +97,22 @@
         return TAKE_PTR(result);
 }
 
+int strv_copy_unless_empty(char * const *l, char ***ret) {
+        assert(ret);
+
+        if (strv_isempty(l)) {
+                *ret = NULL;
+                return 0;
+        }
+
+        char **copy = strv_copy(l);
+        if (!copy)
+                return -ENOMEM;
+
+        *ret = TAKE_PTR(copy);
+        return 1;
+}
+
 size_t strv_length(char * const *l) {
         size_t n = 0;
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/basic/strv.h systemd-252.22/src/basic/strv.h
--- systemd-252.21/src/basic/strv.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/basic/strv.h	2024-01-26 21:35:39.000000000 +0000
@@ -30,6 +30,7 @@
 #define _cleanup_strv_free_erase_ _cleanup_(strv_free_erasep)
 
 char** strv_copy(char * const *l);
+int strv_copy_unless_empty(char * const *l, char ***ret);
 size_t strv_length(char * const *l) _pure_;
 
 int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates);
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/basic/virt.c systemd-252.22/src/basic/virt.c
--- systemd-252.21/src/basic/virt.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/basic/virt.c	2024-01-26 21:35:39.000000000 +0000
@@ -53,6 +53,7 @@
                 { "ACRNACRNACRN", VIRTUALIZATION_ACRN      },
                 /* https://www.lockheedmartin.com/en-us/products/Hardened-Security-for-Intel-Processors.html */
                 { "SRESRESRESRE", VIRTUALIZATION_SRE       },
+                { "Apple VZ",     VIRTUALIZATION_APPLE     },
         };
 
         uint32_t eax, ebx, ecx, edx;
@@ -168,22 +169,23 @@
                 const char *vendor;
                 Virtualization id;
         } dmi_vendor_table[] = {
-                { "KVM",                  VIRTUALIZATION_KVM       },
-                { "OpenStack",            VIRTUALIZATION_KVM       }, /* Detect OpenStack instance as KVM in non x86 architecture */
-                { "KubeVirt",             VIRTUALIZATION_KVM       }, /* Detect KubeVirt instance as KVM in non x86 architecture */
-                { "Amazon EC2",           VIRTUALIZATION_AMAZON    },
-                { "QEMU",                 VIRTUALIZATION_QEMU      },
-                { "VMware",               VIRTUALIZATION_VMWARE    }, /* https://kb.vmware.com/s/article/1009458 */
-                { "VMW",                  VIRTUALIZATION_VMWARE    },
-                { "innotek GmbH",         VIRTUALIZATION_ORACLE    },
-                { "VirtualBox",           VIRTUALIZATION_ORACLE    },
-                { "Xen",                  VIRTUALIZATION_XEN       },
-                { "Bochs",                VIRTUALIZATION_BOCHS     },
-                { "Parallels",            VIRTUALIZATION_PARALLELS },
+                { "KVM",                   VIRTUALIZATION_KVM       },
+                { "OpenStack",             VIRTUALIZATION_KVM       }, /* Detect OpenStack instance as KVM in non x86 architecture */
+                { "KubeVirt",              VIRTUALIZATION_KVM       }, /* Detect KubeVirt instance as KVM in non x86 architecture */
+                { "Amazon EC2",            VIRTUALIZATION_AMAZON    },
+                { "QEMU",                  VIRTUALIZATION_QEMU      },
+                { "VMware",                VIRTUALIZATION_VMWARE    }, /* https://kb.vmware.com/s/article/1009458 */
+                { "VMW",                   VIRTUALIZATION_VMWARE    },
+                { "innotek GmbH",          VIRTUALIZATION_ORACLE    },
+                { "VirtualBox",            VIRTUALIZATION_ORACLE    },
+                { "Xen",                   VIRTUALIZATION_XEN       },
+                { "Bochs",                 VIRTUALIZATION_BOCHS     },
+                { "Parallels",             VIRTUALIZATION_PARALLELS },
                 /* https://wiki.freebsd.org/bhyve */
-                { "BHYVE",                VIRTUALIZATION_BHYVE     },
-                { "Hyper-V",              VIRTUALIZATION_MICROSOFT },
-                { "Apple Virtualization", VIRTUALIZATION_APPLE     },
+                { "BHYVE",                 VIRTUALIZATION_BHYVE     },
+                { "Hyper-V",               VIRTUALIZATION_MICROSOFT },
+                { "Apple Virtualization",  VIRTUALIZATION_APPLE     },
+                { "Google Compute Engine", VIRTUALIZATION_GOOGLE    }, /* https://cloud.google.com/run/docs/container-contract#sandbox */
         };
         int r;
 
@@ -986,7 +988,7 @@
                         return true;
         }
 
-        if (__get_cpuid(7, &eax, &ebx, &ecx, &edx)) {
+        if (__get_cpuid_count(7, 0, &eax, &ebx, &ecx, &edx)) {
                 if (given_flag_in_set(flag, leaf7_ebx, ELEMENTSOF(leaf7_ebx), ebx))
                         return true;
         }
@@ -1035,6 +1037,7 @@
         [VIRTUALIZATION_POWERVM]         = "powervm",
         [VIRTUALIZATION_APPLE]           = "apple",
         [VIRTUALIZATION_SRE]             = "sre",
+        [VIRTUALIZATION_GOOGLE]          = "google",
         [VIRTUALIZATION_VM_OTHER]        = "vm-other",
 
         [VIRTUALIZATION_SYSTEMD_NSPAWN]  = "systemd-nspawn",
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/basic/virt.h systemd-252.22/src/basic/virt.h
--- systemd-252.21/src/basic/virt.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/basic/virt.h	2024-01-26 21:35:39.000000000 +0000
@@ -27,6 +27,7 @@
         VIRTUALIZATION_POWERVM,
         VIRTUALIZATION_APPLE,
         VIRTUALIZATION_SRE,
+        VIRTUALIZATION_GOOGLE,
         VIRTUALIZATION_VM_OTHER,
         VIRTUALIZATION_VM_LAST = VIRTUALIZATION_VM_OTHER,
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/boot/efi/util.h systemd-252.22/src/boot/efi/util.h
--- systemd-252.21/src/boot/efi/util.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/boot/efi/util.h	2024-01-26 21:35:39.000000000 +0000
@@ -51,7 +51,7 @@
 }
 
 _malloc_ _alloc_(1, 2) _returns_nonnull_ _warn_unused_result_
-static inline void *xmalloc_multiply(size_t size, size_t n) {
+static inline void *xmalloc_multiply(size_t n, size_t size) {
         assert_se(!__builtin_mul_overflow(size, n, &size));
         return xmalloc(size);
 }
@@ -68,7 +68,7 @@
 }
 
 #define xpool_print(fmt, ...) ((char16_t *) ASSERT_SE_PTR(PoolPrint((fmt), ##__VA_ARGS__)))
-#define xnew(type, n) ((type *) xmalloc_multiply(sizeof(type), (n)))
+#define xnew(type, n) ((type *) xmalloc_multiply((n), sizeof(type)))
 
 typedef struct {
         EFI_PHYSICAL_ADDRESS addr;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/busctl/busctl.c systemd-252.22/src/busctl/busctl.c
--- systemd-252.21/src/busctl/busctl.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/busctl/busctl.c	2024-01-26 21:35:39.000000000 +0000
@@ -1311,24 +1311,24 @@
                 if (r < 0)
                         return log_error_errno(r, "Failed to process bus: %m");
 
-                if (!is_monitor) {
-                        const char *name;
-
-                        /* wait until we lose our unique name */
-                        if (sd_bus_message_is_signal(m, "org.freedesktop.DBus", "NameLost") <= 0)
-                                continue;
+                if (m) {
+                        if (!is_monitor) {
+                                const char *name;
 
-                        r = sd_bus_message_read(m, "s", &name);
-                        if (r < 0)
-                                return bus_log_parse_error(r);
+                                /* wait until we lose our unique name */
+                                if (sd_bus_message_is_signal(m, "org.freedesktop.DBus", "NameLost") <= 0)
+                                        continue;
+
+                                r = sd_bus_message_read(m, "s", &name);
+                                if (r < 0)
+                                        return bus_log_parse_error(r);
 
-                        if (streq(name, unique_name))
-                                is_monitor = true;
+                                if (streq(name, unique_name))
+                                        is_monitor = true;
 
-                        continue;
-                }
+                                continue;
+                        }
 
-                if (m) {
                         dump(m, stdout);
                         fflush(stdout);
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/cgtop/cgtop.c systemd-252.22/src/cgtop/cgtop.c
--- systemd-252.21/src/cgtop/cgtop.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/cgtop/cgtop.c	2024-01-26 21:35:39.000000000 +0000
@@ -308,9 +308,9 @@
 
                         if (all_unified) {
                                 while (!isempty(l)) {
-                                        if (sscanf(l, "rbytes=%" SCNu64, &k))
+                                        if (sscanf(l, "rbytes=%" SCNu64, &k) == 1)
                                                 rd += k;
-                                        else if (sscanf(l, "wbytes=%" SCNu64, &k))
+                                        else if (sscanf(l, "wbytes=%" SCNu64, &k) == 1)
                                                 wr += k;
 
                                         l += strcspn(l, WHITESPACE);
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/core/unit.c systemd-252.22/src/core/unit.c
--- systemd-252.21/src/core/unit.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/core/unit.c	2024-01-26 21:35:39.000000000 +0000
@@ -6099,7 +6099,7 @@
                         return r;
         }
 
-        if (ACTIVATION_DETAILS_VTABLE(details)->append_env) {
+        if (ACTIVATION_DETAILS_VTABLE(details)->append_pair) {
                 r = ACTIVATION_DETAILS_VTABLE(details)->append_pair(details, strv);
                 if (r < 0)
                         return r;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/cryptenroll/cryptenroll.c systemd-252.22/src/cryptenroll/cryptenroll.c
--- systemd-252.21/src/cryptenroll/cryptenroll.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/cryptenroll/cryptenroll.c	2024-01-26 21:35:39.000000000 +0000
@@ -412,7 +412,7 @@
                                         if (n > INT_MAX)
                                                 return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Slot index out of range: %u", n);
 
-                                        a = reallocarray(arg_wipe_slots, sizeof(int), arg_n_wipe_slots + 1);
+                                        a = reallocarray(arg_wipe_slots, arg_n_wipe_slots + 1, sizeof(int));
                                         if (!a)
                                                 return log_oom();
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/home/org.freedesktop.home1.conf systemd-252.22/src/home/org.freedesktop.home1.conf
--- systemd-252.21/src/home/org.freedesktop.home1.conf	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/home/org.freedesktop.home1.conf	2024-01-26 21:35:39.000000000 +0000
@@ -127,6 +127,10 @@
 
                 <allow send_destination="org.freedesktop.home1"
                        send_interface="org.freedesktop.home1.Manager"
+                       send_member="DeactivateAllHomes"/>
+
+                <allow send_destination="org.freedesktop.home1"
+                       send_interface="org.freedesktop.home1.Manager"
                        send_member="Rebalance"/>
 
                 <!-- Home object -->
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/journal-remote/microhttpd-util.c systemd-252.22/src/journal-remote/microhttpd-util.c
--- systemd-252.21/src/journal-remote/microhttpd-util.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/journal-remote/microhttpd-util.c	2024-01-26 21:35:39.000000000 +0000
@@ -26,11 +26,13 @@
         REENABLE_WARNING;
 }
 
-static int mhd_respond_internal(struct MHD_Connection *connection,
-                                enum MHD_RequestTerminationCode code,
-                                const char *buffer,
-                                size_t size,
-                                enum MHD_ResponseMemoryMode mode) {
+int mhd_respond_internal(
+                struct MHD_Connection *connection,
+                enum MHD_RequestTerminationCode code,
+                const char *buffer,
+                size_t size,
+                enum MHD_ResponseMemoryMode mode) {
+
         assert(connection);
 
         _cleanup_(MHD_destroy_responsep) struct MHD_Response *response
@@ -44,29 +46,16 @@
         return MHD_queue_response(connection, code, response);
 }
 
-int mhd_respond(struct MHD_Connection *connection,
-                enum MHD_RequestTerminationCode code,
-                const char *message) {
-
-        const char *fmt;
-
-        fmt = strjoina(message, "\n");
-
-        return mhd_respond_internal(connection, code,
-                                    fmt, strlen(message) + 1,
-                                    MHD_RESPMEM_PERSISTENT);
-}
-
 int mhd_respond_oom(struct MHD_Connection *connection) {
-        return mhd_respond(connection, MHD_HTTP_SERVICE_UNAVAILABLE,  "Out of memory.");
+        return mhd_respond(connection, MHD_HTTP_SERVICE_UNAVAILABLE, "Out of memory.");
 }
 
-int mhd_respondf(struct MHD_Connection *connection,
-                 int error,
-                 enum MHD_RequestTerminationCode code,
-                 const char *format, ...) {
+int mhd_respondf_internal(
+                struct MHD_Connection *connection,
+                int error,
+                enum MHD_RequestTerminationCode code,
+                const char *format, ...) {
 
-        const char *fmt;
         char *m;
         int r;
         va_list ap;
@@ -77,11 +66,8 @@
         if (error < 0)
                 error = -error;
         errno = -error;
-        fmt = strjoina(format, "\n");
         va_start(ap, format);
-        DISABLE_WARNING_FORMAT_NONLITERAL;
-        r = vasprintf(&m, fmt, ap);
-        REENABLE_WARNING;
+        r = vasprintf(&m, format, ap);
         va_end(ap);
 
         if (r < 0)
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/journal-remote/microhttpd-util.h systemd-252.22/src/journal-remote/microhttpd-util.h
--- systemd-252.21/src/journal-remote/microhttpd-util.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/journal-remote/microhttpd-util.h	2024-01-26 21:35:39.000000000 +0000
@@ -62,17 +62,34 @@
 /* respond_oom() must be usable with return, hence this form. */
 #define respond_oom(connection) log_oom(), mhd_respond_oom(connection)
 
-int mhd_respondf(struct MHD_Connection *connection,
-                 int error,
-                 enum MHD_RequestTerminationCode code,
-                 const char *format, ...) _printf_(4,5);
-
-int mhd_respond(struct MHD_Connection *connection,
+int mhd_respond_internal(
+                struct MHD_Connection *connection,
                 enum MHD_RequestTerminationCode code,
-                const char *message);
+                const char *buffer,
+                size_t size,
+                enum MHD_ResponseMemoryMode mode);
+
+#define mhd_respond(connection, code, message)                  \
+        mhd_respond_internal(                                   \
+             connection, code,                                  \
+             message "\n",                                      \
+             strlen(message) + 1,                               \
+             MHD_RESPMEM_PERSISTENT)
 
 int mhd_respond_oom(struct MHD_Connection *connection);
 
+int mhd_respondf_internal(
+                struct MHD_Connection *connection,
+                int error,
+                enum MHD_RequestTerminationCode code,
+                const char *format, ...) _printf_(4,5);
+
+#define mhd_respondf(connection, error, code, format, ...)      \
+        mhd_respondf_internal(                                  \
+                connection, error, code,                        \
+                format "\n",                                    \
+                ##__VA_ARGS__)
+
 int check_permissions(struct MHD_Connection *connection, int *code, char **hostname);
 
 /* Set gnutls internal logging function to a callback which uses our
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/libsystemd/sd-bus/bus-message.c systemd-252.22/src/libsystemd/sd-bus/bus-message.c
--- systemd-252.21/src/libsystemd/sd-bus/bus-message.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/libsystemd/sd-bus/bus-message.c	2024-01-26 21:35:39.000000000 +0000
@@ -1270,7 +1270,7 @@
         if (copy < 0)
                 return -errno;
 
-        f = reallocarray(m->fds, sizeof(int), m->n_fds + 1);
+        f = reallocarray(m->fds, m->n_fds + 1, sizeof(int));
         if (!f) {
                 m->poisoned = true;
                 safe_close(copy);
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/libsystemd/sd-id128/id128-util.c systemd-252.22/src/libsystemd/sd-id128/id128-util.c
--- systemd-252.21/src/libsystemd/sd-id128/id128-util.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/libsystemd/sd-id128/id128-util.c	2024-01-26 21:35:39.000000000 +0000
@@ -11,6 +11,7 @@
 #include "stdio-util.h"
 #include "string-util.h"
 #include "sync-util.h"
+#include "virt.h"
 
 bool id128_is_valid(const char *s) {
         size_t l;
@@ -181,6 +182,13 @@
         /* Reads the systems product UUID from DMI or devicetree (where it is located on POWER). This is
          * particularly relevant in VM environments, where VM managers typically place a VM uuid there. */
 
+        r = detect_container();
+        if (r < 0)
+                return r;
+        if (r > 0) /* Refuse returning this in containers, as this is not a property of our system then, but
+                    * of the host */
+                return -ENOENT;
+
         r = id128_read("/sys/class/dmi/id/product_uuid", ID128_FORMAT_UUID, &uuid);
         if (r == -ENOENT)
                 r = id128_read("/proc/device-tree/vm,uuid", ID128_FORMAT_UUID, &uuid);
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/libsystemd/sd-journal/journal-file.c systemd-252.22/src/libsystemd/sd-journal/journal-file.c
--- systemd-252.21/src/libsystemd/sd-journal/journal-file.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/libsystemd/sd-journal/journal-file.c	2024-01-26 21:35:39.000000000 +0000
@@ -2190,6 +2190,11 @@
         assert(e);
         assert(t);
 
+        /* If we are already going down, we cannot install the timer.
+         * In such case, the caller needs to call journal_file_post_change() explicitly. */
+        if (IN_SET(sd_event_get_state(e), SD_EVENT_EXITING, SD_EVENT_FINISHED))
+                return 0;
+
         r = sd_event_add_time(e, &timer, CLOCK_MONOTONIC, 0, 0, post_change_thunk, f);
         if (r < 0)
                 return r;
@@ -2201,7 +2206,7 @@
         f->post_change_timer = TAKE_PTR(timer);
         f->post_change_timer_period = t;
 
-        return r;
+        return 1;
 }
 
 static int entry_item_cmp(const EntryItem *a, const EntryItem *b) {
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/libsystemd/sd-login/sd-login.c systemd-252.22/src/libsystemd/sd-login/sd-login.c
--- systemd-252.21/src/libsystemd/sd-login/sd-login.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/libsystemd/sd-login/sd-login.c	2024-01-26 21:35:39.000000000 +0000
@@ -802,7 +802,7 @@
                                 uid_t *t;
 
                                 n = MAX(16, 2*r);
-                                t = reallocarray(l, sizeof(uid_t), n);
+                                t = reallocarray(l, n, sizeof(uid_t));
                                 if (!t)
                                         return -ENOMEM;
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/network/netdev/tuntap.c systemd-252.22/src/network/netdev/tuntap.c
--- systemd-252.21/src/network/netdev/tuntap.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/network/netdev/tuntap.c	2024-01-26 21:35:39.000000000 +0000
@@ -137,6 +137,19 @@
         if (ioctl(fd, TUNSETIFF, &ifr) < 0)
                 return log_netdev_error_errno(netdev, errno, "TUNSETIFF failed: %m");
 
+        if (t->multi_queue) {
+                /* If we don't detach the queue, the kernel will send packets to our queue and they
+                 * will be dropped because we never read them, which is especially important in case
+                 * of KeepCarrier option which persists open FD. So detach our queue right after
+                 * device create/attach to make kernel not send the packets to it. The option is
+                 * available for multi-queue devices only.
+                 *
+                 * See https://github.com/systemd/systemd/pull/30504 for details. */
+                struct ifreq detach_request = { .ifr_flags = IFF_DETACH_QUEUE };
+                if (ioctl(fd, TUNSETQUEUE, &detach_request) < 0)
+                        return log_netdev_error_errno(netdev, errno, "TUNSETQUEUE failed: %m");
+        }
+
         if (t->user_name) {
                 const char *user = t->user_name;
                 uid_t uid;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/network/networkd-link.c systemd-252.22/src/network/networkd-link.c
--- systemd-252.21/src/network/networkd-link.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/network/networkd-link.c	2024-01-26 21:35:39.000000000 +0000
@@ -1642,7 +1642,7 @@
                 usec = 5 * USEC_PER_SEC;
 
         else
-                /* Otherwise, use the currently set value. */
+                /* Otherwise, use the implied default value. */
                 usec = link->network->ignore_carrier_loss_usec;
 
         if (usec == USEC_INFINITY)
@@ -2005,20 +2005,18 @@
         if (master_ifindex == link->ifindex)
                 master_ifindex = 0;
 
-        if (master_ifindex == link->master_ifindex)
-                return 0;
-
-        if (link->master_ifindex == 0)
-                log_link_debug(link, "Attached to master interface: %i", master_ifindex);
-        else if (master_ifindex == 0)
-                log_link_debug(link, "Detached from master interface: %i", link->master_ifindex);
-        else
-                log_link_debug(link, "Master interface changed: %i %s %i", link->master_ifindex,
-                               special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), master_ifindex);
-
-        link_drop_from_master(link);
+        if (master_ifindex != link->master_ifindex) {
+                if (link->master_ifindex == 0)
+                        log_link_debug(link, "Attached to master interface: %i", master_ifindex);
+                else if (master_ifindex == 0)
+                        log_link_debug(link, "Detached from master interface: %i", link->master_ifindex);
+                else
+                        log_link_debug(link, "Master interface changed: %i %s %i", link->master_ifindex,
+                                       special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), master_ifindex);
 
-        link->master_ifindex = master_ifindex;
+                link_drop_from_master(link);
+                link->master_ifindex = master_ifindex;
+        }
 
         r = link_append_to_master(link);
         if (r < 0)
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/network/networkd-network.c systemd-252.22/src/network/networkd-network.c
--- systemd-252.21/src/network/networkd-network.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/network/networkd-network.c	2024-01-26 21:35:39.000000000 +0000
@@ -283,10 +283,8 @@
                 network->ignore_carrier_loss_usec = USEC_INFINITY;
         }
 
-        if (!network->ignore_carrier_loss_set) {
-                network->ignore_carrier_loss_set = true;
+        if (!network->ignore_carrier_loss_set) /* Set implied default. */
                 network->ignore_carrier_loss_usec = network->configure_without_carrier ? USEC_INFINITY : 0;
-        }
 
         if (IN_SET(network->activation_policy, ACTIVATION_POLICY_DOWN, ACTIVATION_POLICY_ALWAYS_DOWN, ACTIVATION_POLICY_MANUAL)) {
                 if (network->required_for_online < 0 ||
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/network/networkd-queue.c systemd-252.22/src/network/networkd-queue.c
--- systemd-252.21/src/network/networkd-queue.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/network/networkd-queue.c	2024-01-26 21:35:39.000000000 +0000
@@ -123,11 +123,8 @@
         assert(process);
 
         req = new(Request, 1);
-        if (!req) {
-                if (free_func)
-                        free_func(userdata);
+        if (!req)
                 return -ENOMEM;
-        }
 
         *req = (Request) {
                 .n_ref = 1,
@@ -169,12 +166,19 @@
                 request_process_func_t process,
                 Request **ret) {
 
+        int r;
+
         assert(netdev);
 
-        return request_new(netdev->manager, NULL, REQUEST_TYPE_NETDEV_INDEPENDENT,
-                           netdev_ref(netdev), (mfree_func_t) netdev_unref,
-                           trivial_hash_func, trivial_compare_func,
-                           process, NULL, NULL, ret);
+        r = request_new(netdev->manager, NULL, REQUEST_TYPE_NETDEV_INDEPENDENT,
+                        netdev, (mfree_func_t) netdev_unref,
+                        trivial_hash_func, trivial_compare_func,
+                        process, NULL, NULL, ret);
+        if (r <= 0)
+                return r;
+
+        netdev_ref(netdev);
+        return 1;
 }
 
 int link_queue_request_full(
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/network/networkd-route.c systemd-252.22/src/network/networkd-route.c
--- systemd-252.21/src/network/networkd-route.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/network/networkd-route.c	2024-01-26 21:35:39.000000000 +0000
@@ -2768,6 +2768,7 @@
 
         if (isempty(rvalue)) {
                 n->multipath_routes = ordered_set_free_with_destructor(n->multipath_routes, multipath_route_free);
+                TAKE_PTR(n);
                 return 0;
         }
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/nspawn/nspawn-bind-user.c systemd-252.22/src/nspawn/nspawn-bind-user.c
--- systemd-252.21/src/nspawn/nspawn-bind-user.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/nspawn/nspawn-bind-user.c	2024-01-26 21:35:39.000000000 +0000
@@ -286,7 +286,7 @@
                 if (!sd)
                         return log_oom();
 
-                cm = reallocarray(*custom_mounts, sizeof(CustomMount), *n_custom_mounts + 1);
+                cm = reallocarray(*custom_mounts, *n_custom_mounts + 1, sizeof(CustomMount));
                 if (!cm)
                         return log_oom();
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/resolve/dns-type.h systemd-252.22/src/resolve/dns-type.h
--- systemd-252.21/src/resolve/dns-type.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/resolve/dns-type.h	2024-01-26 21:35:39.000000000 +0000
@@ -7,7 +7,7 @@
  * http://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml.
  */
 enum {
-        /* Normal records */
+        /* 0 is reserved */
         DNS_TYPE_A          = 0x01,
         DNS_TYPE_NS,
         DNS_TYPE_MD,
@@ -60,7 +60,8 @@
         DNS_TYPE_NSEC3,
         DNS_TYPE_NSEC3PARAM,
         DNS_TYPE_TLSA,
-
+        DNS_TYPE_SMIMEA, /* RFC 8162 */
+        /* 0x36 (54) is not assigned */
         DNS_TYPE_HIP        = 0x37,
         DNS_TYPE_NINFO,
         DNS_TYPE_RKEY,
@@ -68,15 +69,23 @@
         DNS_TYPE_CDS,
         DNS_TYPE_CDNSKEY,
         DNS_TYPE_OPENPGPKEY,
-
+        DNS_TYPE_CSYNC,
+        DNS_TYPE_ZONEMD,
+        DNS_TYPE_SVCB, /* RFC 9460 */
+        DNS_TYPE_HTTPS, /* RFC 9460 */
+        /* 0x42…0x62 (66…98) are not assigned */
         DNS_TYPE_SPF        = 0x63,
+        DNS_TYPE_UINFO,
+        DNS_TYPE_UID,
+        DNS_TYPE_GID,
+        DNS_TYPE_UNSPEC,
         DNS_TYPE_NID,
         DNS_TYPE_L32,
         DNS_TYPE_L64,
         DNS_TYPE_LP,
         DNS_TYPE_EUI48,
         DNS_TYPE_EUI64,
-
+        /* 0x6e…0xf8 (110…248) are not assigned */
         DNS_TYPE_TKEY       = 0xF9,
         DNS_TYPE_TSIG,
         DNS_TYPE_IXFR,
@@ -86,15 +95,24 @@
         DNS_TYPE_ANY,
         DNS_TYPE_URI,
         DNS_TYPE_CAA,
+        DNS_TYPE_AVC,
+        DNS_TYPE_DOA,
+        DNS_TYPE_AMTRELAY,
+        DNS_TYPE_RESINFO,
+        /* 0x106…0x7fff (262…32767) are not assigned */
         DNS_TYPE_TA         = 0x8000,
         DNS_TYPE_DLV,
-
+        /* 32770…65279 are not assigned */
+        /* 65280…65534 are for private use */
+        /* 65535 is reserved */
         _DNS_TYPE_MAX,
         _DNS_TYPE_INVALID = -EINVAL,
 };
 
-assert_cc(DNS_TYPE_SSHFP == 44);
-assert_cc(DNS_TYPE_TLSA == 52);
+assert_cc(DNS_TYPE_SMIMEA == 53);
+assert_cc(DNS_TYPE_HTTPS == 65);
+assert_cc(DNS_TYPE_EUI64 == 109);
+assert_cc(DNS_TYPE_RESINFO == 261);
 assert_cc(DNS_TYPE_ANY == 255);
 
 /* DNS record classes, see RFC 1035 */
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/resolve/resolved-dns-cache.c systemd-252.22/src/resolve/resolved-dns-cache.c
--- systemd-252.21/src/resolve/resolved-dns-cache.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/resolve/resolved-dns-cache.c	2024-01-26 21:35:39.000000000 +0000
@@ -1266,6 +1266,10 @@
                         if (!j->shared_owner)
                                 continue;
 
+                        /* Ignore cached goodby packet. See on_mdns_packet() and RFC 6762 section 10.1. */
+                        if (j->rr->ttl <= 1)
+                                continue;
+
                         /* RFC6762 7.1: Don't append records with less than half the TTL remaining
                          * as known answers. */
                         if (usec_sub_unsigned(j->until, ts) < j->rr->ttl * USEC_PER_SEC / 2)
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/resolve/resolved-dns-packet.c systemd-252.22/src/resolve/resolved-dns-packet.c
--- systemd-252.21/src/resolve/resolved-dns-packet.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/resolve/resolved-dns-packet.c	2024-01-26 21:35:39.000000000 +0000
@@ -310,9 +310,23 @@
 
         switch (p->protocol) {
 
-        case DNS_PROTOCOL_LLMNR:
         case DNS_PROTOCOL_DNS:
-                if (DNS_PACKET_TC(p)) /* mDNS query may have truncation flag. */
+                if (DNS_PACKET_TC(p))
+                        return -EBADMSG;
+
+                if (DNS_PACKET_QDCOUNT(p) != 1)
+                        return -EBADMSG;
+
+                if (DNS_PACKET_ANCOUNT(p) > 0)
+                        return -EBADMSG;
+
+                /* Note, in most cases, DNS query packet does not have authority section. But some query
+                 * types, e.g. IXFR, have Authority sections. Hence, unlike the check for LLMNR, we do not
+                 * check DNS_PACKET_NSCOUNT(p) here. */
+                break;
+
+        case DNS_PROTOCOL_LLMNR:
+                if (DNS_PACKET_TC(p))
                         return -EBADMSG;
 
                 /* RFC 4795, Section 2.1.1. says to discard all queries with QDCOUNT != 1 */
@@ -330,6 +344,9 @@
                 break;
 
         case DNS_PROTOCOL_MDNS:
+                /* Note, mDNS query may have truncation flag. So, unlike the check for DNS and LLMNR,
+                 * we do not check DNS_PACKET_TC(p) here. */
+
                 /* RFC 6762, Section 18 specifies that messages with non-zero RCODE
                  * must be silently ignored, and that we must ignore the values of
                  * AA, RD, RA, AD, and CD bits. */
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/resolve/resolved-dns-transaction.c systemd-252.22/src/resolve/resolved-dns-transaction.c
--- systemd-252.21/src/resolve/resolved-dns-transaction.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/resolve/resolved-dns-transaction.c	2024-01-26 21:35:39.000000000 +0000
@@ -74,6 +74,10 @@
          * and the reply we might still get from the server will be eaten up instead of resulting in an ICMP
          * port unreachable error message. */
 
+        /* Skip the graveyard stuff when we're shutting down, since that requires running event loop */
+        if (!t->scope->manager->event || sd_event_get_state(t->scope->manager->event) == SD_EVENT_FINISHED)
+                use_graveyard = false;
+
         if (use_graveyard && t->dns_udp_fd >= 0 && t->sent && !t->received) {
                 r = manager_add_socket_to_graveyard(t->scope->manager, t->dns_udp_fd);
                 if (r < 0)
@@ -633,9 +637,20 @@
                 }
         }
 
-        if (error != 0)
-                LIST_FOREACH(transactions_by_stream, t, s->transactions)
+        if (error != 0) {
+                /* First, detach the stream from the server. Otherwise, transactions attached to this stream
+                 * may be restarted by on_transaction_stream_error() below with this stream. */
+                dns_stream_detach(s);
+
+                /* Do not use LIST_FOREACH() here, as
+                 *     on_transaction_stream_error()
+                 *         -> dns_transaction_complete_errno()
+                 *             -> dns_transaction_free()
+                 * may free multiple transactions in the list. */
+                DnsTransaction *t;
+                while ((t = s->transactions))
                         on_transaction_stream_error(t, error);
+        }
 
         return 0;
 }
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/resolve/resolved-llmnr.c systemd-252.22/src/resolve/resolved-llmnr.c
--- systemd-252.21/src/resolve/resolved-llmnr.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/resolve/resolved-llmnr.c	2024-01-26 21:35:39.000000000 +0000
@@ -45,7 +45,7 @@
         if (r < 0)
                 return r;
 
-        if (socket_ipv6_is_supported()) {
+        if (socket_ipv6_is_enabled()) {
                 r = manager_llmnr_ipv6_udp_fd(m);
                 if (r == -EADDRINUSE)
                         goto eaddrinuse;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/resolve/resolved-mdns.c systemd-252.22/src/resolve/resolved-mdns.c
--- systemd-252.21/src/resolve/resolved-mdns.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/resolve/resolved-mdns.c	2024-01-26 21:35:39.000000000 +0000
@@ -36,7 +36,7 @@
         if (r < 0)
                 return r;
 
-        if (socket_ipv6_is_supported()) {
+        if (socket_ipv6_is_enabled()) {
                 r = manager_mdns_ipv6_fd(m);
                 if (r == -EADDRINUSE)
                         goto eaddrinuse;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/shared/discover-image.c systemd-252.22/src/shared/discover-image.c
--- systemd-252.21/src/shared/discover-image.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/shared/discover-image.c	2024-01-26 21:35:39.000000000 +0000
@@ -1005,6 +1005,11 @@
         return 0;
 }
 
+static void make_lock_dir(void) {
+        (void) mkdir_p("/run/systemd/nspawn", 0755);
+        (void) mkdir("/run/systemd/nspawn/locks", 0700);
+}
+
 int image_path_lock(const char *path, int operation, LockFile *global, LockFile *local) {
         _cleanup_free_ char *p = NULL;
         LockFile t = LOCK_FILE_INIT;
@@ -1080,7 +1085,7 @@
         }
 
         if (p) {
-                (void) mkdir_p("/run/systemd/nspawn/locks", 0700);
+                make_lock_dir();
 
                 r = make_lock_file(p, operation, global);
                 if (r < 0) {
@@ -1253,7 +1258,7 @@
                 return 0;
         }
 
-        (void) mkdir_p("/run/systemd/nspawn/locks", 0700);
+        make_lock_dir();
 
         p = strjoina("/run/systemd/nspawn/locks/name-", name);
         return make_lock_file(p, operation, ret);
@@ -1293,7 +1298,6 @@
                 /* Accept trailing slashes */
                 if (p[strspn(p, "/")] == 0)
                         return true;
-
         }
 
         return false;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/shared/utmp-wtmp.h systemd-252.22/src/shared/utmp-wtmp.h
--- systemd-252.21/src/shared/utmp-wtmp.h	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/shared/utmp-wtmp.h	2024-01-26 21:35:39.000000000 +0000
@@ -31,7 +31,8 @@
         return true;
 }
 static inline void utxent_cleanup(bool *initialized) {
-        if (initialized)
+        assert(initialized);
+        if (*initialized)
                 endutxent();
 }
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/shared/watchdog.c systemd-252.22/src/shared/watchdog.c
--- systemd-252.21/src/shared/watchdog.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/shared/watchdog.c	2024-01-26 21:35:39.000000000 +0000
@@ -261,12 +261,15 @@
 
 static int update_timeout(void) {
         int r;
+        usec_t previous_timeout;
 
         assert(watchdog_timeout > 0);
 
         if (watchdog_fd < 0)
                 return 0;
 
+        previous_timeout = watchdog_timeout;
+
         if (watchdog_timeout != USEC_INFINITY) {
                 r = watchdog_set_timeout();
                 if (r < 0) {
@@ -281,8 +284,12 @@
 
         if (watchdog_timeout == USEC_INFINITY) {
                 r = watchdog_read_timeout();
-                if (r < 0)
-                        return log_error_errno(r, "Failed to query watchdog HW timeout: %m");
+                if (r < 0) {
+                        if (!ERRNO_IS_NOT_SUPPORTED(r))
+                                return log_error_errno(r, "Failed to query watchdog HW timeout: %m");
+                        log_info("Reading watchdog timeout is not supported, reusing the configured timeout.");
+                        watchdog_timeout = previous_timeout;
+                }
         }
 
         /* If the watchdog timeout was changed, the pretimeout could have been
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/systemctl/systemctl-is-system-running.c systemd-252.22/src/systemctl/systemctl-is-system-running.c
--- systemd-252.21/src/systemctl/systemctl-is-system-running.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/systemctl/systemctl-is-system-running.c	2024-01-26 21:35:39.000000000 +0000
@@ -29,7 +29,7 @@
         sd_bus *bus;
         int r;
 
-        if (running_in_chroot() > 0 || (arg_transport == BUS_TRANSPORT_LOCAL && !sd_booted())) {
+        if (!isempty(arg_root) || running_in_chroot() > 0 || (arg_transport == BUS_TRANSPORT_LOCAL && !sd_booted())) {
                 if (!arg_quiet)
                         puts("offline");
                 return EXIT_FAILURE;
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/systemctl/systemctl-start-special.c systemd-252.22/src/systemctl/systemctl-start-special.c
--- systemd-252.21/src/systemctl/systemctl-start-special.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/systemctl/systemctl-start-special.c	2024-01-26 21:35:39.000000000 +0000
@@ -121,8 +121,7 @@
 }
 
 int verb_start_special(int argc, char *argv[], void *userdata) {
-        bool termination_action; /* An action that terminates the manager, can be performed also by
-                                  * signal. */
+        bool termination_action; /* An action that terminates the system, can be performed also by signal. */
         enum action a;
         int r;
 
@@ -140,17 +139,21 @@
                         return r;
         }
 
-        r = prepare_firmware_setup();
-        if (r < 0)
-                return r;
+        termination_action = IN_SET(a, ACTION_HALT, ACTION_POWEROFF, ACTION_REBOOT);
 
-        r = prepare_boot_loader_menu();
-        if (r < 0)
-                return r;
+        if (termination_action) {
+                r = prepare_firmware_setup();
+                if (r < 0)
+                        return r;
 
-        r = prepare_boot_loader_entry();
-        if (r < 0)
-                return r;
+                r = prepare_boot_loader_menu();
+                if (r < 0)
+                        return r;
+
+                r = prepare_boot_loader_entry();
+                if (r < 0)
+                        return r;
+        }
 
         if (a == ACTION_REBOOT) {
                 const char *arg = NULL;
@@ -192,10 +195,6 @@
                         return r;
         }
 
-        termination_action = IN_SET(a,
-                                    ACTION_HALT,
-                                    ACTION_POWEROFF,
-                                    ACTION_REBOOT);
         if (termination_action && arg_force >= 2)
                 return halt_now(a);
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/test/test-alloc-util.c systemd-252.22/src/test/test-alloc-util.c
--- systemd-252.21/src/test/test-alloc-util.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/test/test-alloc-util.c	2024-01-26 21:35:39.000000000 +0000
@@ -61,7 +61,7 @@
         size_t i;
         int *p;
 
-        dup = memdup_suffix0_multiply(org, sizeof(int), 3);
+        dup = memdup_suffix0_multiply(org, 3, sizeof(int));
         assert_se(dup);
         assert_se(dup[0] == 1);
         assert_se(dup[1] == 2);
@@ -69,7 +69,7 @@
         assert_se(((uint8_t*) dup)[sizeof(int) * 3] == 0);
         free(dup);
 
-        dup = memdup_multiply(org, sizeof(int), 3);
+        dup = memdup_multiply(org, 3, sizeof(int));
         assert_se(dup);
         assert_se(dup[0] == 1);
         assert_se(dup[1] == 2);
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/timesync/timesyncd-manager.c systemd-252.22/src/timesync/timesyncd-manager.c
--- systemd-252.21/src/timesync/timesyncd-manager.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/timesync/timesyncd-manager.c	2024-01-26 21:35:39.000000000 +0000
@@ -657,8 +657,7 @@
         if (r < 0)
                 return r;
 
-        if (addr.sa.sa_family == AF_INET)
-                (void) setsockopt_int(m->server_socket, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY);
+        (void) socket_set_option(m->server_socket, addr.sa.sa_family, IP_TOS, IPV6_TCLASS, IPTOS_DSCP_EF);
 
         return sd_event_add_io(m->event, &m->event_receive, m->server_socket, EPOLLIN, manager_receive_response, m);
 }
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/udev/dmi_memory_id/dmi_memory_id.c systemd-252.22/src/udev/dmi_memory_id/dmi_memory_id.c
--- systemd-252.21/src/udev/dmi_memory_id/dmi_memory_id.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/udev/dmi_memory_id/dmi_memory_id.c	2024-01-26 21:35:39.000000000 +0000
@@ -7,7 +7,7 @@
  *   Copyright (C) 2020 Bastien Nocera <had...@hadess.net>
  *
  * Unless specified otherwise, all references are aimed at the "System
- * Management BIOS Reference Specification, Version 3.2.0" document,
+ * Management BIOS Reference Specification, Version 3.7.0" document,
  * available from http://www.dmtf.org/standards/smbios.
  *
  * Note to contributors:
@@ -145,7 +145,7 @@
                 [0x01] = "PC-98/C24 Add-on Card",       /* 0xA1 */
                 [0x02] = "PC-98/E Add-on Card",         /* 0xA2 */
                 [0x03] = "PC-98/Local Bus Add-on Card", /* 0xA3 */
-                [0x04] = "CXL Flexbus 1.0",             /* 0xA4 */
+                [0x04] = "CXL Add-on Card",             /* 0xA4 */
         };
         const char *str = OUT_OF_SPEC_STR;
 
@@ -301,6 +301,9 @@
                 [0x1F] = "Logical non-volatile device",
                 [0x20] = "HBM",
                 [0x21] = "HBM2",
+                [0x22] = "DDR5",
+                [0x23] = "LPDDR5",
+                [0x24] = "HBM3",
         };
 
         printf("MEMORY_DEVICE_%u_TYPE=%s\n", slot_num,
@@ -315,7 +318,7 @@
                 [3]  = "Fast-paged",
                 [4]  = "Static Column",
                 [5]  = "Pseudo-static",
-                [6]  = "RAMBus",
+                [6]  = "RAMBUS",
                 [7]  = "Synchronous",
                 [8]  = "CMOS",
                 [9]  = "EDO",
@@ -358,7 +361,7 @@
                 [0x04] = "NVDIMM-N",
                 [0x05] = "NVDIMM-F",
                 [0x06] = "NVDIMM-P",
-                [0x07] = "Intel Optane DC persistent memory",
+                [0x07] = "Intel Optane persistent memory",
         };
 
         printf("MEMORY_DEVICE_%u_MEMORY_TECHNOLOGY=%s\n", slot_num,
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/udev/udevadm-test-builtin.c systemd-252.22/src/udev/udevadm-test-builtin.c
--- systemd-252.21/src/udev/udevadm-test-builtin.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/udev/udevadm-test-builtin.c	2024-01-26 21:35:39.000000000 +0000
@@ -78,6 +78,7 @@
         int r;
 
         log_set_max_level(LOG_DEBUG);
+        log_parse_environment();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/src/udev/udevadm-test.c systemd-252.22/src/udev/udevadm-test.c
--- systemd-252.21/src/udev/udevadm-test.c	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/src/udev/udevadm-test.c	2024-01-26 21:35:39.000000000 +0000
@@ -94,6 +94,7 @@
         int r;
 
         log_set_max_level(LOG_DEBUG);
+        log_parse_environment();
 
         r = parse_argv(argc, argv);
         if (r <= 0)
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/test/TEST-64-UDEV-STORAGE/test.sh systemd-252.22/test/TEST-64-UDEV-STORAGE/test.sh
--- systemd-252.21/test/TEST-64-UDEV-STORAGE/test.sh	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/test/TEST-64-UDEV-STORAGE/test.sh	2024-01-26 21:35:39.000000000 +0000
@@ -24,7 +24,7 @@
 
     case "${1:?}" in
         btrfs)
-            modprobe -nv btrfs && command -v mkfs.btrfs && command -v btrfs || return $?
+            host_has_btrfs
             ;;
         iscsi)
             # Client/initiator (Open-iSCSI)
@@ -36,7 +36,7 @@
             command -v lvm || return $?
             ;;
         mdadm)
-            command -v mdadm || return $?
+            host_has_mdadm
             ;;
         multipath)
             command -v multipath && command -v multipathd || return $?
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/test/TEST-74-AUX-UTILS/test.sh systemd-252.22/test/TEST-74-AUX-UTILS/test.sh
--- systemd-252.21/test/TEST-74-AUX-UTILS/test.sh	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/test/TEST-74-AUX-UTILS/test.sh	2024-01-26 21:35:39.000000000 +0000
@@ -7,4 +7,7 @@
 # shellcheck source=test/test-functions
 . "${TEST_BASE_DIR:?}/test-functions"
 
+# (Hopefully) a temporary workaround for https://github.com/systemd/systemd/issues/30573
+KERNEL_APPEND="${KERNEL_APPEND:-} SYSTEMD_DEFAULT_MOUNT_RATE_LIMIT_BURST=100"
+
 do_test "$@"
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/test/test-functions systemd-252.22/test/test-functions
--- systemd-252.21/test/test-functions	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/test/test-functions	2024-01-26 21:35:39.000000000 +0000
@@ -1061,7 +1061,9 @@
     image_install kpartx /lib/udev/kpartx_id lsmod mpathpersist multipath multipathd partx
     image_install "${ROOTLIBDIR:?}"/system/multipathd.{service,socket}
     if get_bool "$LOOKS_LIKE_DEBIAN"; then
-        inst_rules 56-dm-parts.rules 56-dm-mpath.rules 60-multipath.rules 68-del-part-nodes.rules 95-kpartx.rules
+        # Note: try both 60-kpartx.rules (as seen on Debian Sid with 0.9.4-7) and 90-kpartx.rules (as seen on
+        # Ubuntu Jammy with 0.8.8-1ubuntu1.22.04.4)
+        inst_rules 56-dm-parts.rules 56-dm-mpath.rules 60-kpartx.rules 60-multipath.rules 68-del-part-nodes.rules 90-kpartx.rules
     else
         inst_rules 11-dm-mpath.rules 11-dm-parts.rules 62-multipath.rules 66-kpartx.rules 68-del-part-nodes.rules
     fi
@@ -1108,6 +1110,11 @@
     mkdir -p "${initdir:?}/etc/lvm"
 }
 
+host_has_btrfs() (
+    set -e
+    modprobe -nv btrfs && command -v mkfs.btrfs && command -v btrfs || return $?
+)
+
 install_btrfs() {
     instmods btrfs
     # Not all utilities provided by btrfs-progs are listed here; extend the list
@@ -1175,6 +1182,11 @@
     fi
 }
 
+host_has_mdadm() (
+    set -e
+    command -v mdadm || return $?
+)
+
 install_mdadm() {
     local unit
     local mdadm_units=(
@@ -1188,6 +1200,7 @@
         system-shutdown/mdadm.shutdown
     )
 
+    instmods "=md"
     image_install mdadm mdmon
     inst_rules 01-md-raid-creating.rules 63-md-raid-arrays.rules 64-md-raid-assembly.rules 69-md-clustered-confirm-device.rules
     # Fedora/CentOS/RHEL ships this rule file
@@ -1196,6 +1209,10 @@
     for unit in "${mdadm_units[@]}"; do
         image_install "${ROOTLIBDIR:?}/$unit"
     done
+
+    # Disable the mdmonitor service, since it fails if there's no valid email address
+    # configured in /etc/mdadm.conf, which just unnecessarily pollutes the logs
+    "${SYSTEMCTL:?}" mask --root "${initdir:?}" mdmonitor.service || :
 }
 
 install_compiled_systemd() {
@@ -1976,14 +1993,14 @@
     # Newer Fedora versions use dbus-broker by default. Let's install it if it's available.
     if [ -f "$ROOTLIBDIR/system/dbus-broker.service" ]; then
         inst "$ROOTLIBDIR/system/dbus-broker.service"
-        inst_symlink /etc/systemd/system/dbus.service
         inst /usr/bin/dbus-broker
         inst /usr/bin/dbus-broker-launch
+        image_install -o {/etc,/usr/lib}/systemd/system/dbus.service
     elif [ -f "$ROOTLIBDIR/system/dbus-daemon.service" ]; then
         # Fedora rawhide replaced dbus.service with dbus-daemon.service
         inst "$ROOTLIBDIR/system/dbus-daemon.service"
         # Alias symlink
-        inst_symlink /etc/systemd/system/dbus.service
+        image_install -o {/etc,/usr/lib}/systemd/system/dbus.service
     else
         inst "$ROOTLIBDIR/system/dbus.service"
     fi
@@ -2042,12 +2059,12 @@
     # Newer Fedora versions use dbus-broker by default. Let's install it if it's available.
     if [ -f "$userunitdir/dbus-broker.service" ]; then
         inst "$userunitdir/dbus-broker.service"
-        inst_symlink /etc/systemd/user/dbus.service
+        image_install -o {/etc,/usr/lib}/systemd/user/dbus.service
     elif [ -f "${ROOTLIBDIR:?}/system/dbus-daemon.service" ]; then
         # Fedora rawhide replaced dbus.service with dbus-daemon.service
         inst "$userunitdir/dbus-daemon.service"
         # Alias symlink
-        inst_symlink /etc/systemd/user/dbus.service
+        image_install -o {/etc,/usr/lib}/systemd/user/dbus.service
     else
         inst "$userunitdir/dbus.service"
     fi
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/test/units/testsuite-17.03.sh systemd-252.22/test/units/testsuite-17.03.sh
--- systemd-252.21/test/units/testsuite-17.03.sh	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/test/units/testsuite-17.03.sh	2024-01-26 21:35:39.000000000 +0000
@@ -8,6 +8,9 @@
 setup() {
     mkdir -p "${TEST_RULE%/*}"
     [[ -e /etc/udev/udev.conf ]] && cp -f /etc/udev/udev.conf /etc/udev/udev.conf.bak
+    # Don't bother storing the coredumps in journal for this particular test
+    mkdir -p /run/systemd/coredump.conf.d/
+    echo -ne "[Coredump]\nStorage=external\n" >/run/systemd/coredump.conf.d/99-storage-journal.conf
 
     cat >"${TEST_RULE}" <<EOF
 ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", OPTIONS="log_level=debug"
@@ -31,6 +34,7 @@
     rm -rf "$TMPDIR"
     rm -f "$TEST_RULE"
     [[ -e /etc/udev/udev.conf.bak ]] && mv -f /etc/udev/udev.conf.bak /etc/udev/udev.conf
+    rm /run/systemd/coredump.conf.d/99-storage-journal.conf
     systemctl restart systemd-udevd.service
 }
 
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/test/units/testsuite-64.sh systemd-252.22/test/units/testsuite-64.sh
--- systemd-252.21/test/units/testsuite-64.sh	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/test/units/testsuite-64.sh	2024-01-26 21:35:39.000000000 +0000
@@ -988,10 +988,6 @@
 
 : >/failed
 
-# Disable the mdmonitor service, since it fails if there's no valid email address
-# configured in /etc/mdadm.conf, which just unnecessarily pollutes the logs
-systemctl list-unit-files mdmonitor.service >/dev/null && systemctl mask --runtime mdmonitor.service
-
 udevadm settle
 udevadm control --log-level debug
 lsblk -a
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/units/systemd-hibernate.service.in systemd-252.22/units/systemd-hibernate.service.in
--- systemd-252.21/units/systemd-hibernate.service.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/units/systemd-hibernate.service.in	2024-01-26 21:35:39.000000000 +0000
@@ -8,7 +8,7 @@
 #  (at your option) any later version.
 
 [Unit]
-Description=Hibernate
+Description=System Hibernate
 Documentation=man:systemd-hibernate.service(8)
 DefaultDependencies=no
 Requires=sleep.target
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/units/systemd-hybrid-sleep.service.in systemd-252.22/units/systemd-hybrid-sleep.service.in
--- systemd-252.21/units/systemd-hybrid-sleep.service.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/units/systemd-hybrid-sleep.service.in	2024-01-26 21:35:39.000000000 +0000
@@ -8,7 +8,7 @@
 #  (at your option) any later version.
 
 [Unit]
-Description=Hybrid Suspend+Hibernate
+Description=System Hybrid Suspend+Hibernate
 Documentation=man:systemd-hybrid-sleep.service(8)
 DefaultDependencies=no
 Requires=sleep.target
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/units/systemd-resolved.service.in systemd-252.22/units/systemd-resolved.service.in
--- systemd-252.21/units/systemd-resolved.service.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/units/systemd-resolved.service.in	2024-01-26 21:35:39.000000000 +0000
@@ -15,7 +15,7 @@
 Documentation=https://www.freedesktop.org/wiki/Software/systemd/writing-resolver-clients
 
 DefaultDependencies=no
-After=systemd-sysusers.service
+After=systemd-sysctl.service systemd-sysusers.service
 Before=sysinit.target network.target nss-lookup.target shutdown.target initrd-switch-root.target
 Conflicts=shutdown.target initrd-switch-root.target
 Wants=nss-lookup.target
diff -Nru --exclude pnp_id_registry.html --exclude acpi_id_registry.html --exclude parse_hwdb.py --exclude acpi_id_registry.csv --exclude pnp_id_registry.csv --exclude usb.ids --exclude pci.ids --exclude ma-large.txt --exclude ma-medium.txt --exclude ma-small.txt --exclude '*hwdb.patch' --exclude '*hwdb' systemd-252.21/units/systemd-suspend-then-hibernate.service.in systemd-252.22/units/systemd-suspend-then-hibernate.service.in
--- systemd-252.21/units/systemd-suspend-then-hibernate.service.in	2023-12-24 09:01:00.000000000 +0000
+++ systemd-252.22/units/systemd-suspend-then-hibernate.service.in	2024-01-26 21:35:39.000000000 +0000
@@ -8,7 +8,7 @@
 #  (at your option) any later version.
 
 [Unit]
-Description=Suspend; Hibernate if not used for a period of time
+Description=System Suspend then Hibernate
 Documentation=man:systemd-suspend-then-hibernate.service(8)
 DefaultDependencies=no
 Requires=sleep.target

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to