1
0
mirror of https://github.com/systemd/systemd synced 2026-03-10 15:14:58 +01:00

Compare commits

..

2 Commits

Author SHA1 Message Date
Chris Down
a267656b07 oomd: Prevent corruption of cgroup paths in Killed signal
While looking at oomd behaviour in production I noticed that I always
get garbage cgroup paths for the Killed event. Looking more closely, I
noticed that while the signature is (string cgroup, string reason), we
currently erroneously pass the `OomdCGroupContext*` pointer itself as
the first argument to sd_bus_emit_signal(), rather than the ctx->path
string it contains.

The in-memory layout on affected machines in my case is:

    struct OomdCGroupContext {
        unsigned n_ref;
        /* padding */
        char *path;
        /* ... */
    }

...which explains the control characters, since they're garbage from
parsing n_ref, the path pointer, and later fields. At runtime, sd-bus
treats ctx as `const char *` and reads struct bytes as string data,
resulting in garbage being sent.

Pass ctx->path correctly so listeners receive the valid cgroup path.
2026-02-15 18:25:28 +01:00
Daan De Meyer
4e77671be7 mkosi: Remove some packages from the image
Let's slim down the image size a bit. None of the removed packages
should be required.
2026-02-15 12:51:00 +00:00
10 changed files with 8 additions and 26 deletions

View File

@ -106,7 +106,6 @@ Packages=
kexec-tools kexec-tools
kmod kmod
less less
llvm
lsof lsof
lvm2 lvm2
mdadm mdadm
@ -125,7 +124,6 @@ Packages=
socat socat
strace strace
tar tar
tmux
tree tree
util-linux util-linux
valgrind valgrind

View File

@ -17,15 +17,12 @@ Packages=
bind bind
bpf bpf
btrfs-progs btrfs-progs
compsize
cryptsetup cryptsetup
dbus-broker dbus-broker
dbus-broker-units dbus-broker-units
dhcp dhcp
elfutils elfutils
erofs-utils erofs-utils
f2fs-tools
git
gnutls gnutls
inetutils inetutils
iproute iproute
@ -44,7 +41,6 @@ Packages=
pkgconf pkgconf
polkit polkit
procps-ng procps-ng
psmisc
python-pexpect python-pexpect
python-psutil python-psutil
qrencode qrencode
@ -56,6 +52,5 @@ Packages=
stress-ng stress-ng
tgt tgt
tpm2-tools tpm2-tools
vim
# kernel-bootcfg --add-uri= is just too useful # kernel-bootcfg --add-uri= is just too useful
virt-firmware virt-firmware

View File

@ -30,7 +30,6 @@ Packages=
elfutils-devel elfutils-devel
elfutils-libs elfutils-libs
erofs-utils erofs-utils
git-core
glibc-langpack-de glibc-langpack-de
glibc-langpack-en glibc-langpack-en
gnutls-utils gnutls-utils

View File

@ -41,9 +41,7 @@ Packages=
dbus-user-session dbus-user-session
dmsetup dmsetup
erofs-utils erofs-utils
f2fs-tools
fdisk fdisk
git-core
gnutls-bin gnutls-bin
hostname hostname
iproute2 iproute2
@ -64,7 +62,6 @@ Packages=
polkitd polkitd
pkgconf pkgconf
procps procps
psmisc
python3-pexpect python3-pexpect
python3-psutil python3-psutil
# kernel-bootcfg --add-uri= is just too useful # kernel-bootcfg --add-uri= is just too useful
@ -77,4 +74,3 @@ Packages=
tgt tgt
tpm2-tools tpm2-tools
tzdata tzdata
xxd

View File

@ -9,10 +9,8 @@ Release=rawhide
[Content] [Content]
Packages= Packages=
btrfs-progs btrfs-progs
compsize
dhcp-server dhcp-server
dnf5 dnf5
f2fs-tools
# Required for systemd-networkd-tests.py (netdevsim and sch_xxx modules) # Required for systemd-networkd-tests.py (netdevsim and sch_xxx modules)
kernel-modules-extra kernel-modules-extra
kernel-modules-internal kernel-modules-internal

View File

@ -40,9 +40,7 @@ Packages=
dhcp-server dhcp-server
docbook-xsl-stylesheets docbook-xsl-stylesheets
erofs-utils erofs-utils
f2fs-tools
gawk gawk
git-core
glibc-locale-base glibc-locale-base
gnutls gnutls
grep grep
@ -72,7 +70,6 @@ Packages=
policycoreutils policycoreutils
pkgconf pkgconf
procps4 procps4
psmisc
python3-pefile python3-pefile
python3-pexpect python3-pexpect
python3-psutil python3-psutil
@ -91,7 +88,6 @@ Packages=
tpm2.0-tools tpm2.0-tools
util-linux-systemd util-linux-systemd
veritysetup veritysetup
vim
# kernel-bootcfg --add-uri= is just too useful # kernel-bootcfg --add-uri= is just too useful
virt-firmware virt-firmware
xz xz

View File

@ -287,7 +287,7 @@ int oomd_cgroup_kill(Manager *m, OomdCGroupContext *ctx, bool recurse) {
"org.freedesktop.oom1.Manager", "org.freedesktop.oom1.Manager",
"Killed", "Killed",
"ss", "ss",
ctx, ctx->path,
"oom"); "oom");
return !set_isempty(pids_killed); return !set_isempty(pids_killed);

View File

@ -15,7 +15,7 @@ at_exit() {
systemctl stop testsleep.service systemctl stop testsleep.service
rm -f /run/udev/udev.conf.d/timeout.conf rm -f /run/udev/udev.conf.d/timeout.conf
rm -f /run/udev/rules.d/99-testsuite.rules rm -f /run/udev/rules.d/99-testsuite.rules
killall --regexp '(|/usr/bin/)sleep' pkill -f '(/usr/bin/)?sleep'
udevadm control --reload udevadm control --reload
ip link del "$IFNAME" ip link del "$IFNAME"
} }
@ -60,7 +60,7 @@ done
grep -q -F 'ID_PROCESSING=1' "/run/udev/data/n${IFINDEX}" grep -q -F 'ID_PROCESSING=1' "/run/udev/data/n${IFINDEX}"
# Forcibly kill sleep command invoked by the udev rule to finish processing the add event. # Forcibly kill sleep command invoked by the udev rule to finish processing the add event.
killall --regexp '(|/usr/bin/)sleep' pkill -f '(/usr/bin/)?sleep'
udevadm settle --timeout=30 udevadm settle --timeout=30
# Check if ID_PROCESSING flag is unset, and the device units are active. # Check if ID_PROCESSING flag is unset, and the device units are active.

View File

@ -83,7 +83,7 @@ run_test_killed() {
for _ in {1..40}; do for _ in {1..40}; do
if [[ -z "$killed" ]]; then if [[ -z "$killed" ]]; then
if [[ -e /tmp/test-udev-marker ]]; then if [[ -e /tmp/test-udev-marker ]]; then
killall --signal ABRT --regexp udev-worker pkill -ABRT udev-worker
killed=1 killed=1
fi fi
elif grep -q 'UDEV_WORKER_FAILED=1' "$TMPDIR"/monitor.txt; then elif grep -q 'UDEV_WORKER_FAILED=1' "$TMPDIR"/monitor.txt; then

View File

@ -38,8 +38,8 @@ test -f /run/systemd/nvpcr/test.anchor
/usr/lib/systemd/systemd-pcrextend --nvpcr=test schrumpel /usr/lib/systemd/systemd-pcrextend --nvpcr=test schrumpel
# To calculate the current value we need the anchor measurement # To calculate the current value we need the anchor measurement
DIGEST_BASE="$(cat /run/systemd/nvpcr/test.anchor)" DIGEST_BASE="$(cat /run/systemd/nvpcr/test.anchor)"
DIGEST_MEASURED="$(echo -n "schrumpel" | openssl dgst -sha256 -binary | xxd -p -c200)" DIGEST_MEASURED="$(echo -n "schrumpel" | openssl dgst -sha256 -hex -r | cut -d' ' -f1)"
DIGEST_EXPECTED="$(echo "$DIGEST_BASE$DIGEST_MEASURED" | xxd -r -p | openssl dgst -sha256 -binary | xxd -p -c200)" DIGEST_EXPECTED="$(echo "$DIGEST_BASE$DIGEST_MEASURED" | tr '[:lower:]' '[:upper:]' | basenc --base16 -d | openssl dgst -sha256 -hex -r | cut -d' ' -f1)"
DIGEST_ACTUAL="$(systemd-analyze nvpcrs test --json=pretty | jq -r '.[] | select(.name=="test") | .value')" DIGEST_ACTUAL="$(systemd-analyze nvpcrs test --json=pretty | jq -r '.[] | select(.name=="test") | .value')"
test "$DIGEST_ACTUAL" = "$DIGEST_EXPECTED" test "$DIGEST_ACTUAL" = "$DIGEST_EXPECTED"
@ -49,6 +49,6 @@ DIGEST_ACTUAL2="$(systemd-analyze nvpcrs test --json=pretty | jq -r '.[] | selec
test "$DIGEST_ACTUAL2" != "$DIGEST_EXPECTED" test "$DIGEST_ACTUAL2" != "$DIGEST_EXPECTED"
# And calculate the new result # And calculate the new result
DIGEST_MEASURED2="$(echo -n "schnurz" | openssl dgst -sha256 -binary | xxd -p -c200)" DIGEST_MEASURED2="$(echo -n "schnurz" | openssl dgst -sha256 -hex -r | cut -d' ' -f1)"
DIGEST_EXPECTED2="$(echo "$DIGEST_EXPECTED$DIGEST_MEASURED2" | xxd -r -p | openssl dgst -sha256 -binary | xxd -p -c200)" DIGEST_EXPECTED2="$(echo "$DIGEST_EXPECTED$DIGEST_MEASURED2" | tr '[:lower:]' '[:upper:]' | basenc --base16 -d | openssl dgst -sha256 -hex -r | cut -d' ' -f1)"
test "$DIGEST_ACTUAL2" = "$DIGEST_EXPECTED2" test "$DIGEST_ACTUAL2" = "$DIGEST_EXPECTED2"