[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1099676: bookworm-pu: package systemd/252.36-1~deb12u1



Package: release.debian.org
Severity: normal
Tags: bookworm
User: release.debian.org@packages.debian.org
Usertags: pu
X-Debbugs-Cc: pkg-systemd-maintainers@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.

There are no packaging changes. Debdiff attached.
The list of commits included can be seen at:

https://github.com/systemd/systemd-stable/compare/v252.33...v252.36
diff -Nru systemd-252.33/catalog/systemd.catalog.in systemd-252.36/catalog/systemd.catalog.in
--- systemd-252.33/catalog/systemd.catalog.in	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/catalog/systemd.catalog.in	2025-03-06 11:43:10.000000000 +0000
@@ -179,7 +179,7 @@
 Support: %SUPPORT_URL%
 
 System shutdown has been initiated. The shutdown has now begun and
-all system services are terminated and all file systems unmounted.
+all system services will be terminated and all file systems will be unmounted.
 
 -- c14aaf76ec284a5fa1f105f88dfb061c
 Subject: System factory reset initiated
diff -Nru systemd-252.33/debian/changelog systemd-252.36/debian/changelog
--- systemd-252.33/debian/changelog	2024-12-01 13:28:27.000000000 +0000
+++ systemd-252.36/debian/changelog	2025-03-06 14:56:14.000000000 +0000
@@ -1,3 +1,9 @@
+systemd (252.36-1~deb12u1) bookworm; urgency=medium
+
+  * New upstream version 252.36
+
+ -- Luca Boccassi <bluca@debian.org>  Thu, 06 Mar 2025 14:56:14 +0000
+
 systemd (252.33-1~deb12u1) bookworm; urgency=medium
 
   * New upstream version 252.33
diff -Nru systemd-252.33/.github/workflows/build_test.sh systemd-252.36/.github/workflows/build_test.sh
--- systemd-252.33/.github/workflows/build_test.sh	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/build_test.sh	2025-03-06 11:43:10.000000000 +0000
@@ -21,6 +21,7 @@
     expect
     fdisk
     gettext
+    gnu-efi
     iputils-ping
     isc-dhcp-client
     itstool
@@ -77,6 +78,14 @@
     CXX="clang++-$COMPILER_VERSION"
     AR="llvm-ar-$COMPILER_VERSION"
 
+    if systemd-analyze compare-versions "$COMPILER_VERSION" ge 17; then
+        CFLAGS="-fno-sanitize=function"
+        CXXFLAGS="-fno-sanitize=function"
+    else
+        CFLAGS=""
+        CXXFLAGS=""
+    fi
+
     # Prefer the distro version if available
     if ! apt install --dry-run "llvm-$COMPILER_VERSION" >/dev/null; then
         # Latest LLVM stack deb packages provided by https://apt.llvm.org/
@@ -91,6 +100,8 @@
     CC="gcc-$COMPILER_VERSION"
     CXX="g++-$COMPILER_VERSION"
     AR="gcc-ar-$COMPILER_VERSION"
+    CFLAGS=""
+    CXXFLAGS=""
 
     if ! apt install --dry-run "gcc-$COMPILER_VERSION" >/dev/null; then
         # Latest gcc stack deb packages provided by
@@ -103,16 +114,20 @@
     fatal "Unknown compiler: $COMPILER"
 fi
 
-# PPA with some newer build dependencies (like zstd)
-add-apt-repository -y ppa:upstream-systemd-ci/systemd-ci
-apt-get -y update
-apt-get -y build-dep systemd
-apt-get -y install "${PACKAGES[@]}"
+# This is added by default, and it is often broken, but we don't need anything from it
+sudo rm -f /etc/apt/sources.list.d/microsoft-prod.{list,sources}
+# add-apt-repository --enable-source does not work on deb822 style sources.
+for f in /etc/apt/sources.list.d/*.sources; do
+    sudo sed -i "s/Types: deb/Types: deb deb-src/g" "$f"
+done
+sudo apt-get -y update
+sudo apt-get -y build-dep systemd
+sudo apt-get -y install "${PACKAGES[@]}"
 # Install more or less recent meson and ninja with pip, since the distro versions don't
 # always support all the features we need (like --optimization=). Since the build-dep
 # command above installs the distro versions, let's install the pip ones just
 # locally and add the local bin directory to the $PATH.
-pip3 install --user -r .github/workflows/requirements.txt --require-hashes
+pip3 install --user -r .github/workflows/requirements.txt --require-hashes --break-system-packages
 export PATH="$HOME/.local/bin:$PATH"
 
 $CC --version
@@ -127,20 +142,11 @@
     # It can be safely removed from the CI since it isn't actually used anywhere to test anything.
     find . -type f -name meson.build -exec sed -i '/install_tag/d' '{}' '+'
 
-    # mold < 1.1 does not support LTO.
-    if dpkg --compare-versions "$(dpkg-query --showformat='${Version}' --show mold)" ge 1.1; then
-        fatal "Newer mold version detected, please remove this workaround."
-    elif [[ "$args" == *"-Db_lto=true"* ]]; then
-        LD="gold"
-    else
-        LD="$LINKER"
-    fi
-
     info "Checking build with $args"
     # shellcheck disable=SC2086
     if ! AR="$AR" \
-         CC="$CC" CC_LD="$LD" CFLAGS="-Werror" \
-         CXX="$CXX" CXX_LD="$LD" CXXFLAGS="-Werror" \
+         CC="$CC" CC_LD="$LINKER" CFLAGS="$CFLAGS" \
+         CXX="$CXX" CXX_LD="$LINKER" CXXFLAGS="$CXXFLAGS" \
          meson -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true --werror \
                -Dnobody-group=nogroup -Dcryptolib="${CRYPTOLIB:?}" \
                $args build; then
diff -Nru systemd-252.33/.github/workflows/build_test.yml systemd-252.36/.github/workflows/build_test.yml
--- systemd-252.33/.github/workflows/build_test.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/build_test.yml	2025-03-06 11:43:10.000000000 +0000
@@ -17,7 +17,7 @@
 
 jobs:
   build:
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
     concurrency:
       group: ${{ github.workflow }}-${{ toJSON(matrix.env) }}-${{ github.ref }}
       cancel-in-progress: true
@@ -27,9 +27,9 @@
         env:
           - { COMPILER: "gcc",   COMPILER_VERSION: "11", LINKER: "bfd",  CRYPTOLIB: "gcrypt"  }
           - { COMPILER: "gcc",   COMPILER_VERSION: "12", LINKER: "gold", CRYPTOLIB: "openssl" }
-          - { COMPILER: "clang", COMPILER_VERSION: "13", LINKER: "mold", CRYPTOLIB: "gcrypt"  }
-          - { COMPILER: "clang", COMPILER_VERSION: "14", LINKER: "lld",  CRYPTOLIB: "openssl" }
-          - { COMPILER: "clang", COMPILER_VERSION: "15", LINKER: "bfd",  CRYPTOLIB: "auto"    }
+          - { COMPILER: "clang", COMPILER_VERSION: "14", LINKER: "mold", CRYPTOLIB: "gcrypt"  }
+          - { COMPILER: "clang", COMPILER_VERSION: "15", LINKER: "lld",  CRYPTOLIB: "openssl" }
+          - { COMPILER: "clang", COMPILER_VERSION: "16", LINKER: "bfd",  CRYPTOLIB: "auto"    }
     env: ${{ matrix.env }}
     steps:
       - name: Repository checkout
diff -Nru systemd-252.33/.github/workflows/cflite_pr.yml systemd-252.36/.github/workflows/cflite_pr.yml
--- systemd-252.33/.github/workflows/cflite_pr.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/cflite_pr.yml	2025-03-06 11:43:10.000000000 +0000
@@ -13,7 +13,7 @@
 
 jobs:
   PR:
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
     if: github.repository != 'systemd/systemd' || github.event.pull_request.user.login == 'dependabot[bot]'
     concurrency:
       group: ${{ github.workflow }}-${{ matrix.sanitizer }}-${{ github.ref }}
diff -Nru systemd-252.33/.github/workflows/cifuzz.yml systemd-252.36/.github/workflows/cifuzz.yml
--- systemd-252.33/.github/workflows/cifuzz.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/cifuzz.yml	2025-03-06 11:43:10.000000000 +0000
@@ -22,7 +22,8 @@
       - main
 jobs:
   Fuzzing:
-    runs-on: ubuntu-latest
+    # FIXME: Figure out why 32-bit applications fail to run in docker on Ubuntu 24.04.
+    runs-on: ubuntu-22.04
     if: github.repository == 'systemd/systemd'
     concurrency:
       group: ${{ github.workflow }}-${{ matrix.sanitizer }}-${{ matrix.architecture }}-${{ github.ref }}
diff -Nru systemd-252.33/.github/workflows/codeql.yml systemd-252.36/.github/workflows/codeql.yml
--- systemd-252.33/.github/workflows/codeql.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/codeql.yml	2025-03-06 11:43:10.000000000 +0000
@@ -26,7 +26,7 @@
 jobs:
   analyze:
     name: Analyze
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
     concurrency:
       group: ${{ github.workflow }}-${{ matrix.language }}-${{ github.ref }}
       cancel-in-progress: true
diff -Nru systemd-252.33/.github/workflows/coverity.yml systemd-252.36/.github/workflows/coverity.yml
--- systemd-252.33/.github/workflows/coverity.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/coverity.yml	2025-03-06 11:43:10.000000000 +0000
@@ -14,7 +14,7 @@
 
 jobs:
   build:
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
     if: github.repository == 'systemd/systemd'
     env:
       # Set in repo settings -> secrets -> actions
diff -Nru systemd-252.33/.github/workflows/differential-shellcheck.yml systemd-252.36/.github/workflows/differential-shellcheck.yml
--- systemd-252.33/.github/workflows/differential-shellcheck.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/differential-shellcheck.yml	2025-03-06 11:43:10.000000000 +0000
@@ -13,7 +13,7 @@
 jobs:
   lint:
     if: github.event.repository.name != 'systemd-security'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
 
     permissions:
       security-events: write
diff -Nru systemd-252.33/.github/workflows/issue_labeler.yml systemd-252.36/.github/workflows/issue_labeler.yml
--- systemd-252.33/.github/workflows/issue_labeler.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/issue_labeler.yml	2025-03-06 11:43:10.000000000 +0000
@@ -10,7 +10,7 @@
 
 jobs:
   label-component:
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
 
     permissions:
       issues: write
diff -Nru systemd-252.33/.github/workflows/make_release.yml systemd-252.36/.github/workflows/make_release.yml
--- systemd-252.33/.github/workflows/make_release.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/make_release.yml	2025-03-06 11:43:10.000000000 +0000
@@ -11,7 +11,7 @@
 jobs:
   release:
     if: github.repository == 'systemd/systemd' || github.repository == 'systemd/systemd-stable'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
 
     permissions:
       contents: write
diff -Nru systemd-252.33/.github/workflows/mkosi.yml systemd-252.36/.github/workflows/mkosi.yml
--- systemd-252.33/.github/workflows/mkosi.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/mkosi.yml	2025-03-06 11:43:10.000000000 +0000
@@ -25,7 +25,7 @@
 
 jobs:
   ci:
-    runs-on: ubuntu-22.04
+    runs-on: ubuntu-24.04
     concurrency:
       group: ${{ github.workflow }}-${{ matrix.distro }}-${{ matrix.release }}-${{ github.ref }}
       cancel-in-progress: true
@@ -45,6 +45,9 @@
             release: 9-stream
 
     steps:
+    - name: mkosi dependencies
+      run: sudo apt-get install --assume-yes --no-install-recommends python3-pyelftools makepkg python3-pexpect python3-jinja2
+
     - uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b
     - uses: systemd/mkosi@792cbc60eb2dc4a58d66bb3c212bf92f8d50f6ea
 
@@ -53,15 +56,7 @@
     # (should be done by the end of 2022).
     - name: Fix C9S/EPEL9
       if: ${{ matrix.release == '9-stream' }}
-      run: sudo sed -i '/add_packages/s/systemd-boot/systemd/g' /usr/local/lib/python3.10/dist-packages/mkosi/__init__.py
-
-    # FIXME: temporary workaround for debootstrap issue of Debian testing/sid on Jammy
-    - name: Fix Debian testing/sid
-      if: ${{ matrix.distro == 'debian' && matrix.release == 'testing' }}
-      run: sudo sed -i 's/merged-usr/no-merged-usr/g' /usr/local/lib/python3.10/dist-packages/mkosi/__init__.py
-
-    - name: Install
-      run: sudo apt-get update && sudo apt-get install --no-install-recommends python3-pexpect python3-jinja2
+      run: sudo sed -i '/add_packages/s/systemd-boot/systemd/g' /usr/local/lib/python3.12/dist-packages/mkosi/__init__.py
 
     - name: Configure
       run: |
diff -Nru systemd-252.33/.github/workflows/scorecards.yml systemd-252.36/.github/workflows/scorecards.yml
--- systemd-252.33/.github/workflows/scorecards.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.github/workflows/scorecards.yml	2025-03-06 11:43:10.000000000 +0000
@@ -23,7 +23,7 @@
   analysis:
     name: Scorecards analysis
     if: github.repository == 'systemd/systemd'
-    runs-on: ubuntu-latest
+    runs-on: ubuntu-24.04
     permissions:
       # Needed to upload the results to code-scanning dashboard.
       security-events: write
diff -Nru systemd-252.33/hwdb.d/20-net-ifname.hwdb systemd-252.36/hwdb.d/20-net-ifname.hwdb
--- systemd-252.33/hwdb.d/20-net-ifname.hwdb	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/20-net-ifname.hwdb	2025-03-06 11:43:10.000000000 +0000
@@ -3,3 +3,7 @@
 # Dell iDRAC Virtual USB NIC
 usb:v413CpA102*
  ID_NET_NAME_FROM_DATABASE=idrac
+
+# Disable inclusion of PCI domain in interface names on Azure MANA
+pci:v00001414d000000BA*
+ ID_NET_NAME_INCLUDE_DOMAIN=0
diff -Nru systemd-252.33/hwdb.d/60-evdev.hwdb systemd-252.36/hwdb.d/60-evdev.hwdb
--- systemd-252.33/hwdb.d/60-evdev.hwdb	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-evdev.hwdb	2025-03-06 11:43:10.000000000 +0000
@@ -933,6 +933,12 @@
  EVDEV_ABS_00=0:10000:400
  EVDEV_ABS_01=0:6250:400
 
+# WALTOP International Corp. Slim Tablet Stylus
+evdev:input:b0003v172Fp0034*
+ EVDEV_ABS_00=0:20000:80
+ EVDEV_ABS_01=0:12500:80
+ EVDEV_ABS_24=0:1023:500
+
 # WALTOP International Corp. Graphics Tablet
 evdev:input:b0003v172Fp0047*
  EVDEV_ABS_00=0:20000:80
diff -Nru systemd-252.33/hwdb.d/60-input-id.hwdb systemd-252.36/hwdb.d/60-input-id.hwdb
--- systemd-252.33/hwdb.d/60-input-id.hwdb	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-input-id.hwdb	2025-03-06 11:43:10.000000000 +0000
@@ -55,6 +55,10 @@
 id-input:modalias:input:b0003v28bdp0078*
  ID_INPUT_TABLET=1
 
+# XBox Series Elite controller
+id-input:modalias:input:b0005v045Ep0B22e0517*
+ ID_INPUT_JOYSTICK=1
+
 # Lite-On Tech IBM USB Travel Keyboard with Ultra Nav Mouse
 id-input:modalias:input:b0003v04B3p301Ee0100-e0,1,2,4*
  ID_INPUT_POINTINGSTICK=1
diff -Nru systemd-252.33/hwdb.d/60-keyboard.hwdb systemd-252.36/hwdb.d/60-keyboard.hwdb
--- systemd-252.33/hwdb.d/60-keyboard.hwdb	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-keyboard.hwdb	2025-03-06 11:43:10.000000000 +0000
@@ -116,8 +116,8 @@
  KEYBOARD_KEY_d9=brightnessup                           # Fn+Right
  KEYBOARD_KEY_ee=brightnessup                           # Fn+Right
  KEYBOARD_KEY_ef=brightnessdown                         # Fn+Left
- KEYBOARD_KEY_f1=f22                                    # Fn+F7 Touchpad toggle (off-to-on)
- KEYBOARD_KEY_f2=f23                                    # Fn+F7 Touchpad toggle (on-to-off)
+ KEYBOARD_KEY_f1=touchpad_on                            # Fn+F7 Touchpad toggle (off-to-on)
+ KEYBOARD_KEY_f2=touchpad_off                           # Fn+F7 Touchpad toggle (on-to-off)
  KEYBOARD_KEY_f3=prog2                                  # "P2" programmable button
  KEYBOARD_KEY_f4=prog1                                  # "P1" programmable button
  KEYBOARD_KEY_f5=presentation
@@ -125,10 +125,6 @@
  KEYBOARD_KEY_f8=fn
  KEYBOARD_KEY_f9=prog1                                  # Launch NTI shadow
 
-# Acer kernel driver
-evdev:name:Acer WMI hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnAcer*:*
- KEYBOARD_KEY_82=f21                                    # Touchpad toggle
-
 # Aspire models
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*:*
  KEYBOARD_KEY_84=bluetooth                              # sent when bluetooth module missing, and key pressed
@@ -186,7 +182,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311-31*:pvr*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311R-31*:pvr*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr*
- KEYBOARD_KEY_8a=f20                                    # Microphone mute
+ KEYBOARD_KEY_8a=micmute                                # Microphone mute
 
 # Travelmate C300
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:*
@@ -200,7 +196,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*P648-G2-MG*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*P648-G3-M*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*P645-S*:*
- KEYBOARD_KEY_8a=f20                                    # Microphone mute button; should be micmute
+ KEYBOARD_KEY_8a=micmute                                # Microphone mute button
 
 # on some models this isn't brightnessup
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pn*5210*:*
@@ -223,7 +219,7 @@
 
 # Swift SF314-511
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnSwiftSF314-511:pvr*
- KEYBOARD_KEY_8a=f20                                    # Fn+F12, microphone mute
+ KEYBOARD_KEY_8a=micmute                                # Fn+F12, microphone mute
 
 # Predator PHN16-71
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredatorPHN16-71:*
@@ -242,7 +238,7 @@
 
 # Nitro AN515-58
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnNitro*AN*515-58:pvr*
- KEYBOARD_KEY_8a=f20                                    # Microphone mute button
+ KEYBOARD_KEY_8a=micmute                                # Microphone mute button
  KEYBOARD_KEY_55=power
 
 ###########################################################
@@ -251,7 +247,7 @@
 
 # Alienware/Dell reserves these keys; safe to apply on all their devices
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAlienware*:pn*:*
- KEYBOARD_KEY_81=f21                                    # Touchpad toggle
+ KEYBOARD_KEY_81=touchpad_toggle                        # Touchpad toggle
  KEYBOARD_KEY_8a=ejectcd
  KEYBOARD_KEY_bf=!prog1                                 # graphics amplifier, cable plug-in event
  KEYBOARD_KEY_c1=!prog2                                 # graphics amplifier, undock-button event
@@ -268,7 +264,7 @@
 # Aquarius Cmp NS483
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAquarius*:pnCmp*NS483*:*
  KEYBOARD_KEY_56=backslash
- KEYBOARD_KEY_76=f21                                    # Touchpad Toggle
+ KEYBOARD_KEY_76=touchpad_toggle                        # Touchpad Toggle
 
 ###########################################################
 # Asus
@@ -279,16 +275,6 @@
  KEYBOARD_KEY_ee=volumedown
  KEYBOARD_KEY_ef=mute
 
-evdev:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
-evdev:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
-evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:*
- KEYBOARD_KEY_6b=f21                                    # Touchpad Toggle
- KEYBOARD_KEY_7c=f20                                    # Remap micmute to f20
-
-# USB keyboard in Asus FX503VD
-evdev:input:b0003v0B05p1869*
- KEYBOARD_KEY_ff31007c=f20                              # Remap micmute to f20
-
 # Asus TF103C misses the home button in its PNP0C40 GPIO resources
 # causing the volume-button mappings to be off by one, correct this
 evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:*
@@ -345,15 +331,15 @@
 evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS50_70MU:*
 evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4XMB,ME,MZ:*
 evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNS5x_NS7xPU:*
- KEYBOARD_KEY_f7=f21                                    # Touchpad Toggle
- KEYBOARD_KEY_f8=f21                                    # Touchpad Toggle
+ KEYBOARD_KEY_f7=touchpad_toggle                        # Touchpad Toggle
+ KEYBOARD_KEY_f8=touchpad_toggle                        # Touchpad Toggle
 
 evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV5xTNC_TND_TNE:*
 evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnNV4xPZ:*
 evdev:atkbd:dmi:bvn*:bvr*:svnNotebook:pnV54x_6x_TU:*
- KEYBOARD_KEY_f7=f21                                    # Touchpad Toggle
- KEYBOARD_KEY_f8=f21                                    # Touchpad Toggle
- KEYBOARD_KEY_81=f20                                    # Fn+4; Mic Mute
+ KEYBOARD_KEY_f7=touchpad_toggle                        # Touchpad Toggle
+ KEYBOARD_KEY_f8=touchpad_toggle                        # Touchpad Toggle
+ KEYBOARD_KEY_81=micmute                                # Fn+4; Mic Mute
 
 ###########################################################
 # Compal
@@ -374,7 +360,7 @@
  KEYBOARD_KEY_9f=homepage
 
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnCompaq:pn*:pvr*:rvn*:rnN14KP6*
- KEYBOARD_KEY_76=f21                                    # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+f2 toggle touchpad
 
 evdev:input:b0003v049Fp0051*
 evdev:input:b0003v049Fp008D*
@@ -420,12 +406,12 @@
  KEYBOARD_KEY_99=nextsong                               # Front panel next song
  KEYBOARD_KEY_9a=setup                                  # Tablet tools button
  KEYBOARD_KEY_9b=switchvideomode                        # Display toggle button
- KEYBOARD_KEY_9e=f21                                    # Touchpad toggle
+ KEYBOARD_KEY_9e=touchpad_toggle                        # Touchpad toggle
  KEYBOARD_KEY_a2=playpause                              # Front panel play/pause
  KEYBOARD_KEY_a4=stopcd                                 # Front panel stop
  KEYBOARD_KEY_ed=media                                  # MediaDirect button
  KEYBOARD_KEY_d8=screenlock                             # FIXME: Tablet lock button
- KEYBOARD_KEY_d9=f21                                    # Touchpad toggle
+ KEYBOARD_KEY_d9=touchpad_toggle                        # Touchpad toggle
 
 #
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnInspiron*910:*
@@ -467,7 +453,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
  KEYBOARD_KEY_88=!                                      # wireless switch
- KEYBOARD_KEY_9e=!f21
+ KEYBOARD_KEY_9e=!touchpad_toggle
 
 # Dell Latitude E[67]*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*E6*:*
@@ -498,17 +484,17 @@
 evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
 # Dell XPS microphone mute
 evdev:name:Dell WMI hotkeys:dmi:bvn*:bvr*:bd*:svnDell*:pnXPS*:*
- KEYBOARD_KEY_100150=f20                                # Mic mute toggle, should be micmute
+ KEYBOARD_KEY_100150=micmute                            # Mic mute toggle
 
 # Dell Latitude privacy microphone mute
 evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnLatitude*:*
 # Dell Precision privacy microphone mute
 evdev:name:Dell Privacy Driver:dmi:bvn*:bvr*:bd*:svnDell*:pnPrecision*:*
- KEYBOARD_KEY_120001=f20                                # Mic mute toggle, should be micmute
+ KEYBOARD_KEY_120001=micmute                            # Mic mute toggle
 
 # Dell Professional Sound Bar AE515
 evdev:input:b0003v413CpA506*
- KEYBOARD_KEY_b002f=f20                                # Mic mute toggle, should be micmute
+ KEYBOARD_KEY_b002f=micmute                            # Mic mute toggle
 
 ###########################################################
 # Everex
@@ -516,7 +502,7 @@
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnEverex:pnXT5000*:*
  KEYBOARD_KEY_5c=media
- KEYBOARD_KEY_65=f21                                    # Fn+F5 Touchpad toggle
+ KEYBOARD_KEY_65=touchpad_toggle                        # Fn+F5 Touchpad toggle
  KEYBOARD_KEY_67=prog3                                  # Fan speed control button
  KEYBOARD_KEY_6f=brightnessup
  KEYBOARD_KEY_7f=brightnessdown
@@ -555,7 +541,7 @@
 
 # Amilo Pro v3205
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnFUJITSU*:pn*AMILO*Pro*V3205*:*
- KEYBOARD_KEY_f4=f21                                    # FIXME: silent-mode decrease CPU/GPU clock
+ KEYBOARD_KEY_f4=touchpad_toggle                        # FIXME: silent-mode decrease CPU/GPU clock
  KEYBOARD_KEY_f7=switchvideomode                        # Fn+F3
 
 # Amilo Si 1520
@@ -665,8 +651,8 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*:*
  KEYBOARD_KEY_88=media                                  # FIXME: quick play
  KEYBOARD_KEY_b7=print
- KEYBOARD_KEY_d8=!f23                                   # touchpad off
- KEYBOARD_KEY_d9=!f22                                   # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off                          # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on                           # touchpad on
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*Pavilion*dv7*Notebook*PC:*
  KEYBOARD_KEY_b7=print
@@ -676,7 +662,7 @@
 
 # Pavilion 13 x360 (Tablet mode and SYSRQ key)
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[pP][aA][vV][iI][lL][iI][oO][nN]*13*x360*:*
- KEYBOARD_KEY_d7=!f23                                   # touchpad off
+ KEYBOARD_KEY_d7=!touchpad_off                          # touchpad off
  KEYBOARD_KEY_d9=unknown
  KEYBOARD_KEY_d2=sysrq                                  # Fn+Print = SYSRQ
 
@@ -694,7 +680,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPSpectrex360Convertible13*:*
 # ENVY x360 13
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPENVYx360Convertible13*:*
- KEYBOARD_KEY_82=f20                                    # Microphone mute button, should be micmute
+ KEYBOARD_KEY_82=micmute                                # Microphone mute button
 
 # Spectre x360 16 2022
 evdev:name:Intel HID events:dmi:bvn*:bvr*:bd*:svnHP*:pn*HP[sS][pP][eE][cC][tT][rR][eE]*x3602-in-1*:*
@@ -707,7 +693,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHPElitex21013G3:*
  KEYBOARD_KEY_f8=unknown                               # rfkill is also reported by HP Wireless hotkeys
  KEYBOARD_KEY_64=calendar
- KEYBOARD_KEY_81=f20                                   # Microphone mute button
+ KEYBOARD_KEY_81=micmute                               # Microphone mute button
  KEYBOARD_KEY_ee=switchvideomode                       # Switch display outputs
  KEYBOARD_KEY_92=brightnessdown
  KEYBOARD_KEY_97=brightnessup
@@ -725,20 +711,33 @@
 
 # Presario
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*Presario*CQ*:*
- KEYBOARD_KEY_d8=f21
- KEYBOARD_KEY_d9=f21
+ KEYBOARD_KEY_d8=touchpad_toggle
+ KEYBOARD_KEY_d9=touchpad_toggle
 
 # 2510p 2530p
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2510p*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2530p*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*G60*Notebook*PC:*
- KEYBOARD_KEY_d8=!f23                                   # touchpad off
- KEYBOARD_KEY_d9=!f22                                   # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off                          # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on                           # touchpad on
 
 # 2570p
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:*
  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
 
+# 2170p running coreboot
+evdev:atkbd:dmi:bvncoreboot:bvr*:bd*:svnHewlett-Packard*:pn*EliteBook2170p:*
+evdev:atkbd:dmi:bvncoreboot:bvr*:bd*:svnHP*:pn*EliteBook2170p:*
+ KEYBOARD_KEY_66=backspace
+ KEYBOARD_KEY_be=battery		# Fn+F2
+ KEYBOARD_KEY_d7=switchvideomode	# Fn+F4
+ KEYBOARD_KEY_a3=mute			# Fn+F5
+ KEYBOARD_KEY_a1=volumedown		# Fn+F6
+ KEYBOARD_KEY_a2=volumeup		# Fn+F7
+ KEYBOARD_KEY_a4=brightnessdown		# Fn+F9
+ KEYBOARD_KEY_c3=brightnessup		# Fn+F10
+ KEYBOARD_KEY_e3=wlan			# Fn+F12
+
 # Elitebook 2760p
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:*
  KEYBOARD_KEY_89=battery                                # Fn+F8
@@ -747,15 +746,15 @@
  KEYBOARD_KEY_87=volumedown
  KEYBOARD_KEY_92=brightnessdown
  KEYBOARD_KEY_97=brightnessup
- KEYBOARD_KEY_d8=!f23                                   # touchpad off
- KEYBOARD_KEY_d9=!f22                                   # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off                          # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on                           # touchpad on
  KEYBOARD_KEY_b3=brightness_auto                        # Auto brightness
 
 # TX2
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:*
  KEYBOARD_KEY_c2=media
- KEYBOARD_KEY_d8=!f23                                   # Toggle touchpad button on tx2 (OFF)
- KEYBOARD_KEY_d9=!f22                                   # Toggle touchpad button on tx2 (ON)
+ KEYBOARD_KEY_d8=!touchpad_off                          # Toggle touchpad button on tx2 (OFF)
+ KEYBOARD_KEY_d9=!touchpad_on                           # Toggle touchpad button on tx2 (ON)
 
 # Presario 2100
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnPresario*2100*:*
@@ -780,8 +779,8 @@
 # HDX9494nr
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHDX9494NR:*
  KEYBOARD_KEY_b2=www                                    # Fn+F3
- KEYBOARD_KEY_d8=!f23                                   # touchpad off
- KEYBOARD_KEY_d9=!f22                                   # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off                          # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on                           # touchpad on
 
 # HP EliteBook 725 G2
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPLicrice:*
@@ -800,7 +799,7 @@
 # HP ZBook
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPZBook*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBook*:*
- KEYBOARD_KEY_81=f20                                    # Fn+F8; Microphone mute button, should be micmute
+ KEYBOARD_KEY_81=micmute                                # Fn+F8; Microphone mute button
 
 # HP ZBook Studio G5
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPZBookStudioG5*:*
@@ -813,9 +812,9 @@
 
 # HP ProBook 11 G1
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPProBook11G1:*
- KEYBOARD_KEY_81=f20                                    # Fn+F8; Microphone mute button, should be micmute
- KEYBOARD_KEY_d8=f21                                    # touchpad toggle
- KEYBOARD_KEY_d9=f21                                    # touchpad toggle
+ KEYBOARD_KEY_81=micmute                                # Fn+F8; Microphone mute button
+ KEYBOARD_KEY_d8=touchpad_toggle                        # touchpad toggle
+ KEYBOARD_KEY_d9=touchpad_toggle                        # touchpad toggle
 
 # HP ZBook Studio G4
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPZBookStudioG4:*
@@ -823,13 +822,13 @@
 
 # HP EliteBook Folio 1040 G2
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBookFolio1040G2:*
- KEYBOARD_KEY_d8=!f23                                   # touchpad off
- KEYBOARD_KEY_d9=!f22                                   # touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off                          # touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on                           # touchpad on
 
 # HP EliteBook Folio G1
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPEliteBookFolioG1:*
  KEYBOARD_KEY_64=calendar
- KEYBOARD_KEY_81=f20
+ KEYBOARD_KEY_81=micmute
 
 # HP EliteBook 845 G7
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook845G7*:pvr*
@@ -862,14 +861,14 @@
 
 # HP ProBook 11G2
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr*
- KEYBOARD_KEY_d8=!f23                                   # Fn+F2: touchpad off
- KEYBOARD_KEY_d9=!f22                                   # Fn+F2: touchpad on
+ KEYBOARD_KEY_d8=!touchpad_off                          # Fn+F2: touchpad off
+ KEYBOARD_KEY_d9=!touchpad_on                           # Fn+F2: touchpad on
 
 # HP mt44 Mobile Thin Client
 evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:*
  KEYBOARD_KEY_64=calendar                               # Calendar icon (Fn + F12)
  KEYBOARD_KEY_6d=displaytoggle                          # Display icon
- KEYBOARD_KEY_81=f20                                    # Fn+F8; Microphone mute button, should be micmute
+ KEYBOARD_KEY_81=micmute                                # Fn+F8; Microphone mute button
  KEYBOARD_KEY_85=unknown                                # lid close; also reported via special evdev
  KEYBOARD_KEY_f8=wlan                                   # Wireless HW switch button
 
@@ -887,7 +886,7 @@
 
 # HP Dev One
 evdev:atkbd:dmi:*:rvnHP:rn8A78:*
- KEYBOARD_KEY_81=f20                                    # Fn+F8; Microphone mute button
+ KEYBOARD_KEY_81=micmute                                # Fn+F8; Microphone mute button
  KEYBOARD_KEY_f9=prog1                                  # Fn+F12; Programmable hotkey
 
 # HP Victus
@@ -910,14 +909,18 @@
  KEYBOARD_KEY_c8=pageup
  KEYBOARD_KEY_d0=pagedown
 
+# HP 430 Programmable Wireless Keypad
+evdev:input:b0005v03F0p854Ae044C*
+ KEYBOARD_KEY_700f3=macro1
+ KEYBOARD_KEY_700f4=macro2
+ KEYBOARD_KEY_700fc=macro3
+ KEYBOARD_KEY_700fd=macro4
+ KEYBOARD_KEY_700fe=macro5
+
 ##########################################################
 # Huawei
 ##########################################################
 
-# Huawei WMI hotkeys driver
-evdev:name:Huawei WMI hotkeys:dmi:bvn*:bvr*:bd*:svnHUAWEI:*
- KEYBOARD_KEY_287=f20                                   # Microphone mute button, should be micmute
-
 # Huawei MACH-WX9 and EUL-WX9
 evdev:atkbd:dmi:bvn*:bvr*:svnHUAWEI*:pnMACH-WX9:*
 evdev:atkbd:dmi:bvn*:bvr*:svnHUAWEI*:pnEUL-WX9:*
@@ -977,7 +980,7 @@
 
 # LEAP W502
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnJP-IK:pnLEAPW502:pvr*
- KEYBOARD_KEY_76=f21                                    # touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle                        # touchpad toggle
 
 ###########################################################
 # Kvadra
@@ -985,7 +988,7 @@
 
 # LE14U/LE15U
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnKVADRA*:pn*LE1*U*:*
- KEYBOARD_KEY_76=f21                                    # Fn+F1 Toggle touchpad, sends meta+ctrl+toggle
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+F1 Toggle touchpad, sends meta+ctrl+toggle
 
 ###########################################################
 # Lenovo
@@ -998,7 +1001,7 @@
  KEYBOARD_KEY_03=sleep
  KEYBOARD_KEY_04=wlan
  KEYBOARD_KEY_06=switchvideomode
- KEYBOARD_KEY_07=f21
+ KEYBOARD_KEY_07=touchpad_toggle
  KEYBOARD_KEY_08=f24
  KEYBOARD_KEY_0b=suspend
  KEYBOARD_KEY_0f=brightnessup
@@ -1009,7 +1012,6 @@
  KEYBOARD_KEY_15=volumedown
  KEYBOARD_KEY_16=mute
  KEYBOARD_KEY_17=prog1
- KEYBOARD_KEY_1a=f20                                    # Microphone mute button; should be micmute
  KEYBOARD_KEY_45=bookmarks
  KEYBOARD_KEY_46=selective_screenshot                   # Fn + PrtSc, on Windows: Snipping tool
  KEYBOARD_KEY_4a=prog3                                  # Fn + Right shift, on Windows: No idea
@@ -1023,14 +1025,14 @@
  KEYBOARD_KEY_090013=battery                            # Fn+F3
  KEYBOARD_KEY_090014=wlan                               # Fn+F5
  KEYBOARD_KEY_090016=switchvideomode                    # Fn+F7
- KEYBOARD_KEY_090017=f21                                # Fn+F8  touchpad toggle
+ KEYBOARD_KEY_090017=touchpad_toggle                    # Fn+F8  touchpad toggle
  KEYBOARD_KEY_090019=suspend                            # Fn+F12
  KEYBOARD_KEY_09001a=brightnessup                       # Fn+Home
  KEYBOARD_KEY_09001b=brightnessdown                     # Fn+End
  KEYBOARD_KEY_09001d=zoom                               # Fn+Space
  KEYBOARD_KEY_090011=prog1                              # ThinkVantage button
  KEYBOARD_KEY_090015=camera                             # Fn+F6 headset/camera VoIP key  ??
- KEYBOARD_KEY_090010=f20                                # Microphone mute button; should be micmute
+ KEYBOARD_KEY_090010=micmute                            # Microphone mute button
 
 # Lenovo 3000
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*3000*:pvr*
@@ -1052,8 +1054,8 @@
  KEYBOARD_KEY_b9=brightnessup                           # does nothing in BIOS
  KEYBOARD_KEY_ba=brightnessdown                         # does nothing in BIOS
  KEYBOARD_KEY_f1=camera                                 # BIOS toggles camera power
- KEYBOARD_KEY_f2=f21                                    # touchpad toggle (key alternately emits F2 and F3)
- KEYBOARD_KEY_f3=f21
+ KEYBOARD_KEY_f2=touchpad_toggle                        # touchpad toggle (key alternately emits F2 and F3)
+ KEYBOARD_KEY_f3=touchpad_toggle
 
 # Lenovo IdeaPad 5
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:pvrIdeaPad5*:*
@@ -1089,17 +1091,14 @@
 # IdeaPad
 evdev:name:Ideapad extra buttons:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
  KEYBOARD_KEY_0d=rfkill                                 # airplane mode switch (toggle all wireless devices)
- KEYBOARD_KEY_08=f20                                    # micmute
- KEYBOARD_KEY_42=f23
- KEYBOARD_KEY_43=f22
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*Y550*:pvr*
  KEYBOARD_KEY_95=media
  KEYBOARD_KEY_a3=play
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*IdeaPad*U300s*:pvr*
- KEYBOARD_KEY_f1=f21
- KEYBOARD_KEY_ce=f20                                    # micmute
+ KEYBOARD_KEY_f1=touchpad_toggle
+ KEYBOARD_KEY_ce=micmute
 
 evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*IdeaPad*Z370*:pvr*
 # Lenovo IdeaPad Flex 5
@@ -1120,16 +1119,16 @@
 evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*20378*:pvr*
 # Lenovo IdeaPad Z500
 evdev:atkbd:dmi:bvn*:bvr*:svnLENOVO*:pn*5931*:pvr*
- KEYBOARD_KEY_f3=f21                                    # Fn+F6 (toggle touchpad)
+ KEYBOARD_KEY_f3=touchpad_toggle                        # Fn+F6 (toggle touchpad)
 
 # V480
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*Lenovo*V480*:pvr*
- KEYBOARD_KEY_f1=f21
+ KEYBOARD_KEY_f1=touchpad_toggle
 
 # Lenovo ThinkCentre M800z/M820z/M920z AIO machines
 # key_scancode 00 is KEY_MICMUTE
 evdev:name:Microphone Mute Button:dmi:bvn*:bvr*:bd*:svnLENOVO*:pn*:*
- KEYBOARD_KEY_00=f20
+ KEYBOARD_KEY_00=micmute
 
 # enhanced USB keyboard
 evdev:input:b0003v04B3p301B*
@@ -1144,7 +1143,7 @@
 
 # Lenovo Ideapad D330-10IGM
 evdev:name:SIPODEV Lenovo HID Device:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IGM:*
- KEYBOARD_KEY_70073=f21                                 # Fn+Supr (Touchpad toggle)
+ KEYBOARD_KEY_70073=touchpad_toggle                     # Fn+Supr (Touchpad toggle)
 
 evdev:name:SIPODEV Lenovo HID Device Consumer Control:dmi:*:svnLENOVO:*:pvrLenovoideapadD330-10IGM:*
  KEYBOARD_KEY_c00ff=fn_esc                              # Fn+Tab (FnLk toggle)
@@ -1438,10 +1437,15 @@
  KEYBOARD_KEY_c01b6=images                              # My Pictures (F11)
  KEYBOARD_KEY_c01b7=audio                               # My Music (F12)
 
+# The wireless receiver b0003v046Dp4092* seems to be used by multiple models.
+# See issue #35691. Hence, the entry below cannot be enabled by default. If
+# you're using the model below, consider copying the entry to a custom hwdb
+# file to enable the setting.
+#
 # Logitech MX Keys for Mac
-evdev:input:b0003v046Dp4092*
- KEYBOARD_KEY_70035=102nd                               # '<' key
- KEYBOARD_KEY_70064=grave                               # '^' key
+#evdev:input:b0003v046Dp4092*
+# KEYBOARD_KEY_70035=102nd                               # '<' key
+# KEYBOARD_KEY_70064=grave                               # '^' key
 
 ###########################################################
 # Maxdata
@@ -1512,7 +1516,6 @@
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pn*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*:*
- KEYBOARD_KEY_76=f21                                    # Toggle touchpad, sends meta+ctrl+toggle
  KEYBOARD_KEY_91=config                                 # MSIControl Center
  KEYBOARD_KEY_a0=mute                                   # Fn+F9
  KEYBOARD_KEY_ae=volumedown                             # Fn+F7
@@ -1521,16 +1524,20 @@
  KEYBOARD_KEY_c2=ejectcd
  KEYBOARD_KEY_df=sleep                                  # Fn+F12
  KEYBOARD_KEY_e2=bluetooth                              # satellite dish2
- KEYBOARD_KEY_e4=f21                                    # Fn+F3 Touchpad disable
+ KEYBOARD_KEY_e4=touchpad_toggle                        # Fn+F3 Touchpad disable
  KEYBOARD_KEY_ec=email                                  # envelope button
  KEYBOARD_KEY_ee=camera                                 # Fn+F6 camera disable
- KEYBOARD_KEY_f1=f20                                    # Microphone mute
+ KEYBOARD_KEY_f1=micmute                                # Microphone mute
  KEYBOARD_KEY_f2=rotate_display                         # Rotate screen
  KEYBOARD_KEY_f6=wlan                                   # satellite dish1
  KEYBOARD_KEY_f7=brightnessdown                         # Fn+F4
  KEYBOARD_KEY_f8=brightnessup                           # Fn+F5
  KEYBOARD_KEY_f9=search
 
+# MSI GF63 toggles touchpad using Fn+F3 where the keyboard key is 29
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGF63*:*
+ KEYBOARD_KEY_85=touchpad_toggle                        # Toggle touchpad, sends meta+ctrl+toggle
+
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE60*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMICRO-STAR*:pnGE70*:*
  KEYBOARD_KEY_c2=ejectcd
@@ -1557,6 +1564,7 @@
 # Keymaps MSI Prestige And MSI Modern FnKeys and Special keys
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Prestige*:*
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnMicro-Star*:pn*Modern*:*
+ KEYBOARD_KEY_76=touchpad_toggle                        # Toggle touchpad, sends meta+ctrl+toggle
  KEYBOARD_KEY_91=prog1                                  # Fn+F7 Creation Center, sometime F7
  KEYBOARD_KEY_f2=rotate_display                         # Fn+F12 Screen rotation
  KEYBOARD_KEY_8d=prog3                                  # Fn+A Change True Color selections
@@ -1565,12 +1573,9 @@
  KEYBOARD_KEY_97=unknown                                # Lid close
  KEYBOARD_KEY_98=unknown                                # Lid open
 
-evdev:name:MSI Laptop hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnM[iI][cC][rR][oO]-S[tT][aA][rR]*:*
- KEYBOARD_KEY_0213=f22
- KEYBOARD_KEY_0214=f23
-
-# MSI Claw
+# MSI Claw, MSI Claw 8
 evdev:name:AT Translated Set 2 keyboard:dmi:*:svnMicro-StarInternationalCo.,Ltd.:pnClawA1M:*
+evdev:name:AT Translated Set 2 keyboard:dmi:*:svnMicro-StarInternationalCo.,Ltd.:pnClaw8AI+A2VM:*
  KEYBOARD_KEY_b9=f15                                   # Right Face Button
  KEYBOARD_KEY_ba=f16                                   # Left Face Button
 
@@ -1580,7 +1585,7 @@
 
 # VersaPro VG-S
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnNEC:pnPC-VK22TGSGS:pvr*
- KEYBOARD_KEY_a8=f21                                    # Fn+Space touchpad toggle
+ KEYBOARD_KEY_a8=touchpad_toggle                        # Fn+Space touchpad toggle
  KEYBOARD_KEY_67=brightnessdown                         # Fn+F7 brightness down
  KEYBOARD_KEY_65=brightnessup                           # Fn+F8 brightness up
  KEYBOARD_KEY_71=battery                                # Fn+F4 ECO
@@ -1593,7 +1598,7 @@
 evdev:input:b0003v15BAp003C*
  KEYBOARD_KEY_70066=sleep                               # Fn+F1
  KEYBOARD_KEY_700f6=wlan                                # Fn+F2
- KEYBOARD_KEY_700c7=f21                                 # Fn+F3 touchpad toggle
+ KEYBOARD_KEY_700c7=touchpad_toggle                     # Fn+F3 touchpad toggle
  KEYBOARD_KEY_7006f=brightnessdown                      # Fn+F7
  KEYBOARD_KEY_70070=brightnessup                        # Fn+F8
  KEYBOARD_KEY_7006e=switchvideomode                     # Fn+F9
@@ -1634,8 +1639,8 @@
  KEYBOARD_KEY_f3=f17
  KEYBOARD_KEY_f2=f18
  KEYBOARD_KEY_f1=f19
- KEYBOARD_KEY_f0=f20                                    # micmute
- KEYBOARD_KEY_ef=f21
+ KEYBOARD_KEY_f0=micmute
+ KEYBOARD_KEY_ef=touchpad_toggle
  KEYBOARD_KEY_ee=chat
  KEYBOARD_KEY_e4=chat
  KEYBOARD_KEY_dd=menu                                   # Frame
@@ -1677,7 +1682,7 @@
  KEYBOARD_KEY_f0=media                                  # Fn+R
  KEYBOARD_KEY_f5=switchvideomode                        # Fn+E
  KEYBOARD_KEY_f6=camera                                 # Fn+T
- KEYBOARD_KEY_f7=f21                                    # Fn+Y (touchpad toggle)
+ KEYBOARD_KEY_f7=touchpad_toggle                        # Fn+Y (touchpad toggle)
  KEYBOARD_KEY_f8=brightnessup                           # Fn+S
  KEYBOARD_KEY_f9=brightnessdown                         # Fn+A
  KEYBOARD_KEY_fb=wlan                                   # Fn+J
@@ -1748,14 +1753,6 @@
  KEYBOARD_KEY_70066=sleep
 
 ###########################################################
-# Plantronics
-###########################################################
-
-# Plantronics .Audio 626 DSP
-evdev:input:b0003v047FpC006*
- KEYBOARD_KEY_b002f=f20                                 # Microphone mute button; should be micmute
-
-###########################################################
 # Purism
 ###########################################################
 
@@ -1818,8 +1815,8 @@
  KEYBOARD_KEY_b4=!wlan                                  # Fn+F9 (X60P)
  KEYBOARD_KEY_c5=!prog3                                 # Fn+F8 switch power mode (battery/dynamic/performance)
  KEYBOARD_KEY_d5=!wlan                                  # Fn+F12 wlan/airplane switch
- KEYBOARD_KEY_f7=!f22                                   # Fn+F10 Touchpad on
- KEYBOARD_KEY_f9=!f23                                   # Fn+F10 Touchpad off
+ KEYBOARD_KEY_f7=!touchpad_on                           # Fn+F10 Touchpad on
+ KEYBOARD_KEY_f9=!touchpad_off                          # Fn+F10 Touchpad off
 
 # Series 3
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*300E[457]*:*
@@ -1832,8 +1829,8 @@
  KEYBOARD_KEY_89=!brightnessdown         # Fn+F2  brightness down
  KEYBOARD_KEY_88=!brightnessup           # Fn+F3  brightness up
  KEYBOARD_KEY_82=!switchvideomode        # Fn+F4  display toggle
- KEYBOARD_KEY_f7=!f22                    # Fn+F5  touchpad on
- KEYBOARD_KEY_f9=!f23                    # Fn+F5  touchpad off
+ KEYBOARD_KEY_f7=!touchpad_on            # Fn+F5  touchpad on
+ KEYBOARD_KEY_f9=!touchpad_off           # Fn+F5  touchpad off
  KEYBOARD_KEY_a0=!mute                   # Fn+F6  mute
  KEYBOARD_KEY_ae=!volumedown             # Fn+F7  volume down
  KEYBOARD_KEY_b0=!volumeup               # Fn+F8  volume up
@@ -1908,8 +1905,8 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*SX20S*:*
  KEYBOARD_KEY_74=mute
  KEYBOARD_KEY_75=mute
- KEYBOARD_KEY_77=f22                                    # Touchpad on
- KEYBOARD_KEY_79=f23                                    # Touchpad off
+ KEYBOARD_KEY_77=touchpad_on                            # Touchpad on
+ KEYBOARD_KEY_79=touchpad_off                           # Touchpad off
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:*
  KEYBOARD_KEY_ad=leftmeta
@@ -1918,7 +1915,7 @@
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:sku*SCAI*:*
  KEYBOARD_KEY_81=!esc
  KEYBOARD_KEY_ce=!prog1                                 # Fn+F1 launch settings
- KEYBOARD_KEY_76=f21                                    # Fn+F5 Touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+F5 Touchpad toggle
  KEYBOARD_KEY_ae=!volumedown                            # Fn+F7 volume down
  KEYBOARD_KEY_b0=!volumeup                              # Fn+F8 volume up
  KEYBOARD_KEY_ac=unknown                                # Fn+F9 multi-level keyboard backlight toggle - handled by samsung-galaxybook
@@ -1971,7 +1968,7 @@
  KEYBOARD_KEY_10=suspend                                # Fn+F12
 
 evdev:name:Sony Vaio Keys:dmi:bvn*:bvr*:bd*:svnSony*:pnVPC*:*
- KEYBOARD_KEY_05=f21                                    # Fn+F1 -> KEY_F21 (The actual touchpad toggle)
+ KEYBOARD_KEY_05=touchpad_toggle                        # Fn+F1
  KEYBOARD_KEY_0d=down                                   # Fn+F9 zoomout
  KEYBOARD_KEY_0e=up                                     # Fn+F10 zoomin
 
@@ -1980,19 +1977,23 @@
 ###########################################################
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pn*:*
- KEYBOARD_KEY_f7=f21                                    # Touchpad toggle
- KEYBOARD_KEY_f8=f21                                    # Touchpad toggle
+ KEYBOARD_KEY_81=micmute                                # Mic mute
+ KEYBOARD_KEY_f7=touchpad_toggle                        # Touchpad toggle
+ KEYBOARD_KEY_f8=touchpad_toggle                        # Touchpad toggle
 
-# Pangolin 12
+# Pangolin
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang12*
- KEYBOARD_KEY_76=f21                                    # Touchpad toggle
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang13*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang14*
+evdev:atkbd:dmi:bvn*:bvr*:bd*:svnSystem76*:pnPangolin*:pvrpang15*
+ KEYBOARD_KEY_76=touchpad_toggle                        # Touchpad toggle
 
 ###########################################################
 # T-bao
 ###########################################################
 
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnT-bao:pnTbookair:*
- KEYBOARD_KEY_76=f21                                    # Touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle                        # Touchpad toggle
 
 ###########################################################
 # Toshiba
@@ -2008,8 +2009,8 @@
  KEYBOARD_KEY_92=stop
  KEYBOARD_KEY_93=www
  KEYBOARD_KEY_94=media
- KEYBOARD_KEY_9e=f22                                    # Touchpad on
- KEYBOARD_KEY_9f=f23                                    # Touchpad off
+ KEYBOARD_KEY_9e=touchpad_on                            # Touchpad on
+ KEYBOARD_KEY_9f=touchpad_off                           # Touchpad off
  KEYBOARD_KEY_b9=nextsong
  KEYBOARD_KEY_d9=brightnessup
  KEYBOARD_KEY_ee=screenlock
@@ -2022,8 +2023,8 @@
  KEYBOARD_KEY_d9=brightnessup
  KEYBOARD_KEY_ee=screenlock
  KEYBOARD_KEY_93=media
- KEYBOARD_KEY_9e=f22                                    # touchpad enable
- KEYBOARD_KEY_9f=f23                                    # touchpad disable
+ KEYBOARD_KEY_9e=touchpad_on                            # touchpad enable
+ KEYBOARD_KEY_9f=touchpad_off                           # touchpad disable
 
 # Satellite P75-A
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:*
@@ -2037,14 +2038,14 @@
  KEYBOARD_KEY_13c=brightnessdown
  KEYBOARD_KEY_13d=brightnessup
  KEYBOARD_KEY_13e=switchvideomode
- KEYBOARD_KEY_13f=f21                                   # Touchpad toggle
+ KEYBOARD_KEY_13f=touchpad_toggle                       # Touchpad toggle
 
 # Satellite P75-A7200
 evdev:name:Toshiba*input*device:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnSatellite*P75-A:*
  KEYBOARD_KEY_13c=brightnessdown
  KEYBOARD_KEY_13d=brightnessup
  KEYBOARD_KEY_13e=switchvideomode
- KEYBOARD_KEY_13f=f21                                   # Touchpad toggle
+ KEYBOARD_KEY_13f=touchpad_toggle                       # Touchpad toggle
  KEYBOARD_KEY_9e=wlan
 
 # Portege Z830 ACPI quickstart buttons
@@ -2055,7 +2056,7 @@
  KEYBOARD_KEY_1=prog2                                   # TOSHIBA Presentation button
 
 evdev:name:Quickstart Button 3:dmi:bvn*:bvr*:bd*:svnTOSHIBA*:pnPORTEGEZ830:*
- KEYBOARD_KEY_1=f21                                     # Touchpad toggle
+ KEYBOARD_KEY_1=touchpad_toggle                         # Touchpad toggle
 
 ###########################################################
 # VIA
@@ -2069,7 +2070,7 @@
 ###########################################################
 
 evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:bd*:svnVIOS:pnLTH17:*
- KEYBOARD_KEY_70073=f21                                 # Touchpad toggle
+ KEYBOARD_KEY_70073=touchpad_toggle                     # Touchpad toggle
 
 ###########################################################
 # WeiHeng
@@ -2077,7 +2078,7 @@
 
 # P325J
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnINET:pnP325J:*
- KEYBOARD_KEY_76=f21                                    # Touchpad toggle
+ KEYBOARD_KEY_76=touchpad_toggle                        # Touchpad toggle
 
 ###########################################################
 # Xiaomi
@@ -2103,8 +2104,8 @@
  KEYBOARD_KEY_93=switchvideomode                        # Fn+F3 Toggle Video Output
  KEYBOARD_KEY_95=brightnessdown                         # Fn+F4 Brightness Down
  KEYBOARD_KEY_91=brightnessup                           # Fn+F5 Brightness Up
- KEYBOARD_KEY_a5=f23                                    # Fn+F6 Disable Touchpad
- KEYBOARD_KEY_a6=f22                                    # Fn+F6 Enable Touchpad
+ KEYBOARD_KEY_a5=touchpad_off                           # Fn+F6 Disable Touchpad
+ KEYBOARD_KEY_a6=touchpad_on                            # Fn+F6 Enable Touchpad
  KEYBOARD_KEY_a7=bluetooth                              # Fn+F10 Enable Bluetooth
  KEYBOARD_KEY_a9=bluetooth                              # Fn+F10 Disable Bluetooth
  KEYBOARD_KEY_f1=wlan                                   # RF Switch Off
@@ -2204,7 +2205,12 @@
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJPW1[12]F11X*:pvr*:*
 # Vaio FE14 (VJFE41F11X, VJE42F11X, VJFE44F11X, VJFE54F11X)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE*:pvr*:*
- KEYBOARD_KEY_76=f21                                    # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+F1 toggle touchpad
+
+# VAIO VJFH52
+evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFH52F11X*:pvr*:*
+ KEYBOARD_KEY_f7=touchpad_off                           # Fn+F1 toggle touchpad off
+ KEYBOARD_KEY_f8=touchpad_on                            # Fn+F1 toggle touchpad on
 
 ###########################################################
 # Positivo
@@ -2215,23 +2221,23 @@
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnCF40CM-V2*
 # Positivo DUO (k116)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivoTecnologiaSA:pn*:pvr*:rvnPositivoTecnologiaSA:rnK116*
- KEYBOARD_KEY_76=f21                                    # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+F1 toggle touchpad
 
 # Positivo (N14NPE-N, N15NPE-N)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivo*:pn*:pvr*:rvnPositivo*:rnN1[45]NPE-N*
- KEYBOARD_KEY_76=f21                                    # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+F1 toggle touchpad
  KEYBOARD_KEY_dd=search
 
 # Positivo (N15EPE, N14EPE)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:svnPositivo*:pn*:pvr*:rvnPositivo*:rnN1[45]EPE*
- KEYBOARD_KEY_76=f21                                    # Fn+F1 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+F1 toggle touchpad
  KEYBOARD_KEY_6e=search
 
 # Positivo (CG15D)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnCG15D*
 # Positivo Motion (N14AP7, N14DP6, N14DP7, N14DP7-V2, N14DP9, N14JP6, N14KP6)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14[ADJK]P*
- KEYBOARD_KEY_76=f21                                    # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+f2 toggle touchpad
  KEYBOARD_KEY_67=prog1                                  # Programmable button
  KEYBOARD_KEY_68=prog2                                  # Programmable button
  KEYBOARD_KEY_69=prog3                                  # Programmable button
@@ -2247,7 +2253,7 @@
 evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:br*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnN14EP6*
 # Positivo Motion (CW14Q01P) (CW14Q01P-V2)
 evdev:name:SIPODEV USB Composite Device:dmi:bvn*:bvr*:svnPositivoTecnologiaSA:pn*:pvr*:rvn*:rnCW14Q01P*
- KEYBOARD_KEY_70073=f21                                 # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_70073=touchpad_toggle                     # Fn+f2 toggle touchpad
  KEYBOARD_KEY_7006b=prog1                               # Programmable button
  KEYBOARD_KEY_7006c=prog2                               # Programmable button
  KEYBOARD_KEY_7006d=prog3                               # Programmable button
@@ -2258,7 +2264,7 @@
 ###########################################################
 # Multilaser Ultra (UL154)
 evdev:name:AT Translated Set 2 keyboard:dmi:bvn*bvr*:svnMultilaserIndustrial:pn*:pvr*:rvn*:rnUL154*
- KEYBOARD_KEY_76=f21                                    # Fn+f2 toggle touchpad
+ KEYBOARD_KEY_76=touchpad_toggle                        # Fn+f2 toggle touchpad
 
 ###########################################################
 # Other
diff -Nru systemd-252.33/hwdb.d/60-sensor.hwdb systemd-252.36/hwdb.d/60-sensor.hwdb
--- systemd-252.33/hwdb.d/60-sensor.hwdb	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/60-sensor.hwdb	2025-03-06 11:43:10.000000000 +0000
@@ -156,6 +156,10 @@
 sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:*
  ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
 
+# Asus Transformer Mini T103HAF
+sensor:modalias:platform:HID-SENSOR-200073*:dmi:*svn*ASUSTeK*:pnT103HAF:*
+ ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, -1 
+
 sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnTP201SA:*
 sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pn*E205SA:*
  ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1
@@ -164,8 +168,7 @@
 sensor:modalias:acpi:INVN6500*:dmi:*svn*ASUSTeK*:*pn*TP300LD:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
 
-sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q551LB:*
-sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q551LN:*
+sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pn*Q5??L*:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
 
 sensor:modalias:acpi:KXJ2109*:dmi:*:svnASUSTeK*:pnME176C:*
@@ -305,7 +308,7 @@
 
 # Chuwi Hi10 Max
 sensor:modalias:acpi:MXC6655*:dmi:*:svnCHUWIInnovationAndTechnology*:pnHi10Max:*
- ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
+ ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1
 
 # Chuwi Hi12
 sensor:modalias:acpi:BOSC0200*:dmi:*:svnHampoo:pnP02BD6_HI-122LP:*
@@ -510,6 +513,14 @@
  ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1
 
 #########################################
+# Exo
+#########################################
+
+# EXO Wings 2in1 w1125 
+sensor:modalias:acpi:SMO8500*:dmi:*:svnEXO*:pnWings:*
+ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
+
+#########################################
 # Geo Computers
 #########################################
 
diff -Nru systemd-252.33/hwdb.d/70-lights.hwdb systemd-252.36/hwdb.d/70-lights.hwdb
--- systemd-252.33/hwdb.d/70-lights.hwdb	1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/hwdb.d/70-lights.hwdb	2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,24 @@
+# This file is part of systemd.
+#
+# Database for remote controllable lights that should be accessible to the seat owner,
+# such as Bluetooth or USB lights that are used in conjuction with the computer like
+# streaming lights.
+#
+# To add local entries, copy this file to
+#   /etc/udev/hwdb.d/
+# and add your rules there. To load the new rules execute (as root):
+#   systemd-hwdb update
+#   udevadm trigger
+
+################
+# Logitech
+################
+# Litra Beam
+bluetooth:v046dpc901*
+usb:v046dpc901*
+ ID_AV_LIGHTS=1
+
+# Litra Glow
+bluetooth:v046dpc900*
+usb:v046dpc900*
+ ID_AV_LIGHTS=1
diff -Nru systemd-252.33/hwdb.d/parse_hwdb.py systemd-252.36/hwdb.d/parse_hwdb.py
--- systemd-252.33/hwdb.d/parse_hwdb.py	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/hwdb.d/parse_hwdb.py	2025-03-06 11:43:10.000000000 +0000
@@ -158,6 +158,7 @@
              ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))),
              ('ID_AUTOSUSPEND_DELAY_MS', INTEGER),
              ('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))),
+             ('ID_AV_LIGHTS', Or((Literal('0'), Literal('1')))),
              ('ID_PERSIST', Or((Literal('0'), Literal('1')))),
              ('ID_PDA', Or((Literal('0'), Literal('1')))),
              ('ID_INPUT', id_input_setting),
diff -Nru systemd-252.33/man/homectl.xml systemd-252.36/man/homectl.xml
--- systemd-252.33/man/homectl.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/homectl.xml	2025-03-06 11:43:10.000000000 +0000
@@ -485,7 +485,7 @@
         <listitem><para>Takes a boolean argument. Configures whether to enforce the system's password policy
         for this user, regarding quality and strength of selected passwords. Defaults to
         on. <option>-P</option> is short for
-        <option>---enforce-password-policy=no</option>.</para></listitem>
+        <option>--enforce-password-policy=no</option>.</para></listitem>
       </varlistentry>
 
       <varlistentry>
diff -Nru systemd-252.33/man/meson.build systemd-252.36/man/meson.build
--- systemd-252.33/man/meson.build	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/meson.build	2025-03-06 11:43:10.000000000 +0000
@@ -221,7 +221,8 @@
         'update-dbus-docs',
         output : 'update-dbus-docs',
         command : [update_dbus_docs_py, '--build-dir', project_build_root, '@INPUT@'],
-        input : dbus_docs)
+        input : dbus_docs,
+        depends : dbus_programs)
 
 if conf.get('BUILD_MODE_DEVELOPER') == 1
         test('dbus-docs-fresh',
diff -Nru systemd-252.33/man/nss-myhostname.xml systemd-252.36/man/nss-myhostname.xml
--- systemd-252.33/man/nss-myhostname.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/nss-myhostname.xml	2025-03-06 11:43:10.000000000 +0000
@@ -73,7 +73,7 @@
     <para>To activate the NSS modules, add <literal>myhostname</literal> to the line starting with
     <literal>hosts:</literal> in <filename>/etc/nsswitch.conf</filename>.</para>
 
-    <para>It is recommended to place <literal>myhostname</literal> after <literal>file</literal> and before <literal>dns</literal>.
+    <para>It is recommended to place <literal>myhostname</literal> after <literal>files</literal> and before <literal>dns</literal>.
     This resolves well-known hostnames like <literal>localhost</literal>
     and the machine hostnames locally. It is consistent with the behaviour
     of <command>nss-resolve</command>, and still allows overriding via
diff -Nru systemd-252.33/man/org.freedesktop.locale1.xml systemd-252.36/man/org.freedesktop.locale1.xml
--- systemd-252.33/man/org.freedesktop.locale1.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.locale1.xml	2025-03-06 11:43:10.000000000 +0000
@@ -131,7 +131,7 @@
       <title>Signals</title>
 
       <para>Whenever the system locale or keymap is changed via the daemon,
-      <function>PropertyChanged</function> signals are sent out to which clients can subscribe.</para>
+      <function>PropertyChanged</function> signals are sent out to clients which have subscribed.</para>
     </refsect2>
 
     <refsect2>
diff -Nru systemd-252.33/man/org.freedesktop.login1.xml systemd-252.36/man/org.freedesktop.login1.xml
--- systemd-252.33/man/org.freedesktop.login1.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.login1.xml	2025-03-06 11:43:10.000000000 +0000
@@ -664,7 +664,7 @@
       <title>Signals</title>
 
       <para>Whenever the inhibition state or idle hint changes, <function>PropertyChanged</function>
-      signals are sent out to which clients can subscribe.</para>
+      signals are sent out to clients which have subscribed.</para>
 
       <para>The <function>SessionNew</function>, <function>SessionRemoved</function>,
       <function>UserNew</function>, <function>UserRemoved</function>, <function>SeatNew</function>, and
@@ -894,8 +894,13 @@
 
       <para>Whenever <function>ActiveSession</function>, <function>Sessions</function>,
       <function>CanGraphical</function>, <function>CanTTY</function>,
-      or the idle state changes, <function>PropertyChanged</function> signals are sent out to which clients
-      can subscribe.</para>
+      or the idle state changes, <function>PropertyChanged</function> signals are sent out to clients which
+      have subscribed.</para>
+
+      <para>Signals are only emitted on objects referencing a specific seat ID, not on the
+      <literal>/org/freedesktop/login1/seat/self</literal> or
+      <literal>/org/freedesktop/login1/seat/auto</literal> convenience objects, as they can only be
+      dereferenced relative to a method caller.</para>
     </refsect2>
 
     <refsect2>
@@ -1015,7 +1020,11 @@
       <title>Signals</title>
 
       <para>Whenever <varname>Sessions</varname> or the idle state changes,
-      <function>PropertyChanged</function> signals are sent out to which clients can subscribe.</para>
+      <function>PropertyChanged</function> signals are sent out to clients which have subscribed.</para>
+
+      <para>Signals are only emitted on objects referencing a specific UID, not on the
+      <literal>/org/freedesktop/login1/user/self</literal> convenience object, as <varname>self</varname>
+      can only be dereferenced relative to a method caller.</para>
     </refsect2>
 
     <refsect2>
@@ -1348,12 +1357,17 @@
       open file descriptor in the kernel (except for a limited set of device types).</para>
 
       <para>Whenever <function>Active</function> or the idle state changes,
-      <function>PropertyChanged</function> signals are sent out to which clients can subscribe.</para>
+      <function>PropertyChanged</function> signals are sent out to clients which have subscribed.</para>
 
       <para><function>Lock</function>/<function>Unlock</function> is sent when the session is asked to be
       screen-locked/unlocked. A session manager of the session should listen to this signal and act
       accordingly. This signal is sent out as a result of the <function>Lock()</function> and
       <function>Unlock()</function> methods, respectively.</para>
+
+      <para>Signals are only emitted on objects referencing a specific session ID, not on the
+      <literal>/org/freedesktop/login1/session/self</literal> or
+      <literal>/org/freedesktop/login1/session/auto</literal> convenience objects, as they can only be
+      dereferenced relative to a method caller.</para>
     </refsect2>
 
     <refsect2>
diff -Nru systemd-252.33/man/org.freedesktop.systemd1.xml systemd-252.36/man/org.freedesktop.systemd1.xml
--- systemd-252.33/man/org.freedesktop.systemd1.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.systemd1.xml	2025-03-06 11:43:10.000000000 +0000
@@ -4328,9 +4328,10 @@
       code. <literal>signal</literal> indicates that a service process exited with an uncaught
       signal. <literal>core-dump</literal> indicates that a service process exited uncleanly and dumped
       core. <literal>watchdog</literal> indicates that a service did not send out watchdog ping messages
-      often enough. <literal>start-limit</literal> indicates that a service has been started too frequently
-      in a specific time frame (as configured in <varname>StartLimitInterval</varname>,
-      <varname>StartLimitBurst</varname>).</para>
+      often enough. <literal>start-limit-hit</literal> indicates that a service has been started too
+      frequently in a specific time frame (as configured in <varname>StartLimitInterval</varname>,
+      <varname>StartLimitBurst</varname>). <literal>oom-kill</literal> indicates that a service was
+      terminated due to an out-of-memory (OOM) situation.</para>
 
       <para><varname>ControlGroup</varname> indicates the control group path the processes of this service
       unit are placed in.</para>
diff -Nru systemd-252.33/man/org.freedesktop.timedate1.xml systemd-252.36/man/org.freedesktop.timedate1.xml
--- systemd-252.33/man/org.freedesktop.timedate1.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/org.freedesktop.timedate1.xml	2025-03-06 11:43:10.000000000 +0000
@@ -148,7 +148,7 @@
       over D-Bus. Local clients can access the information directly.</para>
 
       <para>Whenever the <varname>Timezone</varname> and <varname>LocalRTC</varname> settings are changed via
-      the daemon, <function>PropertyChanged</function> signals are sent out to which clients can subscribe.
+      the daemon, <function>PropertyChanged</function> signals are sent out to clients which have subscribed.
       </para>
 
       <para>Note that this service will not inform you about system time changes. Use
diff -Nru systemd-252.33/man/sd_bus_add_object.xml systemd-252.36/man/sd_bus_add_object.xml
--- systemd-252.33/man/sd_bus_add_object.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/sd_bus_add_object.xml	2025-03-06 11:43:10.000000000 +0000
@@ -593,6 +593,9 @@
           <constant>org.freedesktop.systemd1.Privileged</constant> annotation with value
           <literal>true</literal> will be shown in introspection data.</para>
 
+          <para><constant>SD_BUS_VTABLE_UNPRIVILEGED</constant> may not be applied to read-only properties,
+          but read access (to both read-only and writable properties) is always unrestricted.</para>
+
           <para>Note that this page describes checks implemented in the D-Bus client. The D-Bus server has an
           additional policy that may permit or deny connections, see
           "CONFIGURATION FILE" in
diff -Nru systemd-252.33/man/systemd.network.xml systemd-252.36/man/systemd.network.xml
--- systemd-252.33/man/systemd.network.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/systemd.network.xml	2025-03-06 11:43:10.000000000 +0000
@@ -4778,7 +4778,7 @@
 EgressUntagged=42
 
 [BridgeVLAN]
-VLAN=100-200
+VLAN=100-299
 
 [BridgeVLAN]
 EgressUntagged=300-400</programlisting>
diff -Nru systemd-252.33/man/systemd-stub.xml systemd-252.36/man/systemd-stub.xml
--- systemd-252.33/man/systemd-stub.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/systemd-stub.xml	2025-03-06 11:43:10.000000000 +0000
@@ -164,6 +164,15 @@
     measure it as a whole to TPM PCR 4, covering all embedded resources, such as the stub code itself, the
     core kernel, the embedded initrd and kernel command line (see above for a full list).</para>
 
+    <para>Also note that when <command>systemd-stub</command> measures a PE section, it will measure the
+    amount of bytes that the section takes up in memory (<varname>VirtualSize</varname>) and not the amount
+    of bytes that the section takes up on disk (<varname>SizeOfRawData</varname>). This means that if the
+    size in memory is larger than the size on disk, <command>systemd-stub</command> will end up measuring
+    extra zeroes. To avoid this from happening, it is recommended to make sure that the size in memory of
+    each section that is measured by <command>systemd-stub</command> is always smaller than or equal to the
+    size on disk. <command>ukify</command> automatically makes sure this is the case when building UKIs or
+    addons.</para>
+
     <para>Also note that the Linux kernel will measure all initrds it receives into TPM PCR 9. This means
     every type of initrd will be measured two or three times: the initrd embedded in the kernel image will be
     measured to PCR 4, PCR 9 and PCR 11; the initrd synthesized from credentials will be measured to both PCR
diff -Nru systemd-252.33/man/systemd.unit.xml systemd-252.36/man/systemd.unit.xml
--- systemd-252.33/man/systemd.unit.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/systemd.unit.xml	2025-03-06 11:43:10.000000000 +0000
@@ -1723,6 +1723,8 @@
           <literal>&lt;&gt;</literal>, <literal>&gt;=</literal>, <literal>&gt;</literal>), and shell-style
           wildcard comparisons (<literal>*</literal>, <literal>?</literal>, <literal>[]</literal>) are
           supported with the <literal>$=</literal> (match) and <literal>!$=</literal> (non-match).</para>
+
+          <para>If the given key is not found in the file, the match is done against an empty value.</para>
           </listitem>
         </varlistentry>
 
diff -Nru systemd-252.33/man/sysupdate.d.xml systemd-252.36/man/sysupdate.d.xml
--- systemd-252.33/man/sysupdate.d.xml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/man/sysupdate.d.xml	2025-03-06 11:43:10.000000000 +0000
@@ -79,7 +79,7 @@
       UUID of 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5 (i.e. the partition type for Verity integrity information
       for x86-64 root file systems).</para></listitem>
 
-      <listitem><para>Finally, a file <literal>https://download.example.com/foobarOS_47.efi.xz</literal> (a
+      <listitem><para>Finally, a file <literal>https://download.example.com/foobarOS_47.efi</literal> (a
       unified kernel, as per <ulink url="https://systemd.io/BOOT_LOADER_SPECIFICATION";>Boot Loader
       Specification</ulink> Type #2) should be downloaded, decompressed and written to the ESP file system,
       i.e. to <filename>EFI/Linux/foobarOS_47.efi</filename> in the ESP.</para></listitem>
@@ -97,7 +97,7 @@
       → a local, previously empty GPT partition of type 2c7357ed-ebd2-46d9-aec1-23d437ec2bf5, with the label to be
       set to <literal>foobarOS_@v_verity</literal>.</para></listitem>
 
-      <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.efi.xz</literal>
+      <listitem><para>A transfer of a file <literal>https://download.example.com/foobarOS_@v.efi</literal>
       → a local file <filename>/efi/EFI/Linux/foobarOS_@v.efi</filename>.</para></listitem>
     </orderedlist>
 
@@ -815,7 +815,7 @@
 [Source]
 Type=url-file
 Path=https://download.example.com/
-MatchPattern=foobarOS_@v.efi.xz
+MatchPattern=foobarOS_@v.efi
 
 [Target]
 Type=regular-file
@@ -823,7 +823,7 @@
 MatchPattern=foobarOS_@v+@l-@d.efi \
              foobarOS_@v+@l.efi \
              foobarOS_@v.efi
-Mode=0444
+Mode=0644
 TriesLeft=3
 TriesDone=0
 InstancesMax=2</programlisting></para>
@@ -843,7 +843,7 @@
           <listitem><para><filename>SHA256SUMS.gpg</filename> – The detached cryptographic signature for the manifest file</para></listitem>
           <listitem><para><filename>foobarOS_7_8b8186b1-2b4e-4eb6-ad39-8d4d18d2a8fb.verity.xz</filename> – The Verity image for version 7</para></listitem>
           <listitem><para><filename>foobarOS_7_f4d1234f-3ebf-47c4-b31d-4052982f9a2f.root.xz</filename> – The root file system image for version 7</para></listitem>
-          <listitem><para><filename>foobarOS_7_efi.xz</filename> – The unified kernel image for version 7</para></listitem>
+          <listitem><para><filename>foobarOS_7.efi</filename> – The unified kernel image for version 7</para></listitem>
         </itemizedlist>
 
         <para>For each new OS release a new set of the latter three files would be added, each time with an
diff -Nru systemd-252.33/meson.build systemd-252.36/meson.build
--- systemd-252.33/meson.build	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/meson.build	2025-03-06 11:43:10.000000000 +0000
@@ -876,13 +876,16 @@
 nobody_group = get_option('nobody-group')
 
 if not meson.is_cross_build()
-        getent_result = run_command('getent', 'passwd', '65534', check : false)
-        if getent_result.returncode() == 0
-                name = getent_result.stdout().split(':')[0]
-                if name != nobody_user
-                        warning('\n' +
-                                'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) +
-                                'Your build will result in an user table setup that is incompatible with the local system.')
+        find_getent_result = find_program('getent', required : false)
+        if find_getent_result.found()
+                getent_result = run_command('getent', 'passwd', '65534', check : false)
+                if getent_result.returncode() == 0
+                        name = getent_result.stdout().split(':')[0]
+                        if name != nobody_user
+                                warning('\n' +
+                                        'The local user with the UID 65534 does not match the configured user name "@0@" of the nobody user (its name is @1@).\n'.format(nobody_user, name) +
+                                        'Your build will result in an user table setup that is incompatible with the local system.')
+                        endif
                 endif
         endif
         id_result = run_command('id', '-u', nobody_user, check : false)
@@ -895,13 +898,15 @@
                 endif
         endif
 
-        getent_result = run_command('getent', 'group', '65534', check : false)
-        if getent_result.returncode() == 0
-                name = getent_result.stdout().split(':')[0]
-                if name != nobody_group
-                        warning('\n' +
-                                'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) +
-                                'Your build will result in an group table setup that is incompatible with the local system.')
+        if find_getent_result.found()
+                getent_result = run_command('getent', 'group', '65534', check : false)
+                if getent_result.returncode() == 0
+                        name = getent_result.stdout().split(':')[0]
+                        if name != nobody_group
+                                warning('\n' +
+                                        'The local group with the GID 65534 does not match the configured group name "@0@" of the nobody group (its name is @1@).\n'.format(nobody_group, name) +
+                                        'Your build will result in an group table setup that is incompatible with the local system.')
+                        endif
                 endif
         endif
         id_result = run_command('id', '-g', nobody_group, check : false)
diff -Nru systemd-252.33/mkosi.default.d/centos_epel/10-mkosi.centos_epel systemd-252.36/mkosi.default.d/centos_epel/10-mkosi.centos_epel
--- systemd-252.33/mkosi.default.d/centos_epel/10-mkosi.centos_epel	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/centos_epel/10-mkosi.centos_epel	2025-03-06 11:43:10.000000000 +0000
@@ -77,3 +77,8 @@
         pkgconfig(xkbcommon)
         python3dist(jinja2)
         python3dist(lxml)
+
+Environment=
+        # The kernel versions in CentOS Stream 9 doesn't support orphan_file, but later versions of
+        # mkfs.ext4 enabled it by default, so we disable it explicitly.
+        Environment=SYSTEMD_REPART_MKFS_OPTIONS_EXT4="-O ^orphan_file"
diff -Nru systemd-252.33/mkosi.default.d/debian/10-mkosi.debian systemd-252.36/mkosi.default.d/debian/10-mkosi.debian
--- systemd-252.33/mkosi.default.d/debian/10-mkosi.debian	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/debian/10-mkosi.debian	2025-03-06 11:43:10.000000000 +0000
@@ -18,7 +18,9 @@
         iproute2
         isc-dhcp-server
         libbpf1
+        libcryptsetup12
         libfido2-1
+        libgcrypt20
         libglib2.0-0
         libgnutls30
         libidn2-0
@@ -29,6 +31,7 @@
         libqrencode4
         libip4tc2
         libtss2-dev # Use the -dev package to avoid churn in updating version numbers
+        login
         netcat-openbsd
         polkitd
         procps
diff -Nru systemd-252.33/mkosi.default.d/opensuse/10-mkosi.opensuse systemd-252.36/mkosi.default.d/opensuse/10-mkosi.opensuse
--- systemd-252.33/mkosi.default.d/opensuse/10-mkosi.opensuse	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/opensuse/10-mkosi.opensuse	2025-03-06 11:43:10.000000000 +0000
@@ -26,6 +26,7 @@
         libqrencode4
         libseccomp2
         libxkbcommon0
+        libz1
         pam
         tpm2-0-tss
         vim
diff -Nru systemd-252.33/mkosi.default.d/ubuntu/10-mkosi.ubuntu systemd-252.36/mkosi.default.d/ubuntu/10-mkosi.ubuntu
--- systemd-252.33/mkosi.default.d/ubuntu/10-mkosi.ubuntu	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/mkosi.default.d/ubuntu/10-mkosi.ubuntu	2025-03-06 11:43:10.000000000 +0000
@@ -26,6 +26,7 @@
         libtss2-dev # Use the -dev package to avoid churn in updating version numbers
         linux-tools-common
         linux-tools-generic
+        login
         netcat-openbsd
         polkitd
         procps
diff -Nru systemd-252.33/rules.d/70-uaccess.rules.in systemd-252.36/rules.d/70-uaccess.rules.in
--- systemd-252.33/rules.d/70-uaccess.rules.in	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/rules.d/70-uaccess.rules.in	2025-03-06 11:43:10.000000000 +0000
@@ -97,6 +97,10 @@
 # This also allows accessing HID devices with the libusb backend of hidapi.
 SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess"
 
+# USB and Bluetooth controllable lights
+SUBSYSTEM=="hidraw", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess"
+SUBSYSTEM=="usb", ENV{ID_AV_LIGHTS}=="1", TAG+="uaccess"
+
 # Hardware wallets
 SUBSYSTEM=="usb", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
 SUBSYSTEM=="hidraw", ENV{ID_HARDWARE_WALLET}=="1", TAG+="uaccess"
diff -Nru systemd-252.33/.semaphore/semaphore.yml systemd-252.36/.semaphore/semaphore.yml
--- systemd-252.33/.semaphore/semaphore.yml	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/.semaphore/semaphore.yml	2025-03-06 11:43:10.000000000 +0000
@@ -15,7 +15,7 @@
     when: "true"
 
 execution_time_limit:
-  hours: 1
+  hours: 2
 
 blocks:
   - name: "Setup & test"
diff -Nru systemd-252.33/src/basic/efivars.c systemd-252.36/src/basic/efivars.c
--- systemd-252.33/src/basic/efivars.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/efivars.c	2025-03-06 11:43:10.000000000 +0000
@@ -96,6 +96,22 @@
                                 (void) usleep(EFI_RETRY_DELAY);
                 }
 
+                /* Unfortunately kernel reports EOF if there's an inconsistency between efivarfs var list
+                 * and what's actually stored in firmware, c.f. #34304. A zero size env var is not allowed in
+                 * efi and hence the variable doesn't really exist in the backing store as long as it is zero
+                 * sized, and the kernel calls this "uncommitted". Hence we translate EOF back to ENOENT here,
+                 * as with kernel behavior before
+                 * https://github.com/torvalds/linux/commit/3fab70c165795431f00ddf9be8b84ddd07bd1f8f
+                 *
+                 * If the kernel changes behaviour (to flush dentries on resume), we can drop
+                 * this at some point in the future. But note that the commit is 11
+                 * years old at this point so we'll need to deal with the current behaviour for
+                 * a long time.
+                 */
+                if (n == 0)
+                        return log_debug_errno(SYNTHETIC_ERRNO(ENOENT),
+                                               "EFI variable %s is uncommitted", p);
+
                 if (n != sizeof(a))
                         return log_debug_errno(SYNTHETIC_ERRNO(EIO),
                                                "Read %zi bytes from EFI variable %s, expected %zu.",  n, p, sizeof(a));
diff -Nru systemd-252.33/src/basic/linux/input-event-codes.h systemd-252.36/src/basic/linux/input-event-codes.h
--- systemd-252.33/src/basic/linux/input-event-codes.h	1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/src/basic/linux/input-event-codes.h	2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,980 @@
+/* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */
+/*
+ * Input event codes
+ *
+ *    *** IMPORTANT ***
+ * This file is not only included from C-code but also from devicetree source
+ * files. As such this file MUST only contain comments and defines.
+ *
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ * Copyright (c) 2015 Hans de Goede <hdegoede@redhat.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_EVENT_CODES_H
+#define _INPUT_EVENT_CODES_H
+
+/*
+ * Device properties and quirks
+ */
+
+#define INPUT_PROP_POINTER		0x00	/* needs a pointer */
+#define INPUT_PROP_DIRECT		0x01	/* direct input devices */
+#define INPUT_PROP_BUTTONPAD		0x02	/* has button(s) under pad */
+#define INPUT_PROP_SEMI_MT		0x03	/* touch rectangle only */
+#define INPUT_PROP_TOPBUTTONPAD		0x04	/* softbuttons at top of pad */
+#define INPUT_PROP_POINTING_STICK	0x05	/* is a pointing stick */
+#define INPUT_PROP_ACCELEROMETER	0x06	/* has accelerometer */
+
+#define INPUT_PROP_MAX			0x1f
+#define INPUT_PROP_CNT			(INPUT_PROP_MAX + 1)
+
+/*
+ * Event types
+ */
+
+#define EV_SYN			0x00
+#define EV_KEY			0x01
+#define EV_REL			0x02
+#define EV_ABS			0x03
+#define EV_MSC			0x04
+#define EV_SW			0x05
+#define EV_LED			0x11
+#define EV_SND			0x12
+#define EV_REP			0x14
+#define EV_FF			0x15
+#define EV_PWR			0x16
+#define EV_FF_STATUS		0x17
+#define EV_MAX			0x1f
+#define EV_CNT			(EV_MAX+1)
+
+/*
+ * Synchronization events.
+ */
+
+#define SYN_REPORT		0
+#define SYN_CONFIG		1
+#define SYN_MT_REPORT		2
+#define SYN_DROPPED		3
+#define SYN_MAX			0xf
+#define SYN_CNT			(SYN_MAX+1)
+
+/*
+ * Keys and buttons
+ *
+ * Most of the keys/buttons are modeled after USB HUT 1.12
+ * (see http://www.usb.org/developers/hidpage).
+ * Abbreviations in the comments:
+ * AC - Application Control
+ * AL - Application Launch Button
+ * SC - System Control
+ */
+
+#define KEY_RESERVED		0
+#define KEY_ESC			1
+#define KEY_1			2
+#define KEY_2			3
+#define KEY_3			4
+#define KEY_4			5
+#define KEY_5			6
+#define KEY_6			7
+#define KEY_7			8
+#define KEY_8			9
+#define KEY_9			10
+#define KEY_0			11
+#define KEY_MINUS		12
+#define KEY_EQUAL		13
+#define KEY_BACKSPACE		14
+#define KEY_TAB			15
+#define KEY_Q			16
+#define KEY_W			17
+#define KEY_E			18
+#define KEY_R			19
+#define KEY_T			20
+#define KEY_Y			21
+#define KEY_U			22
+#define KEY_I			23
+#define KEY_O			24
+#define KEY_P			25
+#define KEY_LEFTBRACE		26
+#define KEY_RIGHTBRACE		27
+#define KEY_ENTER		28
+#define KEY_LEFTCTRL		29
+#define KEY_A			30
+#define KEY_S			31
+#define KEY_D			32
+#define KEY_F			33
+#define KEY_G			34
+#define KEY_H			35
+#define KEY_J			36
+#define KEY_K			37
+#define KEY_L			38
+#define KEY_SEMICOLON		39
+#define KEY_APOSTROPHE		40
+#define KEY_GRAVE		41
+#define KEY_LEFTSHIFT		42
+#define KEY_BACKSLASH		43
+#define KEY_Z			44
+#define KEY_X			45
+#define KEY_C			46
+#define KEY_V			47
+#define KEY_B			48
+#define KEY_N			49
+#define KEY_M			50
+#define KEY_COMMA		51
+#define KEY_DOT			52
+#define KEY_SLASH		53
+#define KEY_RIGHTSHIFT		54
+#define KEY_KPASTERISK		55
+#define KEY_LEFTALT		56
+#define KEY_SPACE		57
+#define KEY_CAPSLOCK		58
+#define KEY_F1			59
+#define KEY_F2			60
+#define KEY_F3			61
+#define KEY_F4			62
+#define KEY_F5			63
+#define KEY_F6			64
+#define KEY_F7			65
+#define KEY_F8			66
+#define KEY_F9			67
+#define KEY_F10			68
+#define KEY_NUMLOCK		69
+#define KEY_SCROLLLOCK		70
+#define KEY_KP7			71
+#define KEY_KP8			72
+#define KEY_KP9			73
+#define KEY_KPMINUS		74
+#define KEY_KP4			75
+#define KEY_KP5			76
+#define KEY_KP6			77
+#define KEY_KPPLUS		78
+#define KEY_KP1			79
+#define KEY_KP2			80
+#define KEY_KP3			81
+#define KEY_KP0			82
+#define KEY_KPDOT		83
+
+#define KEY_ZENKAKUHANKAKU	85
+#define KEY_102ND		86
+#define KEY_F11			87
+#define KEY_F12			88
+#define KEY_RO			89
+#define KEY_KATAKANA		90
+#define KEY_HIRAGANA		91
+#define KEY_HENKAN		92
+#define KEY_KATAKANAHIRAGANA	93
+#define KEY_MUHENKAN		94
+#define KEY_KPJPCOMMA		95
+#define KEY_KPENTER		96
+#define KEY_RIGHTCTRL		97
+#define KEY_KPSLASH		98
+#define KEY_SYSRQ		99
+#define KEY_RIGHTALT		100
+#define KEY_LINEFEED		101
+#define KEY_HOME		102
+#define KEY_UP			103
+#define KEY_PAGEUP		104
+#define KEY_LEFT		105
+#define KEY_RIGHT		106
+#define KEY_END			107
+#define KEY_DOWN		108
+#define KEY_PAGEDOWN		109
+#define KEY_INSERT		110
+#define KEY_DELETE		111
+#define KEY_MACRO		112
+#define KEY_MUTE		113
+#define KEY_VOLUMEDOWN		114
+#define KEY_VOLUMEUP		115
+#define KEY_POWER		116	/* SC System Power Down */
+#define KEY_KPEQUAL		117
+#define KEY_KPPLUSMINUS		118
+#define KEY_PAUSE		119
+#define KEY_SCALE		120	/* AL Compiz Scale (Expose) */
+
+#define KEY_KPCOMMA		121
+#define KEY_HANGEUL		122
+#define KEY_HANGUEL		KEY_HANGEUL
+#define KEY_HANJA		123
+#define KEY_YEN			124
+#define KEY_LEFTMETA		125
+#define KEY_RIGHTMETA		126
+#define KEY_COMPOSE		127
+
+#define KEY_STOP		128	/* AC Stop */
+#define KEY_AGAIN		129
+#define KEY_PROPS		130	/* AC Properties */
+#define KEY_UNDO		131	/* AC Undo */
+#define KEY_FRONT		132
+#define KEY_COPY		133	/* AC Copy */
+#define KEY_OPEN		134	/* AC Open */
+#define KEY_PASTE		135	/* AC Paste */
+#define KEY_FIND		136	/* AC Search */
+#define KEY_CUT			137	/* AC Cut */
+#define KEY_HELP		138	/* AL Integrated Help Center */
+#define KEY_MENU		139	/* Menu (show menu) */
+#define KEY_CALC		140	/* AL Calculator */
+#define KEY_SETUP		141
+#define KEY_SLEEP		142	/* SC System Sleep */
+#define KEY_WAKEUP		143	/* System Wake Up */
+#define KEY_FILE		144	/* AL Local Machine Browser */
+#define KEY_SENDFILE		145
+#define KEY_DELETEFILE		146
+#define KEY_XFER		147
+#define KEY_PROG1		148
+#define KEY_PROG2		149
+#define KEY_WWW			150	/* AL Internet Browser */
+#define KEY_MSDOS		151
+#define KEY_COFFEE		152	/* AL Terminal Lock/Screensaver */
+#define KEY_SCREENLOCK		KEY_COFFEE
+#define KEY_ROTATE_DISPLAY	153	/* Display orientation for e.g. tablets */
+#define KEY_DIRECTION		KEY_ROTATE_DISPLAY
+#define KEY_CYCLEWINDOWS	154
+#define KEY_MAIL		155
+#define KEY_BOOKMARKS		156	/* AC Bookmarks */
+#define KEY_COMPUTER		157
+#define KEY_BACK		158	/* AC Back */
+#define KEY_FORWARD		159	/* AC Forward */
+#define KEY_CLOSECD		160
+#define KEY_EJECTCD		161
+#define KEY_EJECTCLOSECD	162
+#define KEY_NEXTSONG		163
+#define KEY_PLAYPAUSE		164
+#define KEY_PREVIOUSSONG	165
+#define KEY_STOPCD		166
+#define KEY_RECORD		167
+#define KEY_REWIND		168
+#define KEY_PHONE		169	/* Media Select Telephone */
+#define KEY_ISO			170
+#define KEY_CONFIG		171	/* AL Consumer Control Configuration */
+#define KEY_HOMEPAGE		172	/* AC Home */
+#define KEY_REFRESH		173	/* AC Refresh */
+#define KEY_EXIT		174	/* AC Exit */
+#define KEY_MOVE		175
+#define KEY_EDIT		176
+#define KEY_SCROLLUP		177
+#define KEY_SCROLLDOWN		178
+#define KEY_KPLEFTPAREN		179
+#define KEY_KPRIGHTPAREN	180
+#define KEY_NEW			181	/* AC New */
+#define KEY_REDO		182	/* AC Redo/Repeat */
+
+#define KEY_F13			183
+#define KEY_F14			184
+#define KEY_F15			185
+#define KEY_F16			186
+#define KEY_F17			187
+#define KEY_F18			188
+#define KEY_F19			189
+#define KEY_F20			190
+#define KEY_F21			191
+#define KEY_F22			192
+#define KEY_F23			193
+#define KEY_F24			194
+
+#define KEY_PLAYCD		200
+#define KEY_PAUSECD		201
+#define KEY_PROG3		202
+#define KEY_PROG4		203
+#define KEY_ALL_APPLICATIONS	204	/* AC Desktop Show All Applications */
+#define KEY_DASHBOARD		KEY_ALL_APPLICATIONS
+#define KEY_SUSPEND		205
+#define KEY_CLOSE		206	/* AC Close */
+#define KEY_PLAY		207
+#define KEY_FASTFORWARD		208
+#define KEY_BASSBOOST		209
+#define KEY_PRINT		210	/* AC Print */
+#define KEY_HP			211
+#define KEY_CAMERA		212
+#define KEY_SOUND		213
+#define KEY_QUESTION		214
+#define KEY_EMAIL		215
+#define KEY_CHAT		216
+#define KEY_SEARCH		217
+#define KEY_CONNECT		218
+#define KEY_FINANCE		219	/* AL Checkbook/Finance */
+#define KEY_SPORT		220
+#define KEY_SHOP		221
+#define KEY_ALTERASE		222
+#define KEY_CANCEL		223	/* AC Cancel */
+#define KEY_BRIGHTNESSDOWN	224
+#define KEY_BRIGHTNESSUP	225
+#define KEY_MEDIA		226
+
+#define KEY_SWITCHVIDEOMODE	227	/* Cycle between available video
+					   outputs (Monitor/LCD/TV-out/etc) */
+#define KEY_KBDILLUMTOGGLE	228
+#define KEY_KBDILLUMDOWN	229
+#define KEY_KBDILLUMUP		230
+
+#define KEY_SEND		231	/* AC Send */
+#define KEY_REPLY		232	/* AC Reply */
+#define KEY_FORWARDMAIL		233	/* AC Forward Msg */
+#define KEY_SAVE		234	/* AC Save */
+#define KEY_DOCUMENTS		235
+
+#define KEY_BATTERY		236
+
+#define KEY_BLUETOOTH		237
+#define KEY_WLAN		238
+#define KEY_UWB			239
+
+#define KEY_UNKNOWN		240
+
+#define KEY_VIDEO_NEXT		241	/* drive next video source */
+#define KEY_VIDEO_PREV		242	/* drive previous video source */
+#define KEY_BRIGHTNESS_CYCLE	243	/* brightness up, after max is min */
+#define KEY_BRIGHTNESS_AUTO	244	/* Set Auto Brightness: manual
+					  brightness control is off,
+					  rely on ambient */
+#define KEY_BRIGHTNESS_ZERO	KEY_BRIGHTNESS_AUTO
+#define KEY_DISPLAY_OFF		245	/* display device to off state */
+
+#define KEY_WWAN		246	/* Wireless WAN (LTE, UMTS, GSM, etc.) */
+#define KEY_WIMAX		KEY_WWAN
+#define KEY_RFKILL		247	/* Key that controls all radios */
+
+#define KEY_MICMUTE		248	/* Mute / unmute the microphone */
+
+/* Code 255 is reserved for special needs of AT keyboard driver */
+
+#define BTN_MISC		0x100
+#define BTN_0			0x100
+#define BTN_1			0x101
+#define BTN_2			0x102
+#define BTN_3			0x103
+#define BTN_4			0x104
+#define BTN_5			0x105
+#define BTN_6			0x106
+#define BTN_7			0x107
+#define BTN_8			0x108
+#define BTN_9			0x109
+
+#define BTN_MOUSE		0x110
+#define BTN_LEFT		0x110
+#define BTN_RIGHT		0x111
+#define BTN_MIDDLE		0x112
+#define BTN_SIDE		0x113
+#define BTN_EXTRA		0x114
+#define BTN_FORWARD		0x115
+#define BTN_BACK		0x116
+#define BTN_TASK		0x117
+
+#define BTN_JOYSTICK		0x120
+#define BTN_TRIGGER		0x120
+#define BTN_THUMB		0x121
+#define BTN_THUMB2		0x122
+#define BTN_TOP			0x123
+#define BTN_TOP2		0x124
+#define BTN_PINKIE		0x125
+#define BTN_BASE		0x126
+#define BTN_BASE2		0x127
+#define BTN_BASE3		0x128
+#define BTN_BASE4		0x129
+#define BTN_BASE5		0x12a
+#define BTN_BASE6		0x12b
+#define BTN_DEAD		0x12f
+
+#define BTN_GAMEPAD		0x130
+#define BTN_SOUTH		0x130
+#define BTN_A			BTN_SOUTH
+#define BTN_EAST		0x131
+#define BTN_B			BTN_EAST
+#define BTN_C			0x132
+#define BTN_NORTH		0x133
+#define BTN_X			BTN_NORTH
+#define BTN_WEST		0x134
+#define BTN_Y			BTN_WEST
+#define BTN_Z			0x135
+#define BTN_TL			0x136
+#define BTN_TR			0x137
+#define BTN_TL2			0x138
+#define BTN_TR2			0x139
+#define BTN_SELECT		0x13a
+#define BTN_START		0x13b
+#define BTN_MODE		0x13c
+#define BTN_THUMBL		0x13d
+#define BTN_THUMBR		0x13e
+
+#define BTN_DIGI		0x140
+#define BTN_TOOL_PEN		0x140
+#define BTN_TOOL_RUBBER		0x141
+#define BTN_TOOL_BRUSH		0x142
+#define BTN_TOOL_PENCIL		0x143
+#define BTN_TOOL_AIRBRUSH	0x144
+#define BTN_TOOL_FINGER		0x145
+#define BTN_TOOL_MOUSE		0x146
+#define BTN_TOOL_LENS		0x147
+#define BTN_TOOL_QUINTTAP	0x148	/* Five fingers on trackpad */
+#define BTN_STYLUS3		0x149
+#define BTN_TOUCH		0x14a
+#define BTN_STYLUS		0x14b
+#define BTN_STYLUS2		0x14c
+#define BTN_TOOL_DOUBLETAP	0x14d
+#define BTN_TOOL_TRIPLETAP	0x14e
+#define BTN_TOOL_QUADTAP	0x14f	/* Four fingers on trackpad */
+
+#define BTN_WHEEL		0x150
+#define BTN_GEAR_DOWN		0x150
+#define BTN_GEAR_UP		0x151
+
+#define KEY_OK			0x160
+#define KEY_SELECT		0x161
+#define KEY_GOTO		0x162
+#define KEY_CLEAR		0x163
+#define KEY_POWER2		0x164
+#define KEY_OPTION		0x165
+#define KEY_INFO		0x166	/* AL OEM Features/Tips/Tutorial */
+#define KEY_TIME		0x167
+#define KEY_VENDOR		0x168
+#define KEY_ARCHIVE		0x169
+#define KEY_PROGRAM		0x16a	/* Media Select Program Guide */
+#define KEY_CHANNEL		0x16b
+#define KEY_FAVORITES		0x16c
+#define KEY_EPG			0x16d
+#define KEY_PVR			0x16e	/* Media Select Home */
+#define KEY_MHP			0x16f
+#define KEY_LANGUAGE		0x170
+#define KEY_TITLE		0x171
+#define KEY_SUBTITLE		0x172
+#define KEY_ANGLE		0x173
+#define KEY_FULL_SCREEN		0x174	/* AC View Toggle */
+#define KEY_ZOOM		KEY_FULL_SCREEN
+#define KEY_MODE		0x175
+#define KEY_KEYBOARD		0x176
+#define KEY_ASPECT_RATIO	0x177	/* HUTRR37: Aspect */
+#define KEY_SCREEN		KEY_ASPECT_RATIO
+#define KEY_PC			0x178	/* Media Select Computer */
+#define KEY_TV			0x179	/* Media Select TV */
+#define KEY_TV2			0x17a	/* Media Select Cable */
+#define KEY_VCR			0x17b	/* Media Select VCR */
+#define KEY_VCR2		0x17c	/* VCR Plus */
+#define KEY_SAT			0x17d	/* Media Select Satellite */
+#define KEY_SAT2		0x17e
+#define KEY_CD			0x17f	/* Media Select CD */
+#define KEY_TAPE		0x180	/* Media Select Tape */
+#define KEY_RADIO		0x181
+#define KEY_TUNER		0x182	/* Media Select Tuner */
+#define KEY_PLAYER		0x183
+#define KEY_TEXT		0x184
+#define KEY_DVD			0x185	/* Media Select DVD */
+#define KEY_AUX			0x186
+#define KEY_MP3			0x187
+#define KEY_AUDIO		0x188	/* AL Audio Browser */
+#define KEY_VIDEO		0x189	/* AL Movie Browser */
+#define KEY_DIRECTORY		0x18a
+#define KEY_LIST		0x18b
+#define KEY_MEMO		0x18c	/* Media Select Messages */
+#define KEY_CALENDAR		0x18d
+#define KEY_RED			0x18e
+#define KEY_GREEN		0x18f
+#define KEY_YELLOW		0x190
+#define KEY_BLUE		0x191
+#define KEY_CHANNELUP		0x192	/* Channel Increment */
+#define KEY_CHANNELDOWN		0x193	/* Channel Decrement */
+#define KEY_FIRST		0x194
+#define KEY_LAST		0x195	/* Recall Last */
+#define KEY_AB			0x196
+#define KEY_NEXT		0x197
+#define KEY_RESTART		0x198
+#define KEY_SLOW		0x199
+#define KEY_SHUFFLE		0x19a
+#define KEY_BREAK		0x19b
+#define KEY_PREVIOUS		0x19c
+#define KEY_DIGITS		0x19d
+#define KEY_TEEN		0x19e
+#define KEY_TWEN		0x19f
+#define KEY_VIDEOPHONE		0x1a0	/* Media Select Video Phone */
+#define KEY_GAMES		0x1a1	/* Media Select Games */
+#define KEY_ZOOMIN		0x1a2	/* AC Zoom In */
+#define KEY_ZOOMOUT		0x1a3	/* AC Zoom Out */
+#define KEY_ZOOMRESET		0x1a4	/* AC Zoom */
+#define KEY_WORDPROCESSOR	0x1a5	/* AL Word Processor */
+#define KEY_EDITOR		0x1a6	/* AL Text Editor */
+#define KEY_SPREADSHEET		0x1a7	/* AL Spreadsheet */
+#define KEY_GRAPHICSEDITOR	0x1a8	/* AL Graphics Editor */
+#define KEY_PRESENTATION	0x1a9	/* AL Presentation App */
+#define KEY_DATABASE		0x1aa	/* AL Database App */
+#define KEY_NEWS		0x1ab	/* AL Newsreader */
+#define KEY_VOICEMAIL		0x1ac	/* AL Voicemail */
+#define KEY_ADDRESSBOOK		0x1ad	/* AL Contacts/Address Book */
+#define KEY_MESSENGER		0x1ae	/* AL Instant Messaging */
+#define KEY_DISPLAYTOGGLE	0x1af	/* Turn display (LCD) on and off */
+#define KEY_BRIGHTNESS_TOGGLE	KEY_DISPLAYTOGGLE
+#define KEY_SPELLCHECK		0x1b0   /* AL Spell Check */
+#define KEY_LOGOFF		0x1b1   /* AL Logoff */
+
+#define KEY_DOLLAR		0x1b2
+#define KEY_EURO		0x1b3
+
+#define KEY_FRAMEBACK		0x1b4	/* Consumer - transport controls */
+#define KEY_FRAMEFORWARD	0x1b5
+#define KEY_CONTEXT_MENU	0x1b6	/* GenDesc - system context menu */
+#define KEY_MEDIA_REPEAT	0x1b7	/* Consumer - transport control */
+#define KEY_10CHANNELSUP	0x1b8	/* 10 channels up (10+) */
+#define KEY_10CHANNELSDOWN	0x1b9	/* 10 channels down (10-) */
+#define KEY_IMAGES		0x1ba	/* AL Image Browser */
+#define KEY_NOTIFICATION_CENTER	0x1bc	/* Show/hide the notification center */
+#define KEY_PICKUP_PHONE	0x1bd	/* Answer incoming call */
+#define KEY_HANGUP_PHONE	0x1be	/* Decline incoming call */
+
+#define KEY_DEL_EOL		0x1c0
+#define KEY_DEL_EOS		0x1c1
+#define KEY_INS_LINE		0x1c2
+#define KEY_DEL_LINE		0x1c3
+
+#define KEY_FN			0x1d0
+#define KEY_FN_ESC		0x1d1
+#define KEY_FN_F1		0x1d2
+#define KEY_FN_F2		0x1d3
+#define KEY_FN_F3		0x1d4
+#define KEY_FN_F4		0x1d5
+#define KEY_FN_F5		0x1d6
+#define KEY_FN_F6		0x1d7
+#define KEY_FN_F7		0x1d8
+#define KEY_FN_F8		0x1d9
+#define KEY_FN_F9		0x1da
+#define KEY_FN_F10		0x1db
+#define KEY_FN_F11		0x1dc
+#define KEY_FN_F12		0x1dd
+#define KEY_FN_1		0x1de
+#define KEY_FN_2		0x1df
+#define KEY_FN_D		0x1e0
+#define KEY_FN_E		0x1e1
+#define KEY_FN_F		0x1e2
+#define KEY_FN_S		0x1e3
+#define KEY_FN_B		0x1e4
+#define KEY_FN_RIGHT_SHIFT	0x1e5
+
+#define KEY_BRL_DOT1		0x1f1
+#define KEY_BRL_DOT2		0x1f2
+#define KEY_BRL_DOT3		0x1f3
+#define KEY_BRL_DOT4		0x1f4
+#define KEY_BRL_DOT5		0x1f5
+#define KEY_BRL_DOT6		0x1f6
+#define KEY_BRL_DOT7		0x1f7
+#define KEY_BRL_DOT8		0x1f8
+#define KEY_BRL_DOT9		0x1f9
+#define KEY_BRL_DOT10		0x1fa
+
+#define KEY_NUMERIC_0		0x200	/* used by phones, remote controls, */
+#define KEY_NUMERIC_1		0x201	/* and other keypads */
+#define KEY_NUMERIC_2		0x202
+#define KEY_NUMERIC_3		0x203
+#define KEY_NUMERIC_4		0x204
+#define KEY_NUMERIC_5		0x205
+#define KEY_NUMERIC_6		0x206
+#define KEY_NUMERIC_7		0x207
+#define KEY_NUMERIC_8		0x208
+#define KEY_NUMERIC_9		0x209
+#define KEY_NUMERIC_STAR	0x20a
+#define KEY_NUMERIC_POUND	0x20b
+#define KEY_NUMERIC_A		0x20c	/* Phone key A - HUT Telephony 0xb9 */
+#define KEY_NUMERIC_B		0x20d
+#define KEY_NUMERIC_C		0x20e
+#define KEY_NUMERIC_D		0x20f
+
+#define KEY_CAMERA_FOCUS	0x210
+#define KEY_WPS_BUTTON		0x211	/* WiFi Protected Setup key */
+
+#define KEY_TOUCHPAD_TOGGLE	0x212	/* Request switch touchpad on or off */
+#define KEY_TOUCHPAD_ON		0x213
+#define KEY_TOUCHPAD_OFF	0x214
+
+#define KEY_CAMERA_ZOOMIN	0x215
+#define KEY_CAMERA_ZOOMOUT	0x216
+#define KEY_CAMERA_UP		0x217
+#define KEY_CAMERA_DOWN		0x218
+#define KEY_CAMERA_LEFT		0x219
+#define KEY_CAMERA_RIGHT	0x21a
+
+#define KEY_ATTENDANT_ON	0x21b
+#define KEY_ATTENDANT_OFF	0x21c
+#define KEY_ATTENDANT_TOGGLE	0x21d	/* Attendant call on or off */
+#define KEY_LIGHTS_TOGGLE	0x21e	/* Reading light on or off */
+
+#define BTN_DPAD_UP		0x220
+#define BTN_DPAD_DOWN		0x221
+#define BTN_DPAD_LEFT		0x222
+#define BTN_DPAD_RIGHT		0x223
+
+#define KEY_ALS_TOGGLE		0x230	/* Ambient light sensor */
+#define KEY_ROTATE_LOCK_TOGGLE	0x231	/* Display rotation lock */
+#define KEY_REFRESH_RATE_TOGGLE	0x232	/* Display refresh rate toggle */
+
+#define KEY_BUTTONCONFIG		0x240	/* AL Button Configuration */
+#define KEY_TASKMANAGER		0x241	/* AL Task/Project Manager */
+#define KEY_JOURNAL		0x242	/* AL Log/Journal/Timecard */
+#define KEY_CONTROLPANEL		0x243	/* AL Control Panel */
+#define KEY_APPSELECT		0x244	/* AL Select Task/Application */
+#define KEY_SCREENSAVER		0x245	/* AL Screen Saver */
+#define KEY_VOICECOMMAND		0x246	/* Listening Voice Command */
+#define KEY_ASSISTANT		0x247	/* AL Context-aware desktop assistant */
+#define KEY_KBD_LAYOUT_NEXT	0x248	/* AC Next Keyboard Layout Select */
+#define KEY_EMOJI_PICKER	0x249	/* Show/hide emoji picker (HUTRR101) */
+#define KEY_DICTATE		0x24a	/* Start or Stop Voice Dictation Session (HUTRR99) */
+#define KEY_CAMERA_ACCESS_ENABLE	0x24b	/* Enables programmatic access to camera devices. (HUTRR72) */
+#define KEY_CAMERA_ACCESS_DISABLE	0x24c	/* Disables programmatic access to camera devices. (HUTRR72) */
+#define KEY_CAMERA_ACCESS_TOGGLE	0x24d	/* Toggles the current state of the camera access control. (HUTRR72) */
+#define KEY_ACCESSIBILITY		0x24e	/* Toggles the system bound accessibility UI/command (HUTRR116) */
+#define KEY_DO_NOT_DISTURB		0x24f	/* Toggles the system-wide "Do Not Disturb" control (HUTRR94)*/
+
+#define KEY_BRIGHTNESS_MIN		0x250	/* Set Brightness to Minimum */
+#define KEY_BRIGHTNESS_MAX		0x251	/* Set Brightness to Maximum */
+
+#define KEY_KBDINPUTASSIST_PREV		0x260
+#define KEY_KBDINPUTASSIST_NEXT		0x261
+#define KEY_KBDINPUTASSIST_PREVGROUP		0x262
+#define KEY_KBDINPUTASSIST_NEXTGROUP		0x263
+#define KEY_KBDINPUTASSIST_ACCEPT		0x264
+#define KEY_KBDINPUTASSIST_CANCEL		0x265
+
+/* Diagonal movement keys */
+#define KEY_RIGHT_UP			0x266
+#define KEY_RIGHT_DOWN			0x267
+#define KEY_LEFT_UP			0x268
+#define KEY_LEFT_DOWN			0x269
+
+#define KEY_ROOT_MENU			0x26a /* Show Device's Root Menu */
+/* Show Top Menu of the Media (e.g. DVD) */
+#define KEY_MEDIA_TOP_MENU		0x26b
+#define KEY_NUMERIC_11			0x26c
+#define KEY_NUMERIC_12			0x26d
+/*
+ * Toggle Audio Description: refers to an audio service that helps blind and
+ * visually impaired consumers understand the action in a program. Note: in
+ * some countries this is referred to as "Video Description".
+ */
+#define KEY_AUDIO_DESC			0x26e
+#define KEY_3D_MODE			0x26f
+#define KEY_NEXT_FAVORITE		0x270
+#define KEY_STOP_RECORD			0x271
+#define KEY_PAUSE_RECORD		0x272
+#define KEY_VOD				0x273 /* Video on Demand */
+#define KEY_UNMUTE			0x274
+#define KEY_FASTREVERSE			0x275
+#define KEY_SLOWREVERSE			0x276
+/*
+ * Control a data application associated with the currently viewed channel,
+ * e.g. teletext or data broadcast application (MHEG, MHP, HbbTV, etc.)
+ */
+#define KEY_DATA			0x277
+#define KEY_ONSCREEN_KEYBOARD		0x278
+/* Electronic privacy screen control */
+#define KEY_PRIVACY_SCREEN_TOGGLE	0x279
+
+/* Select an area of screen to be copied */
+#define KEY_SELECTIVE_SCREENSHOT	0x27a
+
+/* Move the focus to the next or previous user controllable element within a UI container */
+#define KEY_NEXT_ELEMENT               0x27b
+#define KEY_PREVIOUS_ELEMENT           0x27c
+
+/* Toggle Autopilot engagement */
+#define KEY_AUTOPILOT_ENGAGE_TOGGLE    0x27d
+
+/* Shortcut Keys */
+#define KEY_MARK_WAYPOINT              0x27e
+#define KEY_SOS                                0x27f
+#define KEY_NAV_CHART                  0x280
+#define KEY_FISHING_CHART              0x281
+#define KEY_SINGLE_RANGE_RADAR         0x282
+#define KEY_DUAL_RANGE_RADAR           0x283
+#define KEY_RADAR_OVERLAY              0x284
+#define KEY_TRADITIONAL_SONAR          0x285
+#define KEY_CLEARVU_SONAR              0x286
+#define KEY_SIDEVU_SONAR               0x287
+#define KEY_NAV_INFO                   0x288
+#define KEY_BRIGHTNESS_MENU            0x289
+
+/*
+ * Some keyboards have keys which do not have a defined meaning, these keys
+ * are intended to be programmed / bound to macros by the user. For most
+ * keyboards with these macro-keys the key-sequence to inject, or action to
+ * take, is all handled by software on the host side. So from the kernel's
+ * point of view these are just normal keys.
+ *
+ * The KEY_MACRO# codes below are intended for such keys, which may be labeled
+ * e.g. G1-G18, or S1 - S30. The KEY_MACRO# codes MUST NOT be used for keys
+ * where the marking on the key does indicate a defined meaning / purpose.
+ *
+ * The KEY_MACRO# codes MUST also NOT be used as fallback for when no existing
+ * KEY_FOO define matches the marking / purpose. In this case a new KEY_FOO
+ * define MUST be added.
+ */
+#define KEY_MACRO1			0x290
+#define KEY_MACRO2			0x291
+#define KEY_MACRO3			0x292
+#define KEY_MACRO4			0x293
+#define KEY_MACRO5			0x294
+#define KEY_MACRO6			0x295
+#define KEY_MACRO7			0x296
+#define KEY_MACRO8			0x297
+#define KEY_MACRO9			0x298
+#define KEY_MACRO10			0x299
+#define KEY_MACRO11			0x29a
+#define KEY_MACRO12			0x29b
+#define KEY_MACRO13			0x29c
+#define KEY_MACRO14			0x29d
+#define KEY_MACRO15			0x29e
+#define KEY_MACRO16			0x29f
+#define KEY_MACRO17			0x2a0
+#define KEY_MACRO18			0x2a1
+#define KEY_MACRO19			0x2a2
+#define KEY_MACRO20			0x2a3
+#define KEY_MACRO21			0x2a4
+#define KEY_MACRO22			0x2a5
+#define KEY_MACRO23			0x2a6
+#define KEY_MACRO24			0x2a7
+#define KEY_MACRO25			0x2a8
+#define KEY_MACRO26			0x2a9
+#define KEY_MACRO27			0x2aa
+#define KEY_MACRO28			0x2ab
+#define KEY_MACRO29			0x2ac
+#define KEY_MACRO30			0x2ad
+
+/*
+ * Some keyboards with the macro-keys described above have some extra keys
+ * for controlling the host-side software responsible for the macro handling:
+ * -A macro recording start/stop key. Note that not all keyboards which emit
+ *  KEY_MACRO_RECORD_START will also emit KEY_MACRO_RECORD_STOP if
+ *  KEY_MACRO_RECORD_STOP is not advertised, then KEY_MACRO_RECORD_START
+ *  should be interpreted as a recording start/stop toggle;
+ * -Keys for switching between different macro (pre)sets, either a key for
+ *  cycling through the configured presets or keys to directly select a preset.
+ */
+#define KEY_MACRO_RECORD_START		0x2b0
+#define KEY_MACRO_RECORD_STOP		0x2b1
+#define KEY_MACRO_PRESET_CYCLE		0x2b2
+#define KEY_MACRO_PRESET1		0x2b3
+#define KEY_MACRO_PRESET2		0x2b4
+#define KEY_MACRO_PRESET3		0x2b5
+
+/*
+ * Some keyboards have a buildin LCD panel where the contents are controlled
+ * by the host. Often these have a number of keys directly below the LCD
+ * intended for controlling a menu shown on the LCD. These keys often don't
+ * have any labeling so we just name them KEY_KBD_LCD_MENU#
+ */
+#define KEY_KBD_LCD_MENU1		0x2b8
+#define KEY_KBD_LCD_MENU2		0x2b9
+#define KEY_KBD_LCD_MENU3		0x2ba
+#define KEY_KBD_LCD_MENU4		0x2bb
+#define KEY_KBD_LCD_MENU5		0x2bc
+
+#define BTN_TRIGGER_HAPPY		0x2c0
+#define BTN_TRIGGER_HAPPY1		0x2c0
+#define BTN_TRIGGER_HAPPY2		0x2c1
+#define BTN_TRIGGER_HAPPY3		0x2c2
+#define BTN_TRIGGER_HAPPY4		0x2c3
+#define BTN_TRIGGER_HAPPY5		0x2c4
+#define BTN_TRIGGER_HAPPY6		0x2c5
+#define BTN_TRIGGER_HAPPY7		0x2c6
+#define BTN_TRIGGER_HAPPY8		0x2c7
+#define BTN_TRIGGER_HAPPY9		0x2c8
+#define BTN_TRIGGER_HAPPY10		0x2c9
+#define BTN_TRIGGER_HAPPY11		0x2ca
+#define BTN_TRIGGER_HAPPY12		0x2cb
+#define BTN_TRIGGER_HAPPY13		0x2cc
+#define BTN_TRIGGER_HAPPY14		0x2cd
+#define BTN_TRIGGER_HAPPY15		0x2ce
+#define BTN_TRIGGER_HAPPY16		0x2cf
+#define BTN_TRIGGER_HAPPY17		0x2d0
+#define BTN_TRIGGER_HAPPY18		0x2d1
+#define BTN_TRIGGER_HAPPY19		0x2d2
+#define BTN_TRIGGER_HAPPY20		0x2d3
+#define BTN_TRIGGER_HAPPY21		0x2d4
+#define BTN_TRIGGER_HAPPY22		0x2d5
+#define BTN_TRIGGER_HAPPY23		0x2d6
+#define BTN_TRIGGER_HAPPY24		0x2d7
+#define BTN_TRIGGER_HAPPY25		0x2d8
+#define BTN_TRIGGER_HAPPY26		0x2d9
+#define BTN_TRIGGER_HAPPY27		0x2da
+#define BTN_TRIGGER_HAPPY28		0x2db
+#define BTN_TRIGGER_HAPPY29		0x2dc
+#define BTN_TRIGGER_HAPPY30		0x2dd
+#define BTN_TRIGGER_HAPPY31		0x2de
+#define BTN_TRIGGER_HAPPY32		0x2df
+#define BTN_TRIGGER_HAPPY33		0x2e0
+#define BTN_TRIGGER_HAPPY34		0x2e1
+#define BTN_TRIGGER_HAPPY35		0x2e2
+#define BTN_TRIGGER_HAPPY36		0x2e3
+#define BTN_TRIGGER_HAPPY37		0x2e4
+#define BTN_TRIGGER_HAPPY38		0x2e5
+#define BTN_TRIGGER_HAPPY39		0x2e6
+#define BTN_TRIGGER_HAPPY40		0x2e7
+
+/* We avoid low common keys in module aliases so they don't get huge. */
+#define KEY_MIN_INTERESTING	KEY_MUTE
+#define KEY_MAX			0x2ff
+#define KEY_CNT			(KEY_MAX+1)
+
+/*
+ * Relative axes
+ */
+
+#define REL_X			0x00
+#define REL_Y			0x01
+#define REL_Z			0x02
+#define REL_RX			0x03
+#define REL_RY			0x04
+#define REL_RZ			0x05
+#define REL_HWHEEL		0x06
+#define REL_DIAL		0x07
+#define REL_WHEEL		0x08
+#define REL_MISC		0x09
+/*
+ * 0x0a is reserved and should not be used in input drivers.
+ * It was used by HID as REL_MISC+1 and userspace needs to detect if
+ * the next REL_* event is correct or is just REL_MISC + n.
+ * We define here REL_RESERVED so userspace can rely on it and detect
+ * the situation described above.
+ */
+#define REL_RESERVED		0x0a
+#define REL_WHEEL_HI_RES	0x0b
+#define REL_HWHEEL_HI_RES	0x0c
+#define REL_MAX			0x0f
+#define REL_CNT			(REL_MAX+1)
+
+/*
+ * Absolute axes
+ */
+
+#define ABS_X			0x00
+#define ABS_Y			0x01
+#define ABS_Z			0x02
+#define ABS_RX			0x03
+#define ABS_RY			0x04
+#define ABS_RZ			0x05
+#define ABS_THROTTLE		0x06
+#define ABS_RUDDER		0x07
+#define ABS_WHEEL		0x08
+#define ABS_GAS			0x09
+#define ABS_BRAKE		0x0a
+#define ABS_HAT0X		0x10
+#define ABS_HAT0Y		0x11
+#define ABS_HAT1X		0x12
+#define ABS_HAT1Y		0x13
+#define ABS_HAT2X		0x14
+#define ABS_HAT2Y		0x15
+#define ABS_HAT3X		0x16
+#define ABS_HAT3Y		0x17
+#define ABS_PRESSURE		0x18
+#define ABS_DISTANCE		0x19
+#define ABS_TILT_X		0x1a
+#define ABS_TILT_Y		0x1b
+#define ABS_TOOL_WIDTH		0x1c
+
+#define ABS_VOLUME		0x20
+#define ABS_PROFILE		0x21
+
+#define ABS_MISC		0x28
+
+/*
+ * 0x2e is reserved and should not be used in input drivers.
+ * It was used by HID as ABS_MISC+6 and userspace needs to detect if
+ * the next ABS_* event is correct or is just ABS_MISC + n.
+ * We define here ABS_RESERVED so userspace can rely on it and detect
+ * the situation described above.
+ */
+#define ABS_RESERVED		0x2e
+
+#define ABS_MT_SLOT		0x2f	/* MT slot being modified */
+#define ABS_MT_TOUCH_MAJOR	0x30	/* Major axis of touching ellipse */
+#define ABS_MT_TOUCH_MINOR	0x31	/* Minor axis (omit if circular) */
+#define ABS_MT_WIDTH_MAJOR	0x32	/* Major axis of approaching ellipse */
+#define ABS_MT_WIDTH_MINOR	0x33	/* Minor axis (omit if circular) */
+#define ABS_MT_ORIENTATION	0x34	/* Ellipse orientation */
+#define ABS_MT_POSITION_X	0x35	/* Center X touch position */
+#define ABS_MT_POSITION_Y	0x36	/* Center Y touch position */
+#define ABS_MT_TOOL_TYPE	0x37	/* Type of touching device */
+#define ABS_MT_BLOB_ID		0x38	/* Group a set of packets as a blob */
+#define ABS_MT_TRACKING_ID	0x39	/* Unique ID of initiated contact */
+#define ABS_MT_PRESSURE		0x3a	/* Pressure on contact area */
+#define ABS_MT_DISTANCE		0x3b	/* Contact hover distance */
+#define ABS_MT_TOOL_X		0x3c	/* Center X tool position */
+#define ABS_MT_TOOL_Y		0x3d	/* Center Y tool position */
+
+
+#define ABS_MAX			0x3f
+#define ABS_CNT			(ABS_MAX+1)
+
+/*
+ * Switch events
+ */
+
+#define SW_LID			0x00  /* set = lid shut */
+#define SW_TABLET_MODE		0x01  /* set = tablet mode */
+#define SW_HEADPHONE_INSERT	0x02  /* set = inserted */
+#define SW_RFKILL_ALL		0x03  /* rfkill master switch, type "any"
+					 set = radio enabled */
+#define SW_RADIO		SW_RFKILL_ALL	/* deprecated */
+#define SW_MICROPHONE_INSERT	0x04  /* set = inserted */
+#define SW_DOCK			0x05  /* set = plugged into dock */
+#define SW_LINEOUT_INSERT	0x06  /* set = inserted */
+#define SW_JACK_PHYSICAL_INSERT 0x07  /* set = mechanical switch set */
+#define SW_VIDEOOUT_INSERT	0x08  /* set = inserted */
+#define SW_CAMERA_LENS_COVER	0x09  /* set = lens covered */
+#define SW_KEYPAD_SLIDE		0x0a  /* set = keypad slide out */
+#define SW_FRONT_PROXIMITY	0x0b  /* set = front proximity sensor active */
+#define SW_ROTATE_LOCK		0x0c  /* set = rotate locked/disabled */
+#define SW_LINEIN_INSERT	0x0d  /* set = inserted */
+#define SW_MUTE_DEVICE		0x0e  /* set = device disabled */
+#define SW_PEN_INSERTED		0x0f  /* set = pen inserted */
+#define SW_MACHINE_COVER	0x10  /* set = cover closed */
+#define SW_MAX			0x10
+#define SW_CNT			(SW_MAX+1)
+
+/*
+ * Misc events
+ */
+
+#define MSC_SERIAL		0x00
+#define MSC_PULSELED		0x01
+#define MSC_GESTURE		0x02
+#define MSC_RAW			0x03
+#define MSC_SCAN		0x04
+#define MSC_TIMESTAMP		0x05
+#define MSC_MAX			0x07
+#define MSC_CNT			(MSC_MAX+1)
+
+/*
+ * LEDs
+ */
+
+#define LED_NUML		0x00
+#define LED_CAPSL		0x01
+#define LED_SCROLLL		0x02
+#define LED_COMPOSE		0x03
+#define LED_KANA		0x04
+#define LED_SLEEP		0x05
+#define LED_SUSPEND		0x06
+#define LED_MUTE		0x07
+#define LED_MISC		0x08
+#define LED_MAIL		0x09
+#define LED_CHARGING		0x0a
+#define LED_MAX			0x0f
+#define LED_CNT			(LED_MAX+1)
+
+/*
+ * Autorepeat values
+ */
+
+#define REP_DELAY		0x00
+#define REP_PERIOD		0x01
+#define REP_MAX			0x01
+#define REP_CNT			(REP_MAX+1)
+
+/*
+ * Sounds
+ */
+
+#define SND_CLICK		0x00
+#define SND_BELL		0x01
+#define SND_TONE		0x02
+#define SND_MAX			0x07
+#define SND_CNT			(SND_MAX+1)
+
+#endif
diff -Nru systemd-252.33/src/basic/linux/input.h systemd-252.36/src/basic/linux/input.h
--- systemd-252.33/src/basic/linux/input.h	1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/src/basic/linux/input.h	2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,516 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+/*
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ */
+#ifndef _INPUT_H
+#define _INPUT_H
+
+
+#include <sys/time.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <linux/types.h>
+
+#include "input-event-codes.h"
+
+/*
+ * The event structure itself
+ * Note that __USE_TIME_BITS64 is defined by libc based on
+ * application's request to use 64 bit time_t.
+ */
+
+struct input_event {
+#if (__BITS_PER_LONG != 32 || !defined(__USE_TIME_BITS64)) && !defined(__KERNEL__)
+	struct timeval time;
+#define input_event_sec time.tv_sec
+#define input_event_usec time.tv_usec
+#else
+	__kernel_ulong_t __sec;
+#if defined(__sparc__) && defined(__arch64__)
+	unsigned int __usec;
+	unsigned int __pad;
+#else
+	__kernel_ulong_t __usec;
+#endif
+#define input_event_sec  __sec
+#define input_event_usec __usec
+#endif
+	__u16 type;
+	__u16 code;
+	__s32 value;
+};
+
+/*
+ * Protocol version.
+ */
+
+#define EV_VERSION		0x010001
+
+/*
+ * IOCTLs (0x00 - 0x7f)
+ */
+
+struct input_id {
+	__u16 bustype;
+	__u16 vendor;
+	__u16 product;
+	__u16 version;
+};
+
+/**
+ * struct input_absinfo - used by EVIOCGABS/EVIOCSABS ioctls
+ * @value: latest reported value for the axis.
+ * @minimum: specifies minimum value for the axis.
+ * @maximum: specifies maximum value for the axis.
+ * @fuzz: specifies fuzz value that is used to filter noise from
+ *	the event stream.
+ * @flat: values that are within this value will be discarded by
+ *	joydev interface and reported as 0 instead.
+ * @resolution: specifies resolution for the values reported for
+ *	the axis.
+ *
+ * Note that input core does not clamp reported values to the
+ * [minimum, maximum] limits, such task is left to userspace.
+ *
+ * The default resolution for main axes (ABS_X, ABS_Y, ABS_Z,
+ * ABS_MT_POSITION_X, ABS_MT_POSITION_Y) is reported in units
+ * per millimeter (units/mm), resolution for rotational axes
+ * (ABS_RX, ABS_RY, ABS_RZ) is reported in units per radian.
+ * The resolution for the size axes (ABS_MT_TOUCH_MAJOR,
+ * ABS_MT_TOUCH_MINOR, ABS_MT_WIDTH_MAJOR, ABS_MT_WIDTH_MINOR)
+ * is reported in units per millimeter (units/mm).
+ * When INPUT_PROP_ACCELEROMETER is set the resolution changes.
+ * The main axes (ABS_X, ABS_Y, ABS_Z) are then reported in
+ * units per g (units/g) and in units per degree per second
+ * (units/deg/s) for rotational axes (ABS_RX, ABS_RY, ABS_RZ).
+ */
+struct input_absinfo {
+	__s32 value;
+	__s32 minimum;
+	__s32 maximum;
+	__s32 fuzz;
+	__s32 flat;
+	__s32 resolution;
+};
+
+/**
+ * struct input_keymap_entry - used by EVIOCGKEYCODE/EVIOCSKEYCODE ioctls
+ * @scancode: scancode represented in machine-endian form.
+ * @len: length of the scancode that resides in @scancode buffer.
+ * @index: index in the keymap, may be used instead of scancode
+ * @flags: allows to specify how kernel should handle the request. For
+ *	example, setting INPUT_KEYMAP_BY_INDEX flag indicates that kernel
+ *	should perform lookup in keymap by @index instead of @scancode
+ * @keycode: key code assigned to this scancode
+ *
+ * The structure is used to retrieve and modify keymap data. Users have
+ * option of performing lookup either by @scancode itself or by @index
+ * in keymap entry. EVIOCGKEYCODE will also return scancode or index
+ * (depending on which element was used to perform lookup).
+ */
+struct input_keymap_entry {
+#define INPUT_KEYMAP_BY_INDEX	(1 << 0)
+	__u8  flags;
+	__u8  len;
+	__u16 index;
+	__u32 keycode;
+	__u8  scancode[32];
+};
+
+struct input_mask {
+	__u32 type;
+	__u32 codes_size;
+	__u64 codes_ptr;
+};
+
+#define EVIOCGVERSION		_IOR('E', 0x01, int)			/* get driver version */
+#define EVIOCGID		_IOR('E', 0x02, struct input_id)	/* get device ID */
+#define EVIOCGREP		_IOR('E', 0x03, unsigned int[2])	/* get repeat settings */
+#define EVIOCSREP		_IOW('E', 0x03, unsigned int[2])	/* set repeat settings */
+
+#define EVIOCGKEYCODE		_IOR('E', 0x04, unsigned int[2])        /* get keycode */
+#define EVIOCGKEYCODE_V2	_IOR('E', 0x04, struct input_keymap_entry)
+#define EVIOCSKEYCODE		_IOW('E', 0x04, unsigned int[2])        /* set keycode */
+#define EVIOCSKEYCODE_V2	_IOW('E', 0x04, struct input_keymap_entry)
+
+#define EVIOCGNAME(len)		_IOC(_IOC_READ, 'E', 0x06, len)		/* get device name */
+#define EVIOCGPHYS(len)		_IOC(_IOC_READ, 'E', 0x07, len)		/* get physical location */
+#define EVIOCGUNIQ(len)		_IOC(_IOC_READ, 'E', 0x08, len)		/* get unique identifier */
+#define EVIOCGPROP(len)		_IOC(_IOC_READ, 'E', 0x09, len)		/* get device properties */
+
+/**
+ * EVIOCGMTSLOTS(len) - get MT slot values
+ * @len: size of the data buffer in bytes
+ *
+ * The ioctl buffer argument should be binary equivalent to
+ *
+ * struct input_mt_request_layout {
+ *	__u32 code;
+ *	__s32 values[num_slots];
+ * };
+ *
+ * where num_slots is the (arbitrary) number of MT slots to extract.
+ *
+ * The ioctl size argument (len) is the size of the buffer, which
+ * should satisfy len = (num_slots + 1) * sizeof(__s32).  If len is
+ * too small to fit all available slots, the first num_slots are
+ * returned.
+ *
+ * Before the call, code is set to the wanted ABS_MT event type. On
+ * return, values[] is filled with the slot values for the specified
+ * ABS_MT code.
+ *
+ * If the request code is not an ABS_MT value, -EINVAL is returned.
+ */
+#define EVIOCGMTSLOTS(len)	_IOC(_IOC_READ, 'E', 0x0a, len)
+
+#define EVIOCGKEY(len)		_IOC(_IOC_READ, 'E', 0x18, len)		/* get global key state */
+#define EVIOCGLED(len)		_IOC(_IOC_READ, 'E', 0x19, len)		/* get all LEDs */
+#define EVIOCGSND(len)		_IOC(_IOC_READ, 'E', 0x1a, len)		/* get all sounds status */
+#define EVIOCGSW(len)		_IOC(_IOC_READ, 'E', 0x1b, len)		/* get all switch states */
+
+#define EVIOCGBIT(ev,len)	_IOC(_IOC_READ, 'E', 0x20 + (ev), len)	/* get event bits */
+#define EVIOCGABS(abs)		_IOR('E', 0x40 + (abs), struct input_absinfo)	/* get abs value/limits */
+#define EVIOCSABS(abs)		_IOW('E', 0xc0 + (abs), struct input_absinfo)	/* set abs value/limits */
+
+#define EVIOCSFF		_IOW('E', 0x80, struct ff_effect)	/* send a force effect to a force feedback device */
+#define EVIOCRMFF		_IOW('E', 0x81, int)			/* Erase a force effect */
+#define EVIOCGEFFECTS		_IOR('E', 0x84, int)			/* Report number of effects playable at the same time */
+
+#define EVIOCGRAB		_IOW('E', 0x90, int)			/* Grab/Release device */
+#define EVIOCREVOKE		_IOW('E', 0x91, int)			/* Revoke device access */
+
+/**
+ * EVIOCGMASK - Retrieve current event mask
+ *
+ * This ioctl allows user to retrieve the current event mask for specific
+ * event type. The argument must be of type "struct input_mask" and
+ * specifies the event type to query, the address of the receive buffer and
+ * the size of the receive buffer.
+ *
+ * The event mask is a per-client mask that specifies which events are
+ * forwarded to the client. Each event code is represented by a single bit
+ * in the event mask. If the bit is set, the event is passed to the client
+ * normally. Otherwise, the event is filtered and will never be queued on
+ * the client's receive buffer.
+ *
+ * Event masks do not affect global state of the input device. They only
+ * affect the file descriptor they are applied to.
+ *
+ * The default event mask for a client has all bits set, i.e. all events
+ * are forwarded to the client. If the kernel is queried for an unknown
+ * event type or if the receive buffer is larger than the number of
+ * event codes known to the kernel, the kernel returns all zeroes for those
+ * codes.
+ *
+ * At maximum, codes_size bytes are copied.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked, EFAULT
+ * if the receive-buffer points to invalid memory, or EINVAL if the kernel
+ * does not implement the ioctl.
+ */
+#define EVIOCGMASK		_IOR('E', 0x92, struct input_mask)	/* Get event-masks */
+
+/**
+ * EVIOCSMASK - Set event mask
+ *
+ * This ioctl is the counterpart to EVIOCGMASK. Instead of receiving the
+ * current event mask, this changes the client's event mask for a specific
+ * type.  See EVIOCGMASK for a description of event-masks and the
+ * argument-type.
+ *
+ * This ioctl provides full forward compatibility. If the passed event type
+ * is unknown to the kernel, or if the number of event codes specified in
+ * the mask is bigger than what is known to the kernel, the ioctl is still
+ * accepted and applied. However, any unknown codes are left untouched and
+ * stay cleared. That means, the kernel always filters unknown codes
+ * regardless of what the client requests.  If the new mask doesn't cover
+ * all known event-codes, all remaining codes are automatically cleared and
+ * thus filtered.
+ *
+ * This ioctl may fail with ENODEV in case the file is revoked. EFAULT is
+ * returned if the receive-buffer points to invalid memory. EINVAL is returned
+ * if the kernel does not implement the ioctl.
+ */
+#define EVIOCSMASK		_IOW('E', 0x93, struct input_mask)	/* Set event-masks */
+
+#define EVIOCSCLOCKID		_IOW('E', 0xa0, int)			/* Set clockid to be used for timestamps */
+
+/*
+ * IDs.
+ */
+
+#define ID_BUS			0
+#define ID_VENDOR		1
+#define ID_PRODUCT		2
+#define ID_VERSION		3
+
+#define BUS_PCI			0x01
+#define BUS_ISAPNP		0x02
+#define BUS_USB			0x03
+#define BUS_HIL			0x04
+#define BUS_BLUETOOTH		0x05
+#define BUS_VIRTUAL		0x06
+
+#define BUS_ISA			0x10
+#define BUS_I8042		0x11
+#define BUS_XTKBD		0x12
+#define BUS_RS232		0x13
+#define BUS_GAMEPORT		0x14
+#define BUS_PARPORT		0x15
+#define BUS_AMIGA		0x16
+#define BUS_ADB			0x17
+#define BUS_I2C			0x18
+#define BUS_HOST		0x19
+#define BUS_GSC			0x1A
+#define BUS_ATARI		0x1B
+#define BUS_SPI			0x1C
+#define BUS_RMI			0x1D
+#define BUS_CEC			0x1E
+#define BUS_INTEL_ISHTP		0x1F
+#define BUS_AMD_SFH		0x20
+
+/*
+ * MT_TOOL types
+ */
+#define MT_TOOL_FINGER		0x00
+#define MT_TOOL_PEN		0x01
+#define MT_TOOL_PALM		0x02
+#define MT_TOOL_DIAL		0x0a
+#define MT_TOOL_MAX		0x0f
+
+/*
+ * Values describing the status of a force-feedback effect
+ */
+#define FF_STATUS_STOPPED	0x00
+#define FF_STATUS_PLAYING	0x01
+#define FF_STATUS_MAX		0x01
+
+/*
+ * Structures used in ioctls to upload effects to a device
+ * They are pieces of a bigger structure (called ff_effect)
+ */
+
+/*
+ * All duration values are expressed in ms. Values above 32767 ms (0x7fff)
+ * should not be used and have unspecified results.
+ */
+
+/**
+ * struct ff_replay - defines scheduling of the force-feedback effect
+ * @length: duration of the effect
+ * @delay: delay before effect should start playing
+ */
+struct ff_replay {
+	__u16 length;
+	__u16 delay;
+};
+
+/**
+ * struct ff_trigger - defines what triggers the force-feedback effect
+ * @button: number of the button triggering the effect
+ * @interval: controls how soon the effect can be re-triggered
+ */
+struct ff_trigger {
+	__u16 button;
+	__u16 interval;
+};
+
+/**
+ * struct ff_envelope - generic force-feedback effect envelope
+ * @attack_length: duration of the attack (ms)
+ * @attack_level: level at the beginning of the attack
+ * @fade_length: duration of fade (ms)
+ * @fade_level: level at the end of fade
+ *
+ * The @attack_level and @fade_level are absolute values; when applying
+ * envelope force-feedback core will convert to positive/negative
+ * value based on polarity of the default level of the effect.
+ * Valid range for the attack and fade levels is 0x0000 - 0x7fff
+ */
+struct ff_envelope {
+	__u16 attack_length;
+	__u16 attack_level;
+	__u16 fade_length;
+	__u16 fade_level;
+};
+
+/**
+ * struct ff_constant_effect - defines parameters of a constant force-feedback effect
+ * @level: strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_constant_effect {
+	__s16 level;
+	struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_ramp_effect - defines parameters of a ramp force-feedback effect
+ * @start_level: beginning strength of the effect; may be negative
+ * @end_level: final strength of the effect; may be negative
+ * @envelope: envelope data
+ */
+struct ff_ramp_effect {
+	__s16 start_level;
+	__s16 end_level;
+	struct ff_envelope envelope;
+};
+
+/**
+ * struct ff_condition_effect - defines a spring or friction force-feedback effect
+ * @right_saturation: maximum level when joystick moved all way to the right
+ * @left_saturation: same for the left side
+ * @right_coeff: controls how fast the force grows when the joystick moves
+ *	to the right
+ * @left_coeff: same for the left side
+ * @deadband: size of the dead zone, where no force is produced
+ * @center: position of the dead zone
+ */
+struct ff_condition_effect {
+	__u16 right_saturation;
+	__u16 left_saturation;
+
+	__s16 right_coeff;
+	__s16 left_coeff;
+
+	__u16 deadband;
+	__s16 center;
+};
+
+/**
+ * struct ff_periodic_effect - defines parameters of a periodic force-feedback effect
+ * @waveform: kind of the effect (wave)
+ * @period: period of the wave (ms)
+ * @magnitude: peak value
+ * @offset: mean value of the wave (roughly)
+ * @phase: 'horizontal' shift
+ * @envelope: envelope data
+ * @custom_len: number of samples (FF_CUSTOM only)
+ * @custom_data: buffer of samples (FF_CUSTOM only)
+ *
+ * Known waveforms - FF_SQUARE, FF_TRIANGLE, FF_SINE, FF_SAW_UP,
+ * FF_SAW_DOWN, FF_CUSTOM. The exact syntax FF_CUSTOM is undefined
+ * for the time being as no driver supports it yet.
+ *
+ * Note: the data pointed by custom_data is copied by the driver.
+ * You can therefore dispose of the memory after the upload/update.
+ */
+struct ff_periodic_effect {
+	__u16 waveform;
+	__u16 period;
+	__s16 magnitude;
+	__s16 offset;
+	__u16 phase;
+
+	struct ff_envelope envelope;
+
+	__u32 custom_len;
+	__s16 *custom_data;
+};
+
+/**
+ * struct ff_rumble_effect - defines parameters of a periodic force-feedback effect
+ * @strong_magnitude: magnitude of the heavy motor
+ * @weak_magnitude: magnitude of the light one
+ *
+ * Some rumble pads have two motors of different weight. Strong_magnitude
+ * represents the magnitude of the vibration generated by the heavy one.
+ */
+struct ff_rumble_effect {
+	__u16 strong_magnitude;
+	__u16 weak_magnitude;
+};
+
+/**
+ * struct ff_effect - defines force feedback effect
+ * @type: type of the effect (FF_CONSTANT, FF_PERIODIC, FF_RAMP, FF_SPRING,
+ *	FF_FRICTION, FF_DAMPER, FF_RUMBLE, FF_INERTIA, or FF_CUSTOM)
+ * @id: an unique id assigned to an effect
+ * @direction: direction of the effect
+ * @trigger: trigger conditions (struct ff_trigger)
+ * @replay: scheduling of the effect (struct ff_replay)
+ * @u: effect-specific structure (one of ff_constant_effect, ff_ramp_effect,
+ *	ff_periodic_effect, ff_condition_effect, ff_rumble_effect) further
+ *	defining effect parameters
+ *
+ * This structure is sent through ioctl from the application to the driver.
+ * To create a new effect application should set its @id to -1; the kernel
+ * will return assigned @id which can later be used to update or delete
+ * this effect.
+ *
+ * Direction of the effect is encoded as follows:
+ *	0 deg -> 0x0000 (down)
+ *	90 deg -> 0x4000 (left)
+ *	180 deg -> 0x8000 (up)
+ *	270 deg -> 0xC000 (right)
+ */
+struct ff_effect {
+	__u16 type;
+	__s16 id;
+	__u16 direction;
+	struct ff_trigger trigger;
+	struct ff_replay replay;
+
+	union {
+		struct ff_constant_effect constant;
+		struct ff_ramp_effect ramp;
+		struct ff_periodic_effect periodic;
+		struct ff_condition_effect condition[2]; /* One for each axis */
+		struct ff_rumble_effect rumble;
+	} u;
+};
+
+/*
+ * Force feedback effect types
+ */
+
+#define FF_RUMBLE	0x50
+#define FF_PERIODIC	0x51
+#define FF_CONSTANT	0x52
+#define FF_SPRING	0x53
+#define FF_FRICTION	0x54
+#define FF_DAMPER	0x55
+#define FF_INERTIA	0x56
+#define FF_RAMP		0x57
+
+#define FF_EFFECT_MIN	FF_RUMBLE
+#define FF_EFFECT_MAX	FF_RAMP
+
+/*
+ * Force feedback periodic effect types
+ */
+
+#define FF_SQUARE	0x58
+#define FF_TRIANGLE	0x59
+#define FF_SINE		0x5a
+#define FF_SAW_UP	0x5b
+#define FF_SAW_DOWN	0x5c
+#define FF_CUSTOM	0x5d
+
+#define FF_WAVEFORM_MIN	FF_SQUARE
+#define FF_WAVEFORM_MAX	FF_CUSTOM
+
+/*
+ * Set ff device properties
+ */
+
+#define FF_GAIN		0x60
+#define FF_AUTOCENTER	0x61
+
+/*
+ * ff->playback(effect_id = FF_GAIN) is the first effect_id to
+ * cause a collision with another ff method, in this case ff->set_gain().
+ * Therefore the greatest safe value for effect_id is FF_GAIN - 1,
+ * and thus the total number of effects should never exceed FF_GAIN.
+ */
+#define FF_MAX_EFFECTS	FF_GAIN
+
+#define FF_MAX		0x7f
+#define FF_CNT		(FF_MAX+1)
+
+#endif /* _INPUT_H */
diff -Nru systemd-252.33/src/basic/missing_sched.h systemd-252.36/src/basic/missing_sched.h
--- systemd-252.33/src/basic/missing_sched.h	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/missing_sched.h	2025-03-06 11:43:10.000000000 +0000
@@ -8,6 +8,13 @@
 #define CLONE_NEWCGROUP 0x02000000
 #endif
 
+/* b3e5838252665ee4cfa76b82bdf1198dca81e5be (5.2) */
+#ifndef CLONE_PIDFD
+#  define CLONE_PIDFD 0x00001000
+#else
+assert_cc(CLONE_PIDFD == 0x00001000);
+#endif
+
 /* 769071ac9f20b6a447410c7eaa55d1a5233ef40c (5.8) */
 #ifndef CLONE_NEWTIME
 #define CLONE_NEWTIME 0x00000080
diff -Nru systemd-252.33/src/basic/random-util.c systemd-252.36/src/basic/random-util.c
--- systemd-252.33/src/basic/random-util.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/random-util.c	2025-03-06 11:43:10.000000000 +0000
@@ -44,7 +44,6 @@
                 uint8_t auxval[16];
         } state = {
                 /* Arbitrary domain separation to prevent other usage of AT_RANDOM from clashing. */
-                .label = "systemd fallback random bytes v1",
                 .call_id = fallback_counter++,
                 .stamp_mono = now(CLOCK_MONOTONIC),
                 .stamp_real = now(CLOCK_REALTIME),
@@ -52,6 +51,7 @@
                 .tid = gettid(),
         };
 
+        memcpy(state.label, "systemd fallback random bytes v1", sizeof(state.label));
 #if HAVE_SYS_AUXV_H
         memcpy(state.auxval, ULONG_TO_PTR(getauxval(AT_RANDOM)), sizeof(state.auxval));
 #endif
diff -Nru systemd-252.33/src/basic/raw-clone.h systemd-252.36/src/basic/raw-clone.h
--- systemd-252.33/src/basic/raw-clone.h	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/raw-clone.h	2025-03-06 11:43:10.000000000 +0000
@@ -11,6 +11,7 @@
 
 #include "log.h"
 #include "macro.h"
+#include "missing_sched.h"
 
 /**
  * raw_clone() - uses clone to create a new process with clone flags
diff -Nru systemd-252.33/src/basic/recurse-dir.c systemd-252.36/src/basic/recurse-dir.c
--- systemd-252.33/src/basic/recurse-dir.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/basic/recurse-dir.c	2025-03-06 11:43:10.000000000 +0000
@@ -270,7 +270,7 @@
                                 if (r < 0) {
                                         log_debug_errno(r, "Failed to stat directory entry '%s': %m", p);
 
-                                        assert(errno <= RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX - RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE);
+                                        assert(-r <= RECURSE_DIR_SKIP_STAT_INODE_ERROR_MAX - RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE);
 
                                         r = func(RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + -r,
                                                  p,
@@ -300,7 +300,7 @@
                                          * guarantee that RECURSE_DIR_ENTRY is strictly issued for
                                          * non-directory dirents. */
 
-                                        log_debug_errno(r, "Non-directory entry '%s' suddenly became a directory: %m", p);
+                                        log_debug("Non-directory entry '%s' suddenly became a directory.", p);
 
                                         r = func(RECURSE_DIR_SKIP_STAT_INODE_ERROR_BASE + EISDIR,
                                                  p,
diff -Nru systemd-252.33/src/boot/efi/boot.c systemd-252.36/src/boot/efi/boot.c
--- systemd-252.33/src/boot/efi/boot.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/boot/efi/boot.c	2025-03-06 11:43:10.000000000 +0000
@@ -1391,7 +1391,7 @@
 
         err = root->Open(root, &handle, old_path, EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
         if (err != EFI_SUCCESS) {
-                log_error_stall(L"Error opening boot entry: %r", err);
+                log_error_stall(L"Error opening boot entry '%ls': %r", old_path, err);
                 return err;
         }
 
diff -Nru systemd-252.33/src/boot/efi/pe.c systemd-252.36/src/boot/efi/pe.c
--- systemd-252.33/src/boot/efi/pe.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/boot/efi/pe.c	2025-03-06 11:43:10.000000000 +0000
@@ -9,7 +9,6 @@
 
 #define DOS_FILE_MAGIC "MZ"
 #define PE_FILE_MAGIC  "PE\0\0"
-#define MAX_SECTIONS 96
 
 #if defined(__i386__)
 #  define TARGET_MACHINE_TYPE EFI_IMAGE_MACHINE_IA32
@@ -128,7 +127,6 @@
                (pe->FileHeader.Machine == TARGET_MACHINE_TYPE ||
                 (allow_compatibility && pe->FileHeader.Machine == TARGET_MACHINE_TYPE_COMPATIBILITY)) &&
                pe->FileHeader.NumberOfSections > 0 &&
-               pe->FileHeader.NumberOfSections <= MAX_SECTIONS &&
                IN_SET(pe->OptionalHeader.Magic, OPTHDR32_MAGIC, OPTHDR64_MAGIC);
 }
 
diff -Nru systemd-252.33/src/core/automount.c systemd-252.36/src/core/automount.c
--- systemd-252.33/src/core/automount.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/automount.c	2025-03-06 11:43:10.000000000 +0000
@@ -4,7 +4,6 @@
 #include <fcntl.h>
 #include <limits.h>
 #include <linux/auto_dev-ioctl.h>
-#include <linux/auto_fs4.h>
 #include <sys/epoll.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
diff -Nru systemd-252.33/src/core/dbus.c systemd-252.36/src/core/dbus.c
--- systemd-252.33/src/core/dbus.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/dbus.c	2025-03-06 11:43:10.000000000 +0000
@@ -131,10 +131,16 @@
         assert(message);
         assert_se(bus = sd_bus_message_get_bus(message));
 
-        if (bus == m->api_bus)
+        if (bus == m->api_bus) {
+                log_notice("Got disconnect on API bus.");
                 bus_done_api(m);
-        if (bus == m->system_bus)
+        }
+        if (bus == m->system_bus) {
+                /* If we are the system manager, this is already logged by the API bus. */
+                if (!MANAGER_IS_SYSTEM(m))
+                        log_notice("Got disconnect on system bus.");
                 bus_done_system(m);
+        }
 
         if (set_remove(m->private_buses, bus)) {
                 log_debug("Got disconnect on private connection.");
diff -Nru systemd-252.33/src/core/dbus-manager.c systemd-252.36/src/core/dbus-manager.c
--- systemd-252.33/src/core/dbus-manager.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/dbus-manager.c	2025-03-06 11:43:10.000000000 +0000
@@ -2643,7 +2643,7 @@
         flags = unit_file_bools_to_flags(runtime, force);
 
         dep = unit_dependency_from_string(type);
-        if (dep < 0)
+        if (dep < 0 || !IN_SET(dep, UNIT_WANTS, UNIT_REQUIRES))
                 return -EINVAL;
 
         r = unit_file_add_dependency(m->unit_file_scope, flags, NULL, l, target, dep, &changes, &n_changes);
diff -Nru systemd-252.33/src/core/device.c systemd-252.36/src/core/device.c
--- systemd-252.33/src/core/device.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/device.c	2025-03-06 11:43:10.000000000 +0000
@@ -550,7 +550,7 @@
         for (;;) {
                 _cleanup_free_ char *word = NULL, *k = NULL;
 
-                r = extract_first_word(&wants, &word, NULL, EXTRACT_UNQUOTE);
+                r = extract_first_word(&wants, &word, NULL, EXTRACT_UNQUOTE | EXTRACT_RETAIN_ESCAPE);
                 if (r == 0)
                         break;
                 if (r == -ENOMEM)
diff -Nru systemd-252.33/src/core/job.c systemd-252.36/src/core/job.c
--- systemd-252.33/src/core/job.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/job.c	2025-03-06 11:43:10.000000000 +0000
@@ -402,9 +402,8 @@
                 return IN_SET(b, UNIT_ACTIVE, UNIT_RELOADING);
 
         case JOB_RELOAD:
-                return
-                        b == UNIT_RELOADING;
-
+                /* Reload jobs are never consider redundant/duplicate. Refer jobs_may_late_merge() for
+                 * a detailed justification. */
         case JOB_RESTART:
                 /* Restart jobs must always be kept.
                  *
diff -Nru systemd-252.33/src/core/manager-dump.c systemd-252.36/src/core/manager-dump.c
--- systemd-252.33/src/core/manager-dump.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/manager-dump.c	2025-03-06 11:43:10.000000000 +0000
@@ -59,6 +59,9 @@
                                 timestamp_is_set(t->realtime) ? FORMAT_TIMESTAMP(t->realtime) :
                                                                 FORMAT_TIMESPAN(t->monotonic, 1));
         }
+
+        for (const char *n = sd_bus_track_first(m->subscribed); n; n = sd_bus_track_next(m->subscribed))
+                fprintf(f, "%sSubscribed: %s\n", strempty(prefix), n);
 }
 
 void manager_dump(Manager *m, FILE *f, char **patterns, const char *prefix) {
diff -Nru systemd-252.33/src/core/path.c systemd-252.36/src/core/path.c
--- systemd-252.33/src/core/path.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/path.c	2025-03-06 11:43:10.000000000 +0000
@@ -589,7 +589,7 @@
         }
 
         if (path_check_good(p, initial, from_trigger_notify, &trigger_path)) {
-                log_unit_debug(UNIT(p), "Got triggered.");
+                log_unit_debug(UNIT(p), "Got triggered by '%s'.", trigger_path);
                 path_enter_running(p, trigger_path);
                 return;
         }
@@ -603,7 +603,7 @@
          * recheck */
 
         if (path_check_good(p, false, from_trigger_notify, &trigger_path)) {
-                log_unit_debug(UNIT(p), "Got triggered.");
+                log_unit_debug(UNIT(p), "Got triggered by '%s'.", trigger_path);
                 path_enter_running(p, trigger_path);
                 return;
         }
diff -Nru systemd-252.33/src/core/unit-serialize.c systemd-252.36/src/core/unit-serialize.c
--- systemd-252.33/src/core/unit-serialize.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/core/unit-serialize.c	2025-03-06 11:43:10.000000000 +0000
@@ -39,10 +39,12 @@
         if (markers == 0)
                 return 0;
 
+        bool space = false;
+
         fputs("markers=", f);
         for (UnitMarker m = 0; m < _UNIT_MARKER_MAX; m++)
                 if (FLAGS_SET(markers, 1u << m))
-                        fputs(unit_marker_to_string(m), f);
+                        fputs_with_space(f, unit_marker_to_string(m), /* separator = */ NULL, &space);
         fputc('\n', f);
         return 0;
 }
diff -Nru systemd-252.33/src/fuzz/fuzz-compress.c systemd-252.36/src/fuzz/fuzz-compress.c
--- systemd-252.33/src/fuzz/fuzz-compress.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/fuzz/fuzz-compress.c	2025-03-06 11:43:10.000000000 +0000
@@ -63,7 +63,7 @@
         size_t sw_len = MIN(data_len - 1, h->sw_len);
 
         r = decompress_startswith(alg, buf, csize, &buf2, h->data, sw_len, h->data[sw_len]);
-        assert_se(r > 0);
+        assert_se(r >= 0);
 
         return 0;
 }
diff -Nru systemd-252.33/src/home/homectl.c systemd-252.36/src/home/homectl.c
--- systemd-252.33/src/home/homectl.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/home/homectl.c	2025-03-06 11:43:10.000000000 +0000
@@ -2263,7 +2263,7 @@
                "     --enforce-password-policy=BOOL\n"
                "                               Control whether to enforce system's password\n"
                "                               policy for this user\n"
-               "  -P                           Same as --enforce-password-password=no\n"
+               "  -P                           Same as --enforce-password-policy=no\n"
                "     --password-change-now=BOOL\n"
                "                               Require the password to be changed on next login\n"
                "     --password-change-min=TIME\n"
Binary files /tmp/aaTPyuKjzL/systemd-252.33/src/import/import-pubring.gpg and /tmp/LOBDKmAF_9/systemd-252.36/src/import/import-pubring.gpg differ
diff -Nru systemd-252.33/src/import/pull-tar.c systemd-252.36/src/import/pull-tar.c
--- systemd-252.33/src/import/pull-tar.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/import/pull-tar.c	2025-03-06 11:43:10.000000000 +0000
@@ -408,7 +408,7 @@
                 r = install_file(
                                 AT_FDCWD, i->local,
                                 AT_FDCWD, NULL,
-                                (i->flags & PULL_READ_ONLY) ? INSTALL_READ_ONLY : 0 |
+                                (i->flags & PULL_READ_ONLY ? INSTALL_READ_ONLY : 0) |
                                 (i->flags & PULL_SYNC ? INSTALL_SYNCFS : 0));
                 if (r < 0) {
                         log_error_errno(r, "Failed to finalize '%s': %m", i->local);
diff -Nru systemd-252.33/src/journal/journalctl.c systemd-252.36/src/journal/journalctl.c
--- systemd-252.33/src/journal/journalctl.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/journal/journalctl.c	2025-03-06 11:43:10.000000000 +0000
@@ -1865,15 +1865,18 @@
         state_size = FSPRG_stateinbytes(FSPRG_RECOMMENDED_SECPAR);
         state = alloca_safe(state_size);
 
-        log_info("Generating seed...");
+        if (!arg_quiet)
+                log_info("Generating seed...");
         r = crypto_random_bytes(seed, seed_size);
         if (r < 0)
                 return log_error_errno(r, "Failed to acquire random seed: %m");
 
-        log_info("Generating key pair...");
+        if (!arg_quiet)
+                log_info("Generating key pair...");
         FSPRG_GenMK(NULL, mpk, seed, seed_size, FSPRG_RECOMMENDED_SECPAR);
 
-        log_info("Generating sealing key...");
+        if (!arg_quiet)
+                log_info("Generating sealing key...");
         FSPRG_GenState0(state, mpk, seed, seed_size);
 
         assert(arg_interval > 0);
@@ -1888,7 +1891,7 @@
 
         r = chattr_secret(fd, CHATTR_WARN_UNSUPPORTED_FLAGS);
         if (r < 0)
-                log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) ? LOG_DEBUG : LOG_WARNING,
+                log_full_errno(ERRNO_IS_NOT_SUPPORTED(r) || arg_quiet ? LOG_DEBUG : LOG_WARNING,
                                r, "Failed to set file attributes on '%s', ignoring: %m", k);
 
         struct FSSHeader h = {
@@ -1921,7 +1924,7 @@
         if (r < 0)
                 return r;
 
-        if (on_tty()) {
+        if (on_tty() && !arg_quiet) {
                 hn = gethostname_malloc();
                 if (hn)
                         hostname_cleanup(hn);
@@ -1952,7 +1955,7 @@
 
         puts(key);
 
-        if (on_tty()) {
+        if (on_tty() && !arg_quiet) {
                 fprintf(stderr, "%s", ansi_normal());
 #if HAVE_QRENCODE
                 _cleanup_free_ char *url = NULL;
diff -Nru systemd-252.33/src/journal/journald-server.c systemd-252.36/src/journal/journald-server.c
--- systemd-252.33/src/journal/journald-server.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/journal/journald-server.c	2025-03-06 11:43:10.000000000 +0000
@@ -854,8 +854,9 @@
                 if (!f)
                         return;
 
-                if (journal_file_rotate_suggested(f->file, s->max_file_usec, LOG_INFO)) {
-                        log_info("%s: Journal header limits reached or header out-of-date, rotating.", f->file->path);
+                if (journal_file_rotate_suggested(f->file, s->max_file_usec, LOG_DEBUG)) {
+                        log_debug("%s: Journal header limits reached or header out-of-date, rotating.",
+                                  f->file->path);
                         rotate = true;
                 }
         }
diff -Nru systemd-252.33/src/libsystemd/sd-id128/sd-id128.c systemd-252.36/src/libsystemd/sd-id128/sd-id128.c
--- systemd-252.33/src/libsystemd/sd-id128/sd-id128.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/libsystemd/sd-id128/sd-id128.c	2025-03-06 11:43:10.000000000 +0000
@@ -7,6 +7,7 @@
 #include "sd-id128.h"
 
 #include "alloc-util.h"
+#include "errno-util.h"
 #include "fd-util.h"
 #include "hexdecoct.h"
 #include "hmac.h"
@@ -173,8 +174,10 @@
 
         key = request_key("user", "invocation_id", NULL, 0);
         if (key == -1) {
-                /* Keyring support not available? No invocation key stored? */
-                if (IN_SET(errno, ENOSYS, ENOKEY))
+                /* Keyring support not available? Keyring access locked down? No invocation key stored? */
+                if (ERRNO_IS_NOT_SUPPORTED(errno) ||
+                    ERRNO_IS_PRIVILEGE(errno) ||
+                    errno == ENOKEY)
                         return -ENXIO;
 
                 return -errno;
diff -Nru systemd-252.33/src/libsystemd/sd-journal/journal-file.c systemd-252.36/src/libsystemd/sd-journal/journal-file.c
--- systemd-252.33/src/libsystemd/sd-journal/journal-file.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/libsystemd/sd-journal/journal-file.c	2025-03-06 11:43:10.000000000 +0000
@@ -2452,7 +2452,7 @@
                 Object **ret_object,
                 uint64_t *ret_offset) {
 
-        uint64_t p = 0, a, t = 0, k;
+        uint64_t p = 0, a, t = 0, k = 0; /* Explicit initialization of k to appease gcc */
         ChainCacheItem *ci;
         Object *o;
         int r;
diff -Nru systemd-252.33/src/locale/kbd-model-map systemd-252.36/src/locale/kbd-model-map
--- systemd-252.33/src/locale/kbd-model-map	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/locale/kbd-model-map	2025-03-06 11:43:10.000000000 +0000
@@ -70,3 +70,4 @@
 es-dvorak		es	microsoftpro	dvorak		terminate:ctrl_alt_bksp
 lv			lv	pc105		apostrophe	terminate:ctrl_alt_bksp
 lv-tilde		lv	pc105		tilde		terminate:ctrl_alt_bksp
+ge			ge,us	pc105		-		terminate:ctrl_alt_bksp
diff -Nru systemd-252.33/src/login/logind.c systemd-252.36/src/login/logind.c
--- systemd-252.33/src/login/logind.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/login/logind.c	2025-03-06 11:43:10.000000000 +0000
@@ -87,6 +87,8 @@
 
         (void) sd_event_set_watchdog(m->event, true);
 
+        dual_timestamp_get(&m->init_ts);
+
         manager_reset_config(m);
 
         *ret = TAKE_PTR(m);
diff -Nru systemd-252.33/src/login/logind-core.c systemd-252.36/src/login/logind-core.c
--- systemd-252.33/src/login/logind-core.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/login/logind-core.c	2025-03-06 11:43:10.000000000 +0000
@@ -401,10 +401,14 @@
 int manager_get_idle_hint(Manager *m, dual_timestamp *t) {
         Session *s;
         bool idle_hint;
-        dual_timestamp ts = DUAL_TIMESTAMP_NULL;
+        dual_timestamp ts;
 
         assert(m);
 
+        /* Initialize the baseline timestamp with the time the manager got initialized to avoid reporting
+         * unreasonable large idle periods starting with the Unix epoch. */
+        ts = m->init_ts;
+
         idle_hint = !manager_is_inhibited(m, INHIBIT_IDLE, INHIBIT_BLOCK, t, false, false, 0, NULL);
 
         HASHMAP_FOREACH(s, m->sessions) {
diff -Nru systemd-252.33/src/login/logind.h systemd-252.36/src/login/logind.h
--- systemd-252.33/src/login/logind.h	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/login/logind.h	2025-03-06 11:43:10.000000000 +0000
@@ -139,6 +139,8 @@
 
         char *efi_loader_entry_one_shot;
         struct stat efi_loader_entry_one_shot_stat;
+
+        dual_timestamp init_ts;
 };
 
 void manager_reset_config(Manager *m);
diff -Nru systemd-252.33/src/network/netdev/wireguard.c systemd-252.36/src/network/netdev/wireguard.c
--- systemd-252.33/src/network/netdev/wireguard.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/network/netdev/wireguard.c	2025-03-06 11:43:10.000000000 +0000
@@ -1127,7 +1127,7 @@
         r = wireguard_read_key_file(w->private_key_file, w->private_key);
         if (r < 0)
                 return log_netdev_error_errno(netdev, r,
-                                              "Failed to read private key from %s. Ignoring network device.",
+                                              "Failed to read private key from '%s', ignoring network device: %m",
                                               w->private_key_file);
 
         if (eqzero(w->private_key))
diff -Nru systemd-252.33/src/resolve/resolved-dns-dnssec.c systemd-252.36/src/resolve/resolved-dns-dnssec.c
--- systemd-252.33/src/resolve/resolved-dns-dnssec.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-dnssec.c	2025-03-06 11:43:10.000000000 +0000
@@ -1473,7 +1473,7 @@
 
                 r = dnssec_verify_dnskey_by_ds(dnskey, ds, false);
                 if (IN_SET(r, -EKEYREJECTED, -EOPNOTSUPP))
-                        return 0; /* The DNSKEY is revoked or otherwise invalid, or we don't support the digest algorithm */
+                        continue; /* The DNSKEY is revoked or otherwise invalid, or we don't support the digest algorithm */
                 if (r < 0)
                         return r;
                 if (r > 0)
diff -Nru systemd-252.33/src/resolve/resolved-dns-query.c systemd-252.36/src/resolve/resolved-dns-query.c
--- systemd-252.33/src/resolve/resolved-dns-query.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-query.c	2025-03-06 11:43:10.000000000 +0000
@@ -10,6 +10,7 @@
 #include "resolved-dns-query.h"
 #include "resolved-dns-synthesize.h"
 #include "resolved-etc-hosts.h"
+#include "resolved-timeouts.h"
 #include "string-util.h"
 
 #define QUERIES_MAX 2048
@@ -48,6 +49,8 @@
 
         assert(c);
 
+        (void) event_source_disable(c->timeout_event_source);
+
         /* Detach all the DnsTransactions attached to this query */
 
         while ((t = set_steal_first(c->transactions))) {
@@ -62,6 +65,8 @@
 
         assert(c);
 
+        (void) event_source_disable(c->timeout_event_source);
+
         /* Abandon all the DnsTransactions attached to this query */
 
         while ((t = set_steal_first(c->transactions))) {
@@ -94,6 +99,8 @@
         if (!c)
                 return NULL;
 
+        c->timeout_event_source = sd_event_source_disable_unref(c->timeout_event_source);
+
         dns_query_candidate_stop(c);
         dns_query_candidate_unlink(c);
 
@@ -312,6 +319,30 @@
         return r;
 }
 
+static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c);
+
+static int on_candidate_timeout(sd_event_source *s, usec_t usec, void *userdata) {
+        DnsQueryCandidate *c = userdata;
+
+        assert(s);
+        assert(c);
+
+        log_debug("Accepting incomplete query candidate after expedited timeout on partial success.");
+        dns_query_accept(c->query, c);
+
+        return 0;
+}
+
+static bool dns_query_candidate_has_partially_succeeded(DnsQueryCandidate *c) {
+        DnsTransaction *t;
+
+        SET_FOREACH(t, c->transactions)
+                if (t->state == DNS_TRANSACTION_SUCCESS)
+                        return true;
+
+        return false;
+}
+
 void dns_query_candidate_notify(DnsQueryCandidate *c) {
         DnsTransactionState state;
         int r;
@@ -323,11 +354,24 @@
 
         state = dns_query_candidate_state(c);
 
-        if (DNS_TRANSACTION_IS_LIVE(state))
+        if (DNS_TRANSACTION_IS_LIVE(state)) {
+                if (dns_query_candidate_has_partially_succeeded(c))
+                        (void) event_reset_time_relative(
+                                        c->query->manager->event,
+                                        &c->timeout_event_source,
+                                        CLOCK_BOOTTIME,
+                                        CANDIDATE_EXPEDITED_TIMEOUT_USEC, /* accuracy_usec= */ 0,
+                                        on_candidate_timeout, c,
+                                        /* priority= */ 0, "candidate-timeout",
+                                        /* force_reset= */ false);
+
                 return;
+        }
 
         if (state != DNS_TRANSACTION_SUCCESS && c->search_domain) {
 
+                (void) event_source_disable(c->timeout_event_source);
+
                 r = dns_query_candidate_next_search_domain(c);
                 if (r < 0)
                         goto fail;
diff -Nru systemd-252.33/src/resolve/resolved-dns-query.h systemd-252.36/src/resolve/resolved-dns-query.h
--- systemd-252.33/src/resolve/resolved-dns-query.h	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-query.h	2025-03-06 11:43:10.000000000 +0000
@@ -25,6 +25,7 @@
         DnsSearchDomain *search_domain;
 
         Set *transactions;
+        sd_event_source *timeout_event_source;
 
         LIST_FIELDS(DnsQueryCandidate, candidates_by_query);
         LIST_FIELDS(DnsQueryCandidate, candidates_by_scope);
diff -Nru systemd-252.33/src/resolve/resolved-dns-scope.c systemd-252.36/src/resolve/resolved-dns-scope.c
--- systemd-252.33/src/resolve/resolved-dns-scope.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-scope.c	2025-03-06 11:43:10.000000000 +0000
@@ -15,6 +15,7 @@
 #include "resolved-dns-zone.h"
 #include "resolved-llmnr.h"
 #include "resolved-mdns.h"
+#include "resolved-timeouts.h"
 #include "socket-util.h"
 #include "strv.h"
 
diff -Nru systemd-252.33/src/resolve/resolved-dns-stream.c systemd-252.36/src/resolve/resolved-dns-stream.c
--- systemd-252.33/src/resolve/resolved-dns-stream.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-stream.c	2025-03-06 11:43:10.000000000 +0000
@@ -359,7 +359,8 @@
                 }
         }
 
-        while ((revents & (EPOLLIN|EPOLLHUP|EPOLLRDHUP)) &&
+        while (s->identified && /* Only read data once we identified the peer, because we cannot fill in the DNS packet meta info otherwise */
+               (revents & (EPOLLIN|EPOLLHUP|EPOLLRDHUP)) &&
                (!s->read_packet ||
                 s->n_read < sizeof(s->read_size) + s->read_packet->size)) {
 
diff -Nru systemd-252.33/src/resolve/resolved-dns-transaction.c systemd-252.36/src/resolve/resolved-dns-transaction.c
--- systemd-252.33/src/resolve/resolved-dns-transaction.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-transaction.c	2025-03-06 11:43:10.000000000 +0000
@@ -14,13 +14,10 @@
 #include "resolved-dns-transaction.h"
 #include "resolved-dnstls.h"
 #include "resolved-llmnr.h"
+#include "resolved-timeouts.h"
 #include "string-table.h"
 
 #define TRANSACTIONS_MAX 4096
-#define TRANSACTION_TCP_TIMEOUT_USEC (10U*USEC_PER_SEC)
-
-/* After how much time to repeat classic DNS requests */
-#define DNS_TIMEOUT_USEC (SD_RESOLVED_QUERY_TIMEOUT_USEC / DNS_TRANSACTION_ATTEMPTS_MAX)
 
 static void dns_transaction_reset_answer(DnsTransaction *t) {
         assert(t);
@@ -1600,13 +1597,10 @@
 
         case DNS_PROTOCOL_DNS:
 
-                /* When we do TCP, grant a much longer timeout, as in this case there's no need for us to quickly
-                 * resend, as the kernel does that anyway for us, and we really don't want to interrupt it in that
-                 * needlessly. */
                 if (t->stream)
                         return TRANSACTION_TCP_TIMEOUT_USEC;
 
-                return DNS_TIMEOUT_USEC;
+                return TRANSACTION_UDP_TIMEOUT_USEC;
 
         case DNS_PROTOCOL_MDNS:
                 if (t->probing)
diff -Nru systemd-252.33/src/resolve/resolved-dns-transaction.h systemd-252.36/src/resolve/resolved-dns-transaction.h
--- systemd-252.33/src/resolve/resolved-dns-transaction.h	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-transaction.h	2025-03-06 11:43:10.000000000 +0000
@@ -202,24 +202,3 @@
 
 const char* dns_transaction_source_to_string(DnsTransactionSource p) _const_;
 DnsTransactionSource dns_transaction_source_from_string(const char *s) _pure_;
-
-/* LLMNR Jitter interval, see RFC 4795 Section 7 */
-#define LLMNR_JITTER_INTERVAL_USEC (100 * USEC_PER_MSEC)
-
-/* mDNS probing interval, see RFC 6762 Section 8.1 */
-#define MDNS_PROBING_INTERVAL_USEC (250 * USEC_PER_MSEC)
-
-/* Maximum attempts to send DNS requests, across all DNS servers */
-#define DNS_TRANSACTION_ATTEMPTS_MAX 24
-
-/* Maximum attempts to send LLMNR requests, see RFC 4795 Section 2.7 */
-#define LLMNR_TRANSACTION_ATTEMPTS_MAX 3
-
-/* Maximum attempts to send MDNS requests, see RFC 6762 Section 8.1 */
-#define MDNS_TRANSACTION_ATTEMPTS_MAX 3
-
-#define TRANSACTION_ATTEMPTS_MAX(p) ((p) == DNS_PROTOCOL_LLMNR ?        \
-                                     LLMNR_TRANSACTION_ATTEMPTS_MAX :   \
-                                     (p) == DNS_PROTOCOL_MDNS ?         \
-                                     MDNS_TRANSACTION_ATTEMPTS_MAX :    \
-                                     DNS_TRANSACTION_ATTEMPTS_MAX)
diff -Nru systemd-252.33/src/resolve/resolved-dns-trust-anchor.c systemd-252.36/src/resolve/resolved-dns-trust-anchor.c
--- systemd-252.33/src/resolve/resolved-dns-trust-anchor.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/resolve/resolved-dns-trust-anchor.c	2025-03-06 11:43:10.000000000 +0000
@@ -25,6 +25,10 @@
         { 0xE0, 0x6D, 0x44, 0xB8, 0x0B, 0x8F, 0x1D, 0x39, 0xA9, 0x5C, 0x0B, 0x0D, 0x7C, 0x65, 0xD0, 0x84,
           0x58, 0xE8, 0x80, 0x40, 0x9B, 0xBC, 0x68, 0x34, 0x57, 0x10, 0x42, 0x37, 0xC7, 0xF8, 0xEC, 0x8D };
 
+static const uint8_t root_digest3[] =
+        { 0x68, 0x3D, 0x2D, 0x0A, 0xCB, 0x8C, 0x9B, 0x71, 0x2A, 0x19, 0x48, 0xB2, 0x7F, 0x74, 0x12, 0x19,
+          0x29, 0x8D, 0x0A, 0x45, 0x0D, 0x61, 0x2C, 0x48, 0x3A, 0xF4, 0x44, 0xA4, 0xC0, 0xFB, 0x2B, 0x16 };
+
 static bool dns_trust_anchor_knows_domain_positive(DnsTrustAnchor *d, const char *name) {
         assert(d);
 
@@ -95,6 +99,9 @@
         r = add_root_ksk(answer, key, 20326, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest2, sizeof(root_digest2));
         if (r < 0)
                 return r;
+        r = add_root_ksk(answer, key, 38696, DNSSEC_ALGORITHM_RSASHA256, DNSSEC_DIGEST_SHA256, root_digest3, sizeof(root_digest3));
+        if (r < 0)
+                return r;
 
         r = hashmap_put(d->positive_by_key, key, answer);
         if (r < 0)
diff -Nru systemd-252.33/src/resolve/resolved-timeouts.h systemd-252.36/src/resolve/resolved-timeouts.h
--- systemd-252.33/src/resolve/resolved-timeouts.h	1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/src/resolve/resolved-timeouts.h	2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,39 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "time-util.h"
+#include "resolved-def.h"
+
+/* LLMNR Jitter interval, see RFC 4795 Section 7 */
+#define LLMNR_JITTER_INTERVAL_USEC (100 * USEC_PER_MSEC)
+
+/* mDNS probing interval, see RFC 6762 Section 8.1 */
+#define MDNS_PROBING_INTERVAL_USEC (250 * USEC_PER_MSEC)
+
+/* Maximum attempts to send DNS requests, across all DNS servers */
+#define DNS_TRANSACTION_ATTEMPTS_MAX 24
+
+/* Maximum attempts to send LLMNR requests, see RFC 4795 Section 2.7 */
+#define LLMNR_TRANSACTION_ATTEMPTS_MAX 3
+
+/* Maximum attempts to send MDNS requests, see RFC 6762 Section 8.1 */
+#define MDNS_TRANSACTION_ATTEMPTS_MAX 3
+
+#define TRANSACTION_ATTEMPTS_MAX(p) (\
+                                     (p) == DNS_PROTOCOL_LLMNR ?        \
+                                     LLMNR_TRANSACTION_ATTEMPTS_MAX :   \
+                                     (p) == DNS_PROTOCOL_MDNS ?         \
+                                     MDNS_TRANSACTION_ATTEMPTS_MAX :    \
+                                     DNS_TRANSACTION_ATTEMPTS_MAX)
+
+/* After how much time to repeat classic DNS requests */
+#define TRANSACTION_UDP_TIMEOUT_USEC (SD_RESOLVED_QUERY_TIMEOUT_USEC / DNS_TRANSACTION_ATTEMPTS_MAX)
+
+/* When we do TCP, grant a much longer timeout, as in this case there's no need for us to quickly
+ * resend, as the kernel does that anyway for us, and we really don't want to interrupt it in that
+ * needlessly. */
+#define TRANSACTION_TCP_TIMEOUT_USEC (10 * USEC_PER_SEC)
+
+/* Should be longer than transaction timeout for a single UDP transaction, so we get at least
+ * one transaction retry before timeouting the whole candidate */
+#define CANDIDATE_EXPEDITED_TIMEOUT_USEC (TRANSACTION_UDP_TIMEOUT_USEC + 1 * USEC_PER_SEC)
diff -Nru systemd-252.33/src/shared/bus-wait-for-jobs.c systemd-252.36/src/shared/bus-wait-for-jobs.c
--- systemd-252.33/src/shared/bus-wait-for-jobs.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/bus-wait-for-jobs.c	2025-03-06 11:43:10.000000000 +0000
@@ -168,14 +168,15 @@
         static const struct {
                 const char *result, *explanation;
         } explanations[] = {
-                { "resources",   "of unavailable resources or another system error" },
-                { "protocol",    "the service did not take the steps required by its unit configuration" },
-                { "timeout",     "a timeout was exceeded" },
-                { "exit-code",   "the control process exited with error code" },
-                { "signal",      "a fatal signal was delivered to the control process" },
-                { "core-dump",   "a fatal signal was delivered causing the control process to dump core" },
-                { "watchdog",    "the service failed to send watchdog ping" },
-                { "start-limit", "start of the service was attempted too often" }
+                { "resources",       "of unavailable resources or another system error"                      },
+                { "protocol",        "the service did not take the steps required by its unit configuration" },
+                { "timeout",         "a timeout was exceeded"                                                },
+                { "exit-code",       "the control process exited with error code"                            },
+                { "signal",          "a fatal signal was delivered to the control process"                   },
+                { "core-dump",       "a fatal signal was delivered causing the control process to dump core" },
+                { "watchdog",        "the service failed to send watchdog ping"                              },
+                { "start-limit-hit", "start of the service was attempted too often"                          },
+                { "oom-kill",        "of an out-of-memory (OOM) siutation"                                   },
         };
 
         assert(service);
@@ -220,7 +221,7 @@
 
 finish:
         /* For some results maybe additional explanation is required */
-        if (streq_ptr(result, "start-limit"))
+        if (streq_ptr(result, "start-limit-hit"))
                 log_info("To force a start use \"%1$s reset-failed %2$s\"\n"
                          "followed by \"%1$s start %2$s\" again.",
                          systemctl,
diff -Nru systemd-252.33/src/shared/clock-util.c systemd-252.36/src/shared/clock-util.c
--- systemd-252.33/src/shared/clock-util.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/clock-util.c	2025-03-06 11:43:10.000000000 +0000
@@ -27,10 +27,11 @@
         if (fd < 0)
                 return -errno;
 
-        /* This leaves the timezone fields of struct tm
-         * uninitialized! */
+        /* This leaves the timezone fields of struct tm uninitialized! */
         if (ioctl(fd, RTC_RD_TIME, tm) < 0)
-                return -errno;
+                /* Some drivers return -EINVAL in case the time could not be kept, i.e. power loss
+                 * happened. Let's turn that into a clearly recognizable error */
+                return errno == EINVAL ? -ENODATA : -errno;
 
         /* We don't know daylight saving, so we reset this in order not
          * to confuse mktime(). */
diff -Nru systemd-252.33/src/shared/condition.c systemd-252.36/src/shared/condition.c
--- systemd-252.33/src/shared/condition.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/condition.c	2025-03-06 11:43:10.000000000 +0000
@@ -276,7 +276,9 @@
                 if (r < 0)
                         return log_debug_errno(r, "Failed to parse os-release: %m");
 
-                r = version_or_fnmatch_compare(operator, actual_value, word);
+                /* If not found, use "". This means that missing and empty assignments
+                 * in the file have the same result. */
+                r = version_or_fnmatch_compare(operator, strempty(actual_value), word);
                 if (r < 0)
                         return r;
                 if (!r)
diff -Nru systemd-252.33/src/shared/copy.c systemd-252.36/src/shared/copy.c
--- systemd-252.33/src/shared/copy.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/copy.c	2025-03-06 11:43:10.000000000 +0000
@@ -1052,11 +1052,16 @@
                 if (fchmod(fdt, st->st_mode & 07777) < 0)
                         r = -errno;
 
+                /* Run hardlink context cleanup now because it potentially changes timestamps */
+                hardlink_context_destroy(&our_hardlink_context);
                 (void) copy_xattr(dirfd(d), fdt, copy_flags);
                 (void) futimens(fdt, (struct timespec[]) { st->st_atim, st->st_mtim });
-        } else if (FLAGS_SET(copy_flags, COPY_RESTORE_DIRECTORY_TIMESTAMPS))
+        } else if (FLAGS_SET(copy_flags, COPY_RESTORE_DIRECTORY_TIMESTAMPS)) {
+                /* Run hardlink context cleanup now because it potentially changes timestamps */
+                hardlink_context_destroy(&our_hardlink_context);
                 /* If the directory already exists, make sure the timestamps stay the same as before. */
                 (void) futimens(fdt, (struct timespec[]) { dt_st.st_atim, dt_st.st_mtim });
+        }
 
         if (copy_flags & COPY_FSYNC_FULL) {
                 if (fsync(fdt) < 0)
diff -Nru systemd-252.33/src/shared/dissect-image.c systemd-252.36/src/shared/dissect-image.c
--- systemd-252.33/src/shared/dissect-image.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/dissect-image.c	2025-03-06 11:43:10.000000000 +0000
@@ -2774,7 +2774,7 @@
                 a = hexmem(root_hash, root_hash_size);
                 b = hexmem(verity->root_hash, verity->root_hash_size);
 
-                return log_debug_errno(r, "Root hash in signature JSON data (%s) doesn't match configured hash (%s).", strna(a), strna(b));
+                return log_debug_errno(SYNTHETIC_ERRNO(EINVAL), "Root hash in signature JSON data (%s) doesn't match configured hash (%s).", strna(a), strna(b));
         }
 
         sig = json_variant_by_key(v, "signature");
diff -Nru systemd-252.33/src/shared/hwdb-util.c systemd-252.36/src/shared/hwdb-util.c
--- systemd-252.33/src/shared/hwdb-util.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/hwdb-util.c	2025-03-06 11:43:10.000000000 +0000
@@ -469,7 +469,7 @@
         _cleanup_fclose_ FILE *f = NULL;
         _cleanup_strv_free_ char **match_list = NULL;
         uint32_t line_number = 0;
-        int r, err;
+        int r;
 
         f = fopen(filename, "re");
         if (!f)
@@ -509,24 +509,23 @@
                                 break;
 
                         if (line[0] == ' ') {
-                                r = log_syntax(NULL, LOG_WARNING, filename, line_number, SYNTHETIC_ERRNO(EINVAL),
-                                               "Match expected but got indented property \"%s\", ignoring line.", line);
+                                log_syntax(NULL, LOG_WARNING, filename, line_number, 0,
+                                           "Match expected but got indented property \"%s\", ignoring line.", line);
                                 break;
                         }
 
                         /* start of record, first match */
                         state = HW_MATCH;
 
-                        err = strv_extend(&match_list, line);
-                        if (err < 0)
-                                return err;
-
+                        r = strv_extend(&match_list, line);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case HW_MATCH:
                         if (len == 0) {
-                                r = log_syntax(NULL, LOG_WARNING, filename, line_number, SYNTHETIC_ERRNO(EINVAL),
-                                               "Property expected, ignoring record with no properties.");
+                                log_syntax(NULL, LOG_WARNING, filename, line_number, 0,
+                                           "Property expected, ignoring record with no properties.");
                                 state = HW_NONE;
                                 match_list = strv_free(match_list);
                                 break;
@@ -534,18 +533,15 @@
 
                         if (line[0] != ' ') {
                                 /* another match */
-                                err = strv_extend(&match_list, line);
-                                if (err < 0)
-                                        return err;
-
+                                r = strv_extend(&match_list, line);
+                                if (r < 0)
+                                        return r;
                                 break;
                         }
 
                         /* first data */
                         state = HW_DATA;
-                        err = insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
-                        if (err < 0)
-                                r = err;
+                        (void) insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
                         break;
 
                 case HW_DATA:
@@ -557,16 +553,14 @@
                         }
 
                         if (line[0] != ' ') {
-                                r = log_syntax(NULL, LOG_WARNING, filename, line_number, SYNTHETIC_ERRNO(EINVAL),
-                                               "Property or empty line expected, got \"%s\", ignoring record.", line);
+                                log_syntax(NULL, LOG_WARNING, filename, line_number, 0,
+                                           "Property or empty line expected, got \"%s\", ignoring record.", line);
                                 state = HW_NONE;
                                 match_list = strv_free(match_list);
                                 break;
                         }
 
-                        err = insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
-                        if (err < 0)
-                                r = err;
+                        (void) insert_data(trie, match_list, line, filename, file_priority, line_number, compat);
                         break;
                 };
         }
diff -Nru systemd-252.33/src/shared/libfido2-util.c systemd-252.36/src/shared/libfido2-util.c
--- systemd-252.33/src/shared/libfido2-util.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/libfido2-util.c	2025-03-06 11:43:10.000000000 +0000
@@ -693,13 +693,17 @@
                         return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                "Token asks for PIN but doesn't advertise 'clientPin' feature.");
 
+                AskPasswordFlags askpw_flags = ASK_PASSWORD_ACCEPT_CACHED;
+
                 for (;;) {
                         _cleanup_(strv_free_erasep) char **pin = NULL;
 
-                        r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, 0, &pin);
+                        r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, askpw_flags, &pin);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to acquire user PIN: %m");
 
+                        askpw_flags &= ~ASK_PASSWORD_ACCEPT_CACHED;
+
                         r = FIDO_ERR_PIN_INVALID;
                         STRV_FOREACH(i, pin) {
                                 if (isempty(*i)) {
diff -Nru systemd-252.33/src/shared/machine-id-setup.c systemd-252.36/src/shared/machine-id-setup.c
--- systemd-252.33/src/shared/machine-id-setup.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/machine-id-setup.c	2025-03-06 11:43:10.000000000 +0000
@@ -60,7 +60,7 @@
                                 return 0;
                         }
 
-                } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN)) {
+                } else if (IN_SET(detect_vm(), VIRTUALIZATION_KVM, VIRTUALIZATION_AMAZON, VIRTUALIZATION_QEMU, VIRTUALIZATION_XEN, VIRTUALIZATION_BHYVE)) {
 
                         /* If we are not running in a container, see if we are running in a VM that provides
                          * a system UUID via the SMBIOS/DMI interfaces.  Such environments include QEMU/KVM
diff -Nru systemd-252.33/src/shared/serialize.c systemd-252.36/src/shared/serialize.c
--- systemd-252.33/src/shared/serialize.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/serialize.c	2025-03-06 11:43:10.000000000 +0000
@@ -23,10 +23,8 @@
 
         /* Make sure that anything we serialize we can also read back again with read_line() with a maximum line size
          * of LONG_LINE_MAX. This is a safety net only. All code calling us should filter this out earlier anyway. */
-        if (strlen(key) + 1 + strlen(value) + 1 > LONG_LINE_MAX) {
-                log_warning("Attempted to serialize overly long item '%s', refusing.", key);
-                return -EINVAL;
-        }
+        if (strlen(key) + 1 + strlen(value) + 1 > LONG_LINE_MAX)
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Attempted to serialize overly long item '%s', refusing.", key);
 
         fputs(key, f);
         fputc('=', f);
@@ -53,7 +51,10 @@
 }
 
 int serialize_item_format(FILE *f, const char *key, const char *format, ...) {
-        char buf[LONG_LINE_MAX];
+        _cleanup_free_ char *allocated = NULL;
+        char buf[256]; /* Something resonably short that fits nicely on any stack (i.e. is considerably less
+                        * than LONG_LINE_MAX (1MiB!) */
+        const char *b;
         va_list ap;
         int k;
 
@@ -61,18 +62,35 @@
         assert(key);
         assert(format);
 
+        /* First, let's try to format this into a stack buffer */
         va_start(ap, format);
         k = vsnprintf(buf, sizeof(buf), format, ap);
         va_end(ap);
 
-        if (k < 0 || (size_t) k >= sizeof(buf) || strlen(key) + 1 + k + 1 > LONG_LINE_MAX) {
-                log_warning("Attempted to serialize overly long item '%s', refusing.", key);
-                return -EINVAL;
+        if (k < 0)
+                return log_warning_errno(errno, "Failed to serialize item '%s', ignoring: %m", key);
+        if (strlen(key) + 1 + k + 1 > LONG_LINE_MAX) /* See above */
+                return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Attempted to serialize overly long item '%s', refusing.", key);
+
+        if ((size_t) k < sizeof(buf))
+                b = buf; /* Yay, it fit! */
+        else {
+                /* So the string didn't fit in the short buffer above, but was not above our total limit,
+                 * hence let's format it via dynamic memory */
+
+                va_start(ap, format);
+                k = vasprintf(&allocated, format, ap);
+                va_end(ap);
+
+                if (k < 0)
+                        return log_warning_errno(errno, "Failed to serialize item '%s', ignoring: %m", key);
+
+                b = allocated;
         }
 
         fputs(key, f);
         fputc('=', f);
-        fputs(buf, f);
+        fputs(b, f);
         fputc('\n', f);
 
         return 1;
diff -Nru systemd-252.33/src/shared/userdb.c systemd-252.36/src/shared/userdb.c
--- systemd-252.33/src/shared/userdb.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/shared/userdb.c	2025-03-06 11:43:10.000000000 +0000
@@ -773,6 +773,7 @@
                 /* If NSS isn't covered elsewhere, let's iterate through it first, since it probably contains
                  * the more traditional sources, which are probably good to show first. */
 
+                errno = 0;
                 pw = getpwent();
                 if (pw) {
                         _cleanup_free_ char *buffer = NULL;
diff -Nru systemd-252.33/src/stdio-bridge/stdio-bridge.c systemd-252.36/src/stdio-bridge/stdio-bridge.c
--- systemd-252.33/src/stdio-bridge/stdio-bridge.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/stdio-bridge/stdio-bridge.c	2025-03-06 11:43:10.000000000 +0000
@@ -244,9 +244,9 @@
                 t = usec_sub_unsigned(MIN(timeout_a, timeout_b), now(CLOCK_MONOTONIC));
 
                 struct pollfd p[3] = {
-                        { .fd = fd,            .events = events_a           },
-                        { .fd = STDIN_FILENO,  .events = events_b & POLLIN  },
-                        { .fd = STDOUT_FILENO, .events = events_b & POLLOUT },
+                        { .fd = fd,     .events = events_a           },
+                        { .fd = in_fd,  .events = events_b & POLLIN  },
+                        { .fd = out_fd, .events = events_b & POLLOUT },
                 };
 
                 r = ppoll_usec(p, ELEMENTSOF(p), t);
diff -Nru systemd-252.33/src/systemctl/systemctl-is-system-running.c systemd-252.36/src/systemctl/systemctl-is-system-running.c
--- systemd-252.33/src/systemctl/systemctl-is-system-running.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/systemctl/systemctl-is-system-running.c	2025-03-06 11:43:10.000000000 +0000
@@ -66,6 +66,10 @@
         }
 
         if (arg_wait && STR_IN_SET(state, "initializing", "starting")) {
+                /* The signal handler will allocate memory and assign to 'state', hence need to free previous
+                 * one before entering the event loop. */
+                state = mfree(state);
+
                 r = sd_event_loop(event);
                 if (r < 0) {
                         log_warning_errno(r, "Failed to get property from event loop: %m");
@@ -73,6 +77,8 @@
                                 puts("unknown");
                         return EXIT_FAILURE;
                 }
+
+                assert(state);
         }
 
         if (!arg_quiet)
diff -Nru systemd-252.33/src/test/test-condition.c systemd-252.36/src/test/test-condition.c
--- systemd-252.33/src/test/test-condition.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/test/test-condition.c	2025-03-06 11:43:10.000000000 +0000
@@ -1238,6 +1238,24 @@
         assert_se(condition_test(condition, environ) > 0);
         condition_free(condition);
 
+        /* Test shell style globs */
+
+        assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_LIKE$=*THISHOPEFULLYWONTEXIST*", false, false)));
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_THISHOPEFULLYWONTEXIST$=*rhel*", false, false)));
+        assert_se(condition_test(condition, environ) == 0);
+        condition_free(condition);
+
+        assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_LIKE!$=*THISHOPEFULLYWONTEXIST*", false, false)));
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
+        assert_se((condition = condition_new(CONDITION_OS_RELEASE, "ID_THISHOPEFULLYWONTEXIST!$=*rhel*", false, false)));
+        assert_se(condition_test(condition, environ) >= 0);
+        condition_free(condition);
+
         /* load_os_release_pairs() removes quotes, we have to add them back,
          * otherwise we get a string: "PRETTY_NAME=Debian GNU/Linux 10 (buster)"
          * which is wrong, as the value is not quoted anymore. */
diff -Nru systemd-252.33/src/test/test-fd-util.c systemd-252.36/src/test/test-fd-util.c
--- systemd-252.33/src/test/test-fd-util.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/test/test-fd-util.c	2025-03-06 11:43:10.000000000 +0000
@@ -347,6 +347,8 @@
                         test_close_all_fds_inner();
                 _exit(EXIT_SUCCESS);
         }
+        if (ERRNO_IS_PRIVILEGE(r))
+                return (void) log_tests_skipped("Lacking privileges for test in namespace with /proc/ overmounted");
         assert_se(r >= 0);
 
         if (!is_seccomp_available()) {
diff -Nru systemd-252.33/src/test/test-loop-block.c systemd-252.36/src/test/test-loop-block.c
--- systemd-252.33/src/test/test-loop-block.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/test/test-loop-block.c	2025-03-06 11:43:10.000000000 +0000
@@ -218,15 +218,11 @@
         dissected = dissected_image_unref(dissected);
 #endif
 
-        if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) {
-                log_tests_skipped("not running privileged");
-                return 0;
-        }
+        if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0)
+                return log_tests_skipped("not running privileged");
 
-        if (detect_container() > 0) {
-                log_tests_skipped("Test not supported in a container, requires udev/uevent notifications");
-                return 0;
-        }
+        if (detect_container() > 0)
+                return log_tests_skipped("Test not supported in a container, requires udev/uevent notifications");
 
         assert_se(loop_device_make(fd, O_RDWR, 0, UINT64_MAX, 0, LO_FLAGS_PARTSCAN, LOCK_EX, &loop) >= 0);
 
diff -Nru systemd-252.33/src/timedate/timedated.c systemd-252.36/src/timedate/timedated.c
--- systemd-252.33/src/timedate/timedated.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/timedate/timedated.c	2025-03-06 11:43:10.000000000 +0000
@@ -590,6 +590,8 @@
                 log_warning("/dev/rtc is busy. Is somebody keeping it open continuously? That's not a good idea... Returning a bogus RTC timestamp.");
         else if (r == -ENOENT)
                 log_debug("/dev/rtc not found.");
+        else if (r == -ENODATA)
+                log_debug("/dev/rtc has no valid time, power loss probably occurred?");
         else if (r < 0)
                 return sd_bus_error_set_errnof(error, r, "Failed to read RTC: %m");
         else
diff -Nru systemd-252.33/src/tmpfiles/tmpfiles.c systemd-252.36/src/tmpfiles/tmpfiles.c
--- systemd-252.33/src/tmpfiles/tmpfiles.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/tmpfiles/tmpfiles.c	2025-03-06 11:43:10.000000000 +0000
@@ -2048,7 +2048,7 @@
         if (r < 0)
                 return log_error_errno(r, "Failed to extract filename from path '%s': %m", i->path);
         if (r == O_DIRECTORY)
-                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating FIFO, is a directory.", i->path);
+                return log_error_errno(SYNTHETIC_ERRNO(EISDIR), "Cannot open path '%s' for creating symlink, is a directory.", i->path);
 
         pfd = path_open_parent_safe(i->path, i->allow_failure);
         if (pfd < 0)
diff -Nru systemd-252.33/src/udev/generate-keyboard-keys-list.sh systemd-252.36/src/udev/generate-keyboard-keys-list.sh
--- systemd-252.33/src/udev/generate-keyboard-keys-list.sh	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/udev/generate-keyboard-keys-list.sh	2025-03-06 11:43:10.000000000 +0000
@@ -3,7 +3,7 @@
 set -eu
 set -o pipefail
 
-${1:?} -dM -include linux/input.h - </dev/null | awk '
+${1:?} -dM -include "${2:?}" - </dev/null | awk '
     /\<(KEY_(MAX|MIN_INTERESTING))|(BTN_(MISC|MOUSE|JOYSTICK|GAMEPAD|DIGI|WHEEL|TRIGGER_HAPPY))\>/  { next }
     /^#define[ \t]+(KEY|BTN)_[^ ]+[ \t]+[0-9BK]/                                                    { print $2 }
 '
diff -Nru systemd-252.33/src/udev/meson.build systemd-252.36/src/udev/meson.build
--- systemd-252.33/src/udev/meson.build	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/udev/meson.build	2025-03-06 11:43:10.000000000 +0000
@@ -60,8 +60,9 @@
 generate_keyboard_keys_list = find_program('generate-keyboard-keys-list.sh')
 keyboard_keys_list_txt = custom_target(
         'keyboard-keys-list.txt',
+        input : files('../basic/linux/input.h'),
         output : 'keyboard-keys-list.txt',
-        command : [generate_keyboard_keys_list, cpp],
+        command : [generate_keyboard_keys_list, cpp, '@INPUT@'],
         capture : true)
 
 generate_keyboard_keys_gperf = find_program('generate-keyboard-keys-gperf.sh')
diff -Nru systemd-252.33/src/udev/udev-watch.c systemd-252.36/src/udev/udev-watch.c
--- systemd-252.33/src/udev/udev-watch.c	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/src/udev/udev-watch.c	2025-03-06 11:43:10.000000000 +0000
@@ -160,13 +160,13 @@
 
         if (ret_wd)
                 *ret_wd = wd;
-        r = 0;
+        r = 1;
 
 finalize:
         /* 5. remove symlink ID -> wd.
          * The file is always owned by the device. Hence, it is safe to remove it unconditionally. */
         if (unlinkat(dirfd, id, 0) < 0 && errno != ENOENT)
-                log_device_debug_errno(dev, errno, "Failed to remove '/run/udev/watch/%s': %m", id);
+                log_device_debug_errno(dev, errno, "Failed to remove '/run/udev/watch/%s', ignoring: %m", id);
 
         return r;
 }
@@ -245,7 +245,7 @@
 
         /* First, clear symlinks. */
         r = udev_watch_clear(dev, dirfd, &wd);
-        if (r < 0)
+        if (r <= 0)
                 return r;
 
         /* Then, remove inotify watch. */
diff -Nru systemd-252.33/test/fuzz/fuzz-compress/issue-36472 systemd-252.36/test/fuzz/fuzz-compress/issue-36472
--- systemd-252.33/test/fuzz/fuzz-compress/issue-36472	1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/test/fuzz/fuzz-compress/issue-36472	2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1 @@
+�000000000�00000000000000000000
diff -Nru systemd-252.33/test/fuzz/.gitattributes systemd-252.36/test/fuzz/.gitattributes
--- systemd-252.33/test/fuzz/.gitattributes	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/fuzz/.gitattributes	2025-03-06 11:43:10.000000000 +0000
@@ -1,5 +1,6 @@
 /*/*                -whitespace
 /fuzz-bus-match/*   binary
+/fuzz-compress/*    binary
 /fuzz-dhcp*/*       binary
 /fuzz-dns-packet/*  binary
 /fuzz-fido-id-desc/ binary
diff -Nru systemd-252.33/test/knot-data/knot.conf systemd-252.36/test/knot-data/knot.conf
--- systemd-252.33/test/knot-data/knot.conf	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/knot-data/knot.conf	2025-03-06 11:43:10.000000000 +0000
@@ -50,6 +50,7 @@
       ksk-submission: parent_zone_sbm
       nsec3-iterations: 0
       nsec3: on
+      nsec3-salt-length: 8
       propagation-delay: 1s
       signing-threads: 4
       zone-max-ttl: 1s
diff -Nru systemd-252.33/test/test-keymap-util/kbd-model-map systemd-252.36/test/test-keymap-util/kbd-model-map
--- systemd-252.33/test/test-keymap-util/kbd-model-map	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/test-keymap-util/kbd-model-map	2025-03-06 11:43:10.000000000 +0000
@@ -70,3 +70,4 @@
 es-dvorak		es	microsoftpro	dvorak		terminate:ctrl_alt_bksp
 lv			lv	pc105		apostrophe	terminate:ctrl_alt_bksp
 lv-tilde		lv	pc105		tilde		terminate:ctrl_alt_bksp
+ge			ge,us	pc105		-		terminate:ctrl_alt_bksp
diff -Nru systemd-252.33/test/test-network/conf/25-routing-policy-rule-manual.network systemd-252.36/test/test-network/conf/25-routing-policy-rule-manual.network
--- systemd-252.33/test/test-network/conf/25-routing-policy-rule-manual.network	1970-01-01 01:00:00.000000000 +0100
+++ systemd-252.36/test/test-network/conf/25-routing-policy-rule-manual.network	2025-03-06 11:43:10.000000000 +0000
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: LGPL-2.1-or-later
+[Match]
+Name=test1
+Name=test2
+
+[Link]
+ActivationPolicy=manual
+
+[Network]
+IPv6AcceptRA=no
+
+[RoutingPolicyRule]
+Family=both
+Priority=10
+SuppressPrefixLength=0
+Table=51819
+
+[RoutingPolicyRule]
+Family=both
+FirewallMark=911
+InvertRule=true
+Priority=11
+Table=51820
diff -Nru systemd-252.33/test/test-network/systemd-networkd-tests.py systemd-252.36/test/test-network/systemd-networkd-tests.py
--- systemd-252.33/test/test-network/systemd-networkd-tests.py	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/test-network/systemd-networkd-tests.py	2025-03-06 11:43:10.000000000 +0000
@@ -2626,6 +2626,45 @@
         print(output)
         self.assertIn('10113:	from all iif test1 lookup 1011', output)
 
+    def test_routing_policy_rule_manual(self):
+        # For issue #36244.
+        copy_network_unit(
+            '11-dummy.netdev',
+            '25-routing-policy-rule-manual.network')
+        start_networkd()
+        self.wait_operstate('test1', operstate='off', setup_state='configuring', setup_timeout=20)
+
+        check_output('ip link add test2 type dummy')
+        self.wait_operstate('test2', operstate='off', setup_state='configuring', setup_timeout=20)
+
+        networkctl('up', 'test2')
+        self.wait_online('test2:degraded')
+
+        # The request for the routing policy rules are bound to test1. Hence, we need to wait for the rules
+        # being configured explicitly.
+        for _ in range(20):
+            time.sleep(0.5)
+
+            output = check_output('ip -4 rule list table 51819')
+            if output != '10:	from all lookup 51819 suppress_prefixlength 0 proto static':
+                continue
+
+            output = check_output('ip -6 rule list table 51819')
+            if output != '10:	from all lookup 51819 suppress_prefixlength 0 proto static':
+                continue
+
+            output = check_output('ip -4 rule list table 51820')
+            if output != '11:	not from all fwmark 0x38f lookup 51820 proto static':
+                continue
+
+            output = check_output('ip -6 rule list table 51820')
+            if output != '11:	not from all fwmark 0x38f lookup 51820 proto static':
+                continue
+
+            break
+        else:
+            self.assertFalse(True)
+
     @expectedFailureIfRoutingPolicyPortRangeIsNotAvailable()
     def test_routing_policy_rule_port_range(self):
         copy_network_unit('25-fibrule-port-range.network', '11-dummy.netdev')
diff -Nru systemd-252.33/test/units/testsuite-64.sh systemd-252.36/test/units/testsuite-64.sh
--- systemd-252.33/test/units/testsuite-64.sh	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/test/units/testsuite-64.sh	2025-03-06 11:43:10.000000000 +0000
@@ -832,7 +832,7 @@
         "/dev/disk/by-label/$part_name" # ext4 partition
     )
     # Create a simple RAID 1 with an ext4 filesystem
-    echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..1} -v -f --level=1 --raid-devices=2
+    printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..1} -v -f --level=1 --raid-devices=2
     udevadm wait --settle --timeout=30 "$raid_dev"
     mkfs.ext4 -L "$part_name" "$raid_dev"
     udevadm wait --settle --timeout=30 "${expected_symlinks[@]}"
@@ -861,7 +861,7 @@
         "/dev/disk/by-label/$part_name" # ext4 partition
     )
     # Create a simple RAID 5 with an ext4 filesystem
-    echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..2} -v -f --level=5 --raid-devices=3
+    printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..2} -v -f --level=5 --raid-devices=3
     udevadm wait --settle --timeout=30 "$raid_dev"
     mkfs.ext4 -L "$part_name" "$raid_dev"
     udevadm wait --settle --timeout=30 "${expected_symlinks[@]}"
@@ -901,7 +901,7 @@
         "/dev/disk/by-id/md-uuid-$uuid-part3"
     )
     # Create a simple RAID 10 with an ext4 filesystem
-    echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..3} -v -f --level=10 --raid-devices=4
+    printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadm{0..3} -v -f --level=10 --raid-devices=4
     udevadm wait --settle --timeout=30 "$raid_dev"
     # Partition the raid device
     # Here, 'udevadm lock' is meaningless, as udevd does not lock MD devices.
@@ -954,7 +954,7 @@
         "/dev/disk/by-label/$part_name" # ext4 partition
     )
     # Create a RAID 10 with LVM + ext4
-    echo y | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadmlvm{0..3} -v -f --level=10 --raid-devices=4
+    printf 'y\ny\n' | mdadm --create "$raid_dev" --name "$raid_name" --uuid "$uuid" /dev/disk/by-id/ata-foobar_deadbeefmdadmlvm{0..3} -v -f --level=10 --raid-devices=4
     udevadm wait --settle --timeout=30 "$raid_dev"
     # Create an LVM on the MD
     lvm pvcreate -y "$raid_dev"
diff -Nru systemd-252.33/tools/dbus_exporter.py systemd-252.36/tools/dbus_exporter.py
--- systemd-252.33/tools/dbus_exporter.py	2024-12-01 13:25:05.000000000 +0000
+++ systemd-252.36/tools/dbus_exporter.py	2025-03-06 11:43:10.000000000 +0000
@@ -1,13 +1,21 @@
 #!/usr/bin/env python3
 # SPDX-License-Identifier: LGPL-2.1-or-later
+import os
 from argparse import ArgumentParser
 from pathlib import Path
 from subprocess import run, PIPE
 
 def extract_interfaces_xml(output_dir, executable):
+    # If proc is not mounted, set LD_ORIGIN_PATH so that shared/core libs can be found,
+    # as glibc looks at /proc/self/exe when resolving RPATH
+    env = os.environ.copy()
+    if not os.path.exists('/proc/self'):
+        env["LD_ORIGIN_PATH"] = executable.parent.as_posix()
+
     proc = run(
         args=[executable.absolute(), '--bus-introspect', 'list'],
         stdout=PIPE,
+        env=env,
         check=True,
         universal_newlines=True)
 
@@ -17,6 +25,7 @@
         proc = run(
             args=[executable.absolute(), '--bus-introspect', interface_name],
             stdout=PIPE,
+            env=env,
             check=True,
             universal_newlines=True)
 

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


Reply to: