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
kmod
less
llvm
lsof
lvm2
mdadm
@ -125,7 +124,6 @@ Packages=
socat
strace
tar
tmux
tree
util-linux
valgrind

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -15,7 +15,7 @@ at_exit() {
systemctl stop testsleep.service
rm -f /run/udev/udev.conf.d/timeout.conf
rm -f /run/udev/rules.d/99-testsuite.rules
killall --regexp '(|/usr/bin/)sleep'
pkill -f '(/usr/bin/)?sleep'
udevadm control --reload
ip link del "$IFNAME"
}
@ -60,7 +60,7 @@ done
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.
killall --regexp '(|/usr/bin/)sleep'
pkill -f '(/usr/bin/)?sleep'
udevadm settle --timeout=30
# 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
if [[ -z "$killed" ]]; then
if [[ -e /tmp/test-udev-marker ]]; then
killall --signal ABRT --regexp udev-worker
pkill -ABRT udev-worker
killed=1
fi
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
# To calculate the current value we need the anchor measurement
DIGEST_BASE="$(cat /run/systemd/nvpcr/test.anchor)"
DIGEST_MEASURED="$(echo -n "schrumpel" | openssl dgst -sha256 -binary | xxd -p -c200)"
DIGEST_EXPECTED="$(echo "$DIGEST_BASE$DIGEST_MEASURED" | xxd -r -p | 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" | 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')"
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"
# And calculate the new result
DIGEST_MEASURED2="$(echo -n "schnurz" | openssl dgst -sha256 -binary | xxd -p -c200)"
DIGEST_EXPECTED2="$(echo "$DIGEST_EXPECTED$DIGEST_MEASURED2" | xxd -r -p | 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" | tr '[:lower:]' '[:upper:]' | basenc --base16 -d | openssl dgst -sha256 -hex -r | cut -d' ' -f1)"
test "$DIGEST_ACTUAL2" = "$DIGEST_EXPECTED2"