]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
7 days agohomectl: drop redunant sort 41954/head
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 20:08:19 +0000 (22:08 +0200)] 
homectl: drop redunant sort

Claude points out that prompt_groups() already does the sort
in every loop, including the last.

7 days agotest-homectl-prompts: add manual test to exercise prompt functionality
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 11:21:30 +0000 (13:21 +0200)] 
test-homectl-prompts: add manual test to exercise prompt functionality

The prompt for groups is nice. The prompt for a shell could use some
love. Looking at this is much easier if we can invoke the code outside
in isolation.

I wrote this when looking at https://github.com/systemd/systemd/pull/41947,
where I wanted to see how the homectl prompt works with the changes.

7 days agohomectl: split out two prompt functions
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 11:01:16 +0000 (13:01 +0200)] 
homectl: split out two prompt functions

homectl.c is too long…

7 days agohomectl: fix error handling in shell_is_ok()
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 16:37:13 +0000 (18:37 +0200)] 
homectl: fix error handling in shell_is_ok()

Fixes f233132a67a4c2c6dff053afac2385f570e8e3fe.

7 days agoterminal-util: when prompting for a choice from a list, preselect longest prefix
Lennart Poettering [Tue, 5 May 2026 08:45:14 +0000 (10:45 +0200)] 
terminal-util: when prompting for a choice from a list, preselect longest prefix

If all entries of a menu prompt start with the same prefix, let's
preselect the prefix to enhance user experience.

This is particularly relevant when prompting for a disk to install
things on, as typically they all start with the same prefix /dev/, and
if there's only a single target medium discoverable, then we can even
fill it out fully.

7 days agotest-oomd: fix flakiness under sanitizers
Luca Boccassi [Tue, 5 May 2026 14:33:49 +0000 (15:33 +0100)] 
test-oomd: fix flakiness under sanitizers

The test asserts that pgscan is 0, but under sanitizers this sometimes
fails and shows up as 1. We cannot control what the kernel scans, and
with sanitizers the runtime can be slow enough it's possible that the
kernel does a pass on the cgroup of the unit test.
Instead of asserting that it's 0, assert that it's between 0 and 9,
which seems a reasonable range.

Fixes https://github.com/systemd/systemd/issues/37710

7 days agoman: EnvironmentFile= honors %h, not \$HOME
Simran Singh [Sat, 2 May 2026 18:52:10 +0000 (00:22 +0530)] 
man: EnvironmentFile= honors %h, not \$HOME

7 days agoupdate TODO
Lennart Poettering [Tue, 5 May 2026 15:24:48 +0000 (17:24 +0200)] 
update TODO

7 days agobootctl,mute-console,pcrextend,pcrlock,repart: allow connections from self
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 13:26:47 +0000 (15:26 +0200)] 
bootctl,mute-console,pcrextend,pcrlock,repart: allow connections from self

With SD_VARLINK_SERVER_ROOT_ONLY, we refuse all unprivileged operations.
This is silly, the user can and should be able to do anything that doesn't
require privileges.

E.g.:

$ SYSTEMD_LOG_LEVEL=debug varlinkctl introspect /usr/lib/systemd/systemd-pcrextend
Forking off Varlink child process '/usr/lib/systemd/systemd-pcrextend'.
Successfully forked off '(sd-vlexec)' as PID 568993.
varlink: Setting state idle-client
json-stream: Sending message: {"method":"org.varlink.service.GetInterfaceDescription","parameters":{"interface":"io.systemd.PCRExtend"}}
Skipping PR_SET_MM, as we don't have privileges.
varlink: Changing state idle-client → calling
varlink: Unprivileged client attempted connection, refusing.
Failed to run Varlink event loop: Operation not permitted
json-stream: Got POLLHUP from socket.
varlink: Changing state calling → pending-disconnect
varlink: Connection was closed.
Failed to issue org.varlink.service.GetInterfaceDescription() varlink call: Connection reset by peer

This and similar commands now work, e.g.

$ SYSTEMD_LOG_LEVEL=debug varlinkctl call --more ./build/bootctl io.systemd.BootControl.ListBootEntries {}
...
Failed to open directory "/efi": No such file or directory
File system "/boot" is not a FAT EFI System Partition (ESP) file system.
...
Method call failed: Permission denied
{
"origin" : "linux",
"errno" : 13,
"errnoName" : "EACCES"
}
Which is fine — we lack privileges to actually return a useful answer, but the
call itself should go through.

I didn't touch udevd, which refuses to run if it is not root, and does a lot of
privileged setup, so would refuse to start even if the check was removed.

7 days agotreewide: fix typos in the entire codebase
Diego Viola [Tue, 5 May 2026 11:22:55 +0000 (08:22 -0300)] 
treewide: fix typos in the entire codebase

Signed-off-by: Diego Viola <diego.viola@gmail.com>
7 days agoudev-builtin-tpm2-id: gracefully skip tpm2 identification if tss2-libs are not installed
Lennart Poettering [Tue, 5 May 2026 10:43:42 +0000 (12:43 +0200)] 
udev-builtin-tpm2-id: gracefully skip tpm2 identification if tss2-libs are not installed

Fixes: #41714
7 days agosystemd-sysinstall (this time on top of bootctl link) (#41877)
Lennart Poettering [Tue, 5 May 2026 15:20:47 +0000 (17:20 +0200)] 
systemd-sysinstall (this time on top of bootctl link) (#41877)

This is a reiteration of #38764, but this time on top of "bootctl link"
for installing a kernel, i.e. #41543, instead of "kernel-install".

It's the same as #41543, only adds three new commits on top.

7 days agotest: make TEST-64 btrfs_basic cleanup robust against reruns
Luca Boccassi [Tue, 5 May 2026 09:43:45 +0000 (10:43 +0100)] 
test: make TEST-64 btrfs_basic cleanup robust against reruns

The LUKS subtest in testcase_btrfs_basic leaves stale LUKS headers on
the underlying SCSI devices, so if the VM is rebooted the test fails
because the LUKS signature is still there and blkid finds it.

[    7.683] + udevadm lock ... mkfs.btrfs -f -L btrfs_root -U deadbeef-dead-dead-beef-000000000000 /dev/disk/by-id/scsi-0systemd_foobar_deadbeefbtrfs0
[    7.729]   Label: btrfs_root
[    7.729]   UUID:  deadbeef-dead-dead-beef-000000000000
[    7.743] + udevadm wait --settle --timeout=30 /dev/disk/by-id/scsi-0systemd_foobar_deadbeefbtrfs0 /dev/disk/by-uuid/deadbeef-dead-dead-beef-000000000000 /dev/disk/by-label/btrfs_root
[    7.788] sda: ... SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}": Added device node symlink "disk/by-label/encdisk0".
[   37.998] Timed out for waiting devices being initialized.
[   38.002] TEST-64-UDEV-STORAGE-btrfs_basic.service: Main process exited, code=exited, status=1/FAILURE

Likewise for the BTRFS UUID:

ERROR: non-unique UUID: deadbeef-dead-dead-beef-000000000001

So wipe that too.

7 days agoupdate TODO 41877/head
Lennart Poettering [Mon, 20 Apr 2026 10:34:48 +0000 (12:34 +0200)] 
update TODO

7 days agoci: add CI test for systemd-sysinstall
Lennart Poettering [Wed, 29 Apr 2026 19:49:58 +0000 (21:49 +0200)] 
ci: add CI test for systemd-sysinstall

7 days agosysinstall: new component
Lennart Poettering [Thu, 28 Aug 2025 09:51:11 +0000 (11:51 +0200)] 
sysinstall: new component

7 days agobootctl: allow extra files on 'link' be specified as literal data
Lennart Poettering [Mon, 20 Apr 2026 11:12:44 +0000 (13:12 +0200)] 
bootctl: allow extra files on 'link' be specified as literal data

7 days agoConvert systemd-analyze to option and verb macros (#41945)
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 11:47:17 +0000 (13:47 +0200)] 
Convert systemd-analyze to option and verb macros (#41945)

I thought that this would require some bigger changes, but it turns out
that the existing functionality is good enough with some minor
adjustments if used appropriately.

The behaviour of help_section() is changed to simplify all callers.

7 days agogithub: rename "systemd-import" to "importctl"
Max Chernoff [Fri, 1 May 2026 08:15:07 +0000 (02:15 -0600)] 
github: rename "systemd-import" to "importctl"

The user-facing components are the "systemd-importd.service" unit and
the "importctl" binary, so using these names makes more sense.

There _is_ a "systemd-import" binary, but it's in "/usr/lib/systemd/",
so this is a confusing name for a user-facing form.

7 days agosystemd-dissect: do not fail dissection on LUKS v1 partitions
Nandakumar Raghavan [Mon, 4 May 2026 09:31:59 +0000 (09:31 +0000)] 
systemd-dissect: do not fail dissection on LUKS v1 partitions

partition_is_luks2_integrity() was returning -EINVAL when it
encountered a non-LUKS2 header (e.g. LUKS v1), which caused the
caller to abort the entire disk dissection. A LUKS v1 partition
simply isn't LUKS2-with-integrity, so return 0 instead and let
dissection continue normally.

7 days agotest: skip TEST-70-TPM2.nvpcr check if pcrextend socket inactive
Luca Boccassi [Tue, 5 May 2026 08:52:29 +0000 (09:52 +0100)] 
test: skip TEST-70-TPM2.nvpcr check if pcrextend socket inactive

systemd-dissect --mtree calls io.systemd.PCRExtend over Varlink to extend
the verity NvPCR after activation, and the test then diffs the measure
log to find the new entry. But systemd-pcrextend.socket has
ConditionSecurity=measured-os, which fails when the firmware did not
initialize PCRs, so the test fails.

[   10.056930] systemd[1]: systemd-pcrextend.socket - TPM PCR Measurements skipped, unmet condition check ConditionSecurity=measured-os

Follow-up for 521a523ce0cdcf0d529bd566f3d64ae93f10419d

7 days agocore/varlink-metrics: expose ReloadCount as a metric
Simon Lucido [Mon, 4 May 2026 09:40:41 +0000 (11:40 +0200)] 
core/varlink-metrics: expose ReloadCount as a metric

Add ReloadCount to the io.systemd.Metrics family table so it can be
queried alongside other manager-level metrics via systemd-report.

Also extend the existing integration test to cross-check the value
returned by systemd-report against the D-Bus and Varlink transports
on every assertion.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Simon Lucido <simonlucido@meta.com>
7 days agoanalyze: convert to OPTION and VERB macros 41945/head
Zbigniew Jędrzejewski-Szmek [Mon, 4 May 2026 06:00:32 +0000 (08:00 +0200)] 
analyze: convert to OPTION and VERB macros

The logic that was tested in the previous commit is used to implement
the behaviour for unit-shell and other verbs without changes.

The compare-versions synopsis is shortened to "V1 [OP] V2" to make the
verb synopsis fit. Unusual capitalizaition of "Command" is changed to
"COMMAND" (it's a replace arg, not a fixed string), and some help
strings are adjusted. The order of options in --help is based on the
existing order in parse_argv(). The old order in --help was mostly
random. I think it might be good to figure out something more rational
here, but I'm leaving that as a separate step.

The urlification of dot(1) in the --help string is lost. It's hard to
do this with the help string being stored in a read-only section.
I think this is not worth the trouble to reimplement in the current
scheme.

7 days agotest-options: add a check for custom logic in systemd-analyze
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 07:59:16 +0000 (09:59 +0200)] 
test-options: add a check for custom logic in systemd-analyze

7 days agoshared/verbs: display default verb as "[verb]"
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 08:59:46 +0000 (10:59 +0200)] 
shared/verbs: display default verb as "[verb]"

7 days agoshared/help-util: automatically append ":" in sections
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 08:40:31 +0000 (10:40 +0200)] 
shared/help-util: automatically append ":" in sections

7 days agoresolve: enforce the search domain limit earlier (#41938)
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 09:12:25 +0000 (11:12 +0200)] 
resolve: enforce the search domain limit earlier  (#41938)

The search domain limit is already enforced by dns_search_domain_new(),
but in this case it's way too late. Let's enforce it during the first
loop to avoid unnecessary parsing.

---

Also, set a similar limit for NTAs - introduce a new constant, since
there's no pre-existing limit. I pulled the value from a thin air since
there's (AFAIK) no mandated maximum/minimum for NTAs, but given they're
supposed to be a manual and _temporary_ workarounds, hopefully 2K of
NTAs will be more than enough (if not, please yell).

Also note: the newly added error messages don't have the trailing "."
and similarly the newly introduced constant doesn't have the "u" suffix
to match the style of the surrounding code (and I didn't want to fix the
surrounding code to make the diff minimal). If this is not desirable,
please also yell.

7 days agocryptsetup: avoid a segfault when a keyfile is passed along with a TPM device (#41892)
Zbigniew Jędrzejewski-Szmek [Tue, 5 May 2026 09:10:25 +0000 (11:10 +0200)] 
cryptsetup: avoid a segfault when a keyfile is passed along with a TPM device (#41892)

A segfault is observed when both key_file and tpm2-device are
simultaneously passed to systemd-cryptsetup, e.g.:
  systemd-cryptsetup attach test_data /vol /my-pass tpm2-device=auto

The crash appears after commit 5c6aad9 but the flaw in the logic was
pre-existing.

Fixes #41867

7 days agotest: avoid nspawn failure due to scope in use in TEST-06-SELINUX
Luca Boccassi [Mon, 4 May 2026 22:41:10 +0000 (23:41 +0100)] 
test: avoid nspawn failure due to scope in use in TEST-06-SELINUX

TEST-06-SELINUX occasionally fails because repeated nspawn invocations use
the same machine name and scope:

TEST-06-SELINUX.sh[598]: Failed to allocate scope: Unit H.scope was already loaded or has a fragment file.

Use a different machine name/scope for each invocation in the test
case to avoid hitting this issue

7 days agotest: skip TEST-07-PID1.DeferReactivation with sanitizers
Luca Boccassi [Mon, 4 May 2026 20:06:02 +0000 (21:06 +0100)] 
test: skip TEST-07-PID1.DeferReactivation with sanitizers

This test relies on tight timers, and is flaky under sanitizers
as everything slows down a lot. Just skip it.

7 days agoupdate TODO
Lennart Poettering [Tue, 5 May 2026 06:02:07 +0000 (08:02 +0200)] 
update TODO

8 days agoresolve: limit the number NTAs to something sensible 41938/head
Frantisek Sumsal [Mon, 4 May 2026 20:07:46 +0000 (22:07 +0200)] 
resolve: limit the number NTAs to something sensible

8 days agoresolve: enforce the search domain limit earlier
Frantisek Sumsal [Mon, 4 May 2026 19:38:56 +0000 (21:38 +0200)] 
resolve: enforce the search domain limit earlier

The search domain limit is already enforced by dns_search_domain_new(),
but in this case it's way too late. Let's enforce it during the first
loop to avoid unnecessary parsing.

8 days agotest: suppress PCR public key auto-loading in TEST-70-TPM2 dditest
Luca Boccassi [Mon, 4 May 2026 13:42:03 +0000 (14:42 +0100)] 
test: suppress PCR public key auto-loading in TEST-70-TPM2 dditest

The dditest block calls systemd-repart with Encrypt=tpm2 but without
--tpm2-public-key-pcrs=. Since systemd-stub drops
/run/systemd/tpm2-pcr-public-key.pem when booting from a signed UKI
systemd-repart auto-loads it and enrolls a signed PCR policy, and
then systemd-cryptsetup tpm2-device=auto has no matching signature file,
so unlock fails.

--tpm2-public-key= is not enough as the default kicks in then.

Follow-up for cd18656d47710c251a44a8f5f9d616151a909152

8 days agotest: make TEST-64 mdadm_lvm cleanup robust against reruns
Luca Boccassi [Sun, 3 May 2026 21:16:15 +0000 (22:16 +0100)] 
test: make TEST-64 mdadm_lvm cleanup robust against reruns

mdadm --zero-superblock only wipes the MD metadata on the underlying
disks, not the LVM PV header that lives in the array data area. When
the VM is restarted and the test re-creates the array with the same
UUID, /dev/md127 exposes the old data including the LVM PV header, so
udev's 69-lvm.rules auto-triggers lvm-activate-mdlvm_vg.service which
races with the test's own pvcreate for exclusive access on /dev/md127.

Wipe the LVM signature off the MD device (and the underlying disks as
a belt-and-braces measure) to avoid the race on re-run, fixing failures
when the VM is rebooted instead of shut down.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
8 days agosemaphore: stop deleting all apt sources
Luca Boccassi [Mon, 4 May 2026 11:58:33 +0000 (12:58 +0100)] 
semaphore: stop deleting all apt sources

The image configuration was changed and the main sources are
now in a drop-in apt sources files too, so deleting the whole
drop-in directory breaks installing packages. Just delete the
disabled ones and chrome.

8 days agocore: Open netfilter socket only when needed
Valentin David [Mon, 4 May 2026 08:25:19 +0000 (10:25 +0200)] 
core: Open netfilter socket only when needed

On initrds where nfnetlink module is missing, trying to open
a NETLINK_NETFILTER netlink socket takes a lot of time then fails.
This makes boot noticibly slower. Even though probably no
unit in an initrd need netfilter.

So here we delay opening the socket until we know we need it.

8 days agotest: fix flaky TEST-04-JOURNAL.reload.sh due to service name collision
Luca Boccassi [Sun, 3 May 2026 22:31:59 +0000 (23:31 +0100)] 
test: fix flaky TEST-04-JOURNAL.reload.sh due to service name collision

write_to_journal() was called via $(...) command substitution, so
SERVICE_COUNTER++ ran in a subshell and never incremented in the
parent:

[ 1492.668302] TEST-04-JOURNAL.sh[15064]: + local service=test-0-18493.service
[ 1492.725882] TEST-04-JOURNAL.sh[15064]: + local service=test-0-18009.service
[ 1492.739643] TEST-04-JOURNAL.sh[15064]: + local service=test-0-18493.service
[ 1492.774586] TEST-04-JOURNAL.sh[15064]: + local service=test-0-25540.service
[ 1492.815664] TEST-04-JOURNAL.sh[15064]: + local service=test-0-15916.service
[ 1492.867067] TEST-04-JOURNAL.sh[15064]: + local service=test-0-20327.service
[ 1492.899077] TEST-04-JOURNAL.sh[15064]: + local service=test-0-86.service
[ 1497.289715] TEST-04-JOURNAL.sh[15064]: + local service=test-0-10849.service
[ 1497.335791] TEST-04-JOURNAL.sh[15064]: + local service=test-0-18009.service

With 99999 possible unit names collisions are rare but not impossible,
so every now and then a CI run fails.

Have write_to_journal() set a global SERVICE_NAME variable instead and
call it directly so SERVICE_COUNTER actually goes up through the test.

8 days agoTEST-70-TPM2: Test the key_file + tpm2-device= combo 41892/head
Vitaly Kuznetsov [Thu, 30 Apr 2026 14:44:45 +0000 (16:44 +0200)] 
TEST-70-TPM2: Test the key_file + tpm2-device= combo

When key_file is passed along with tpm2-device= to systemd-cryptsetup, the
logic is to try the blob as a TPM blob first, and then fall back to trying the
file as a regular key file. Check that this fallback works.

8 days agocryptsetup: avoid a segfault when a keyfile is passed along with a TPM device
Vitaly Kuznetsov [Thu, 30 Apr 2026 14:44:39 +0000 (16:44 +0200)] 
cryptsetup: avoid a segfault when a keyfile is passed along with a TPM device

When a keyfile is passed with tpm2-device=, e.g.,

 systemd-cryptsetup attach test_data /vol /my-pass tpm2-device=auto

the logic in attach_luks_or_plain_or_bitlk_by_tpm2() tries to process it as a
TPM blob first. This did not work properly because it passes n_blobs=1 to
acquire_tpm2_key(), and the key_file is only read when n_blobs == 0. As a
result, the code ends up calling tpm2_unseal(..., blobs=NULL, n_blobs=1, ...).

Before commit 5c6aad9 ("cryptsetup-tokens: Print tpm2-primary-alg: only when it
is known"), the segfault was not observed because tpm2_unseal() was bailing out
early when primary_alg == 0. However, after that change, it attempts to process
the blob (which is NULL) and crashes.

Fix this logic by passing n_blobs=0 to acquire_tpm2_key() so that it actually
reads the key_file. Additionally, assert 'blobs' in tpm2_unseal() as a
safeguard.

Fixes #41867

8 days agoman/sd-bus: add a note that tcp: is w/o encryption
Zbigniew Jędrzejewski-Szmek [Mon, 4 May 2026 08:10:13 +0000 (10:10 +0200)] 
man/sd-bus: add a note that tcp: is w/o encryption

8 days agodbus-manager: limit the number of states/patterns per query (#41891)
Lennart Poettering [Mon, 4 May 2026 08:07:04 +0000 (10:07 +0200)] 
dbus-manager: limit the number of states/patterns per query (#41891)

Let's cap the number of states/patterns per query to something
reasonable, i.e. max 256 states and 4K patterns per query.

---

Also, use the env assignments limit in a couple more places.

8 days agoboot: Try to load UKI from simple filesystem before LoadImage
Valentin David [Sat, 18 Apr 2026 13:09:00 +0000 (15:09 +0200)] 
boot: Try to load UKI from simple filesystem before LoadImage

When the source buffer is NULL, the firmware is supposed to try to load the UKI
with simple filesystem protocol then load file 2 protocol. But it seems
on some versions of AMI, it does not use simple filesystem protocol,
and then fails to load if the ESP was loaded from an El Torito boot
catalog. Trying to load the source buffer from the simple filesystem protocol
protocols seems work around this limitation.

Shim for example, also loads the source buffer before calling LoadImage. So it
seems to be a safe thing to do. We could also maybe in the future use load file
2 protocol if simple filesystem failed in the first place.

8 days agotest: make TEST-70-TPM2 and TEST-86-MULTI-PROFILE-UKI robust against reruns (#41922)
Zbigniew Jędrzejewski-Szmek [Mon, 4 May 2026 05:48:38 +0000 (07:48 +0200)] 
test: make TEST-70-TPM2 and TEST-86-MULTI-PROFILE-UKI robust against reruns (#41922)

These tests leave a lot of state around, and when the test is re-run,
for example due to the qemu bug that makes a VM reboot instead of
shutting down, it fails.

9 days agotest: make TEST-86-MULTI-PROFILE-UKI robust against reruns 41922/head
Luca Boccassi [Sun, 3 May 2026 15:33:38 +0000 (16:33 +0100)] 
test: make TEST-86-MULTI-PROFILE-UKI robust against reruns

When qemu reboots instead of shutting down after the last iteration,
the profile is already set to profile2 but the /root/encrypted.raw is
gone so the test fails. Reset the default boot entry at the end of the
test to make it robust against reruns.

Fixes https://github.com/systemd/systemd/issues/39553

9 days agotest: make TEST-70-TPM2 robust against reruns
Luca Boccassi [Sun, 3 May 2026 15:23:41 +0000 (16:23 +0100)] 
test: make TEST-70-TPM2 robust against reruns

The test leaves a lot of state around, and when the test is re-run,
for example due to the qemu bug that makes a VM reboot instead of
shutting down, it fails.

Do more cleanups in the traps.

[  162.642175] TEST-70-TPM2.sh[2815]: Calculated public key name: 000b2b66edc3a466e81059286aaf38d09ea42a7a9dcdf6ba3b664c62f0cae4ce4f66
[  162.642628] TEST-70-TPM2.sh[2815]: PolicyAuthorize calculated digest: 2caa740101f65734d50395d6abc64fa46015d40d1f5de239434578544e592a92
[  162.643681] TEST-70-TPM2.sh[2815]: Calculated NV index name: 000b439cfa1534815bbe8d33b80c56f5a8d17d36fe94a7782b23a37b50def5fc5eaa
[  162.645111] TEST-70-TPM2.sh[2815]: PolicyAuthorizeNV calculated digest: 69ee0e89fafe6b9df2cd6a5defbf74aa46cf6d92703e645d463549da4ba5e1a4
[  162.645407] TEST-70-TPM2.sh[2815]: Combined signed PCR policies and pcrlock policies cannot be calculated offline, currently.
[  162.649576] TEST-70-TPM2.sh[2815]: Releasing crypt device /dev/loop0 context.
[  162.652433] TEST-70-TPM2.sh[2815]: Releasing device-mapper backend.
[  162.653518] TEST-70-TPM2.sh[2815]: Closing read only fd for /dev/loop0.
[  162.654359] TEST-70-TPM2.sh[2815]: Closing read write fd for /dev/loop0.
[  162.654786] TEST-70-TPM2.sh[2815]: Failed to encrypt device: Operation not supported

Fixes https://github.com/systemd/systemd/issues/38241

9 days agotest: bump device timeout to 300s for TPM2 tests
Luca Boccassi [Sun, 3 May 2026 12:27:32 +0000 (13:27 +0100)] 
test: bump device timeout to 300s for TPM2 tests

Booting with TPM2 has become slower recently so tests are randomly
failing, try to bump the default device timeout in those test VMs

9 days agotest: fix json encoding issue due to backslashes
Luca Boccassi [Sat, 2 May 2026 23:06:56 +0000 (00:06 +0100)] 
test: fix json encoding issue due to backslashes

TEST-74-AUX-UTILS.sh[3782]: + varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Unit.List '{"name": "proc-sysrq\x2dtrigger.mount"}'
TEST-74-AUX-UTILS.sh[3783]: + jq -e .context.Mount
TEST-74-AUX-UTILS.sh[3782]: Failed to parse parameters at <argv[4]>:1:10: Invalid argument

Use jq to encode the input

9 days agotest: avoid getting stuck on /dev/fuse
Luca Boccassi [Sat, 2 May 2026 22:46:46 +0000 (23:46 +0100)] 
test: avoid getting stuck on /dev/fuse

On Fedora Rawhide checking /dev/fuse in the test is getting stuck and timing out:

[   47.930104] TEST-13-NSPAWN.sh[2588]: + testcase_fuse
[   47.930424] TEST-13-NSPAWN.sh[2589]: ++ cat
[   58.772538] audit: type=1131 audit(1777728357.726:778): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-importd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[  901.882562] audit: type=1131 audit(1777729200.830:782): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=systemd-tmpfiles-clean comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
Finishing after writing 176921 entries
qemu-system-x86_64: terminating on signal 15 from pid 70717 (/usr/bin/python3)

Wrap it with a timeout to avoid getting stuck forever

Follow-up for dc3223919f663b7c8b8d8d1d6072b4487df7709b

9 days agotest: make varlink StartTransient checks compatible with jq 1.6
Luca Boccassi [Sat, 2 May 2026 22:18:22 +0000 (23:18 +0100)] 
test: make varlink StartTransient checks compatible with jq 1.6

The new "varlinkctl --more StartTransient" subtest pipes a JSON-SEQ
stream of multiple records into "jq --seq -e ...". CentOS 9
ships jq 1.6, where -e only inspects the last input record's output:
when the trailing record (the final reply) doesn't match the
"select()" filter, jq exits non-zero even though earlier records
match, so the test fails.

Use --slurp which collapses the records into an array first and
returns a single bool.

Follow-up for 1cde1cc3bab595fe7b4e2befbfa08a01a172db0f

9 days agobuild(deps): bump the actions group with 6 updates
dependabot[bot] [Fri, 1 May 2026 10:59:43 +0000 (10:59 +0000)] 
build(deps): bump the actions group with 6 updates

Bumps the actions group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [github/codeql-action](https://github.com/github/codeql-action) | `4.32.4` | `4.35.2` |
| [actions/github-script](https://github.com/actions/github-script) | `8.0.0` | `9.0.0` |
| [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials) | `6.0.0` | `6.1.0` |
| [redhat-plumbers-in-action/gather-pull-request-metadata](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata) | `1.9.0` | `1.9.1` |
| [super-linter/super-linter](https://github.com/super-linter/super-linter) | `8.5.0` | `8.6.0` |
| [softprops/action-gh-release](https://github.com/softprops/action-gh-release) | `2.6.1` | `3.0.0` |

Updates `github/codeql-action` from 4.32.4 to 4.35.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/89a39a4e59826350b863aa6b6252a07ad50cf83e...95e58e9a2cdfd71adc6e0353d5c52f41a045d225)

Updates `actions/github-script` from 8.0.0 to 9.0.0
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/ed597411d8f924073f98dfc5c65a23a2325f34cd...3a2844b7e9c422d3c10d287c895573f7108da1b3)

Updates `aws-actions/configure-aws-credentials` from 6.0.0 to 6.1.0
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws-actions/configure-aws-credentials/compare/8df5847569e6427dd6c4fb1cf565c83acfa8afa7...ec61189d14ec14c8efccab744f656cffd0e33f37)

Updates `redhat-plumbers-in-action/gather-pull-request-metadata` from 1.9.0 to 1.9.1
- [Release notes](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata/releases)
- [Commits](https://github.com/redhat-plumbers-in-action/gather-pull-request-metadata/compare/b86d1eaf7038cf88a56b26ba3e504f10e07b0ce5...62fc85c7acd15db62a0bdf007c8dbeda86eaf3b6)

Updates `super-linter/super-linter` from 8.5.0 to 8.6.0
- [Release notes](https://github.com/super-linter/super-linter/releases)
- [Changelog](https://github.com/super-linter/super-linter/blob/main/CHANGELOG.md)
- [Commits](https://github.com/super-linter/super-linter/compare/61abc07d755095a68f4987d1c2c3d1d64408f1f9...9e863354e3ff62e0727d37183162c4a88873df41)

Updates `softprops/action-gh-release` from 2.6.1 to 3.0.0
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/153bb8e04406b158c6c84fc1615b65b24149a1fe...b4309332981a82ec1c5618f44dd2e27cc8bfbfda)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: actions/github-script
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: 6.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: redhat-plumbers-in-action/gather-pull-request-metadata
  dependency-version: 1.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: super-linter/super-linter
  dependency-version: 8.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
9 days agobuild(deps): bump meson from 1.10.2 to 1.11.1 in /.github/workflows
dependabot[bot] [Fri, 1 May 2026 10:55:59 +0000 (10:55 +0000)] 
build(deps): bump meson from 1.10.2 to 1.11.1 in /.github/workflows

Bumps [meson](https://github.com/mesonbuild/meson) from 1.10.2 to 1.11.1.
- [Release notes](https://github.com/mesonbuild/meson/releases)
- [Commits](https://github.com/mesonbuild/meson/compare/1.10.2...1.11.1)

---
updated-dependencies:
- dependency-name: meson
  dependency-version: 1.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
9 days agobuild(deps): bump systemd/mkosi
dependabot[bot] [Fri, 1 May 2026 10:59:56 +0000 (10:59 +0000)] 
build(deps): bump systemd/mkosi

Bumps [systemd/mkosi](https://github.com/systemd/mkosi) from 66d51024b7149f40be4702e84275c936373ace97 to 9a28ad20bbea61894ea7b971d318a71f4374cf3b.
- [Release notes](https://github.com/systemd/mkosi/releases)
- [Commits](https://github.com/systemd/mkosi/compare/66d51024b7149f40be4702e84275c936373ace97...9a28ad20bbea61894ea7b971d318a71f4374cf3b)

---
updated-dependencies:
- dependency-name: systemd/mkosi
  dependency-version: 9a28ad20bbea61894ea7b971d318a71f4374cf3b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
9 days agohwdb: add correct keyboard mapping for touchpad_toggle event on msi gs66 stealth...
kakolla [Sun, 3 May 2026 08:01:24 +0000 (01:01 -0700)] 
hwdb: add correct keyboard mapping for touchpad_toggle event on msi gs66 stealth laptop

9 days agocore: add ReloadCount to Manager and bump on successful reload
Simon Lucido [Mon, 20 Apr 2026 15:05:27 +0000 (17:05 +0200)] 
core: add ReloadCount to Manager and bump on successful reload

Introduce a counter that tracks how many configuration reloads have
been successfully completed by the manager. The increment lives in
manager_reload() right after the "point of no return", so failed
reload attempts that bail out earlier (e.g. during serialization)
do not bump the counter.

It is accessible as a new ReloadCount property to
org.freedesktop.systemd1.Manager (D-Bus) and ReloadCount to
io.systemd.Manager.Describe (Varlink).

Also add an integration test for ReloadCount
that verifies that the new ReloadCount property increments by one per
daemon-reload, accumulates correctly across multiple reloads, and that
D-Bus and Varlink return identical values. Also tests that the counter
reset after a reexec.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Simon Lucido <simonlucido@meta.com>
9 days agosiphash24: introduce siphash24_compress_iovec() helper function
Yu Watanabe [Sat, 2 May 2026 14:03:15 +0000 (23:03 +0900)] 
siphash24: introduce siphash24_compress_iovec() helper function

9 days agoiovec-util: introduce iovec_done_and_memdup()
Yu Watanabe [Sat, 2 May 2026 13:10:03 +0000 (22:10 +0900)] 
iovec-util: introduce iovec_done_and_memdup()

It is similar to free_and_strdup(), but for struct iovec.

9 days agosocket-util: introduce tos_to_priority()
Yu Watanabe [Sat, 2 May 2026 13:31:03 +0000 (22:31 +0900)] 
socket-util: introduce tos_to_priority()

This maps from TOS, which can be used for setsockopt(IPPROTO_IP, IP_TOS),
to socket priority, which can be used for setsockopt(SOL_SOCKET, SO_PRIORITY).

With this, we can set priority like the following:
```
uint8_t tos = IPTOS_CLASS_CS6;
setsockopt_int(fd, IPPROTO_IP, IP_TOS, tos);
setsockopt_int(fd, SOL_SOCKET, SO_PRIORITY, tos_to_priority(tos));
```

Co-authored with Google Gemini.

10 days agohwdb: Add missing Steelseries Arctis Pro Wireless
José Miguel Sarasola [Fri, 1 May 2026 17:30:42 +0000 (19:30 +0200)] 
hwdb: Add missing Steelseries Arctis Pro Wireless

The Hub for these headsets uses the following
USB entries:

Bus 007 Device 002: ID 0451:2036 Texas Instruments, Inc. TUSB2036 Hub
Bus 007 Device 003: ID 1038:1290 SteelSeries ApS Arctis Pro Wireless
Bus 007 Device 004: ID 1038:1294 SteelSeries ApS Arctis Pro Wireless

11 days agodbus: limit the number of env variables to something reasonable, vol. 2 41891/head
Frantisek Sumsal [Thu, 30 Apr 2026 12:03:47 +0000 (14:03 +0200)] 
dbus: limit the number of env variables to something reasonable, vol. 2

Turns out we can utilize this limit at a couple more places, so let's
move the previously defined limit constant to env-util.h and use it to
guard a couple more D-Bus methods. Also, bump it a bit, given it's meant
to be a safety cap that can't be hit in valid scenarios.

Follow-up for 7671b43cb88532cce2aa9ad12f777922206d6a42.

11 days agodbus-manager: limit the number of states/patterns per query
Frantisek Sumsal [Thu, 30 Apr 2026 09:59:26 +0000 (11:59 +0200)] 
dbus-manager: limit the number of states/patterns per query

Let's cap the number of states/patterns per query to something
reasonable, i.e. max 256 states and 4K patterns per query.

11 days agopo: Translated using Weblate (Greek)
Jim Spentzos [Fri, 1 May 2026 00:59:23 +0000 (00:59 +0000)] 
po: Translated using Weblate (Greek)

Currently translated at 100.0% (266 of 266 strings)

Co-authored-by: Jim Spentzos <jimspentzos2000@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/el/
Translation: systemd/main

11 days agobootctl: introduce "link" as alternative to kernel-install (#41543)
Lennart Poettering [Fri, 1 May 2026 08:38:22 +0000 (10:38 +0200)] 
bootctl: introduce "link" as alternative to kernel-install (#41543)

This adds "bootctl link" as alternative to kernel-install for installing
a UKI together with sidecards (confext, sysext, creds) as type 1
entries.

It has a much tigher focus than kernel-install, and doesn't do plugins
or anything.

It acts as "inverse" of the pre-existing "bootctl unlink".

11 days agoupdate TODO 41543/head
Lennart Poettering [Tue, 10 Feb 2026 11:39:02 +0000 (12:39 +0100)] 
update TODO

11 days agoci: add integration test for new bootctl functionality
Lennart Poettering [Fri, 17 Apr 2026 13:01:00 +0000 (15:01 +0200)] 
ci: add integration test for new bootctl functionality

11 days agobootctl: make sure "unlink" properly tracks "extra" files
Lennart Poettering [Fri, 20 Mar 2026 16:33:07 +0000 (17:33 +0100)] 
bootctl: make sure "unlink" properly tracks "extra" files

11 days agobootspec: generalize "addon" logic for all kinds of extra sidecars
Lennart Poettering [Tue, 10 Feb 2026 14:13:02 +0000 (15:13 +0100)] 
bootspec: generalize "addon" logic for all kinds of extra sidecars

Let's pick up all kinds of sidecars and show them, not just addons

This also fixes some issues regarding "root" directory handling.
In one context we'd resolve a directory claiming it was a "root", but it
wasn't.

Implements: https://github.com/uapi-group/specifications/pull/212

11 days agobootctl: add "link" command
Lennart Poettering [Mon, 9 Feb 2026 22:51:42 +0000 (23:51 +0100)] 
bootctl: add "link" command

11 days agobootctl: rework/modernize "unlink" and add Varlink API for it
Lennart Poettering [Fri, 10 Apr 2026 12:48:25 +0000 (14:48 +0200)] 
bootctl: rework/modernize "unlink" and add Varlink API for it

Among other things this changes tracking of the location of resources
during GC from using the BootEntrySource enum rather than a path, since
we have that and it is more efficient and easier to grok.

11 days agobootctl: add helpers that format a type1 menu entry filename from a commit nr
Lennart Poettering [Wed, 15 Apr 2026 14:09:48 +0000 (16:09 +0200)] 
bootctl: add helpers that format a type1 menu entry filename from a commit nr

11 days agobootspec: add bootspec_extract_osrelease() helper
Lennart Poettering [Fri, 20 Mar 2026 09:21:11 +0000 (10:21 +0100)] 
bootspec: add bootspec_extract_osrelease() helper

11 days agobootspec: make pe_find_uki_sections() non-static
Lennart Poettering [Fri, 13 Mar 2026 21:52:18 +0000 (22:52 +0100)] 
bootspec: make pe_find_uki_sections() non-static

11 days agobootspec: add boot_config_selected_entry() helper
Lennart Poettering [Wed, 15 Apr 2026 14:19:55 +0000 (16:19 +0200)] 
bootspec: add boot_config_selected_entry() helper

12 days agomkosi: update debian commit reference to 1302f123d9ab65bbaff5d95935eabfd659456550
Luca Boccassi [Thu, 30 Apr 2026 17:19:49 +0000 (18:19 +0100)] 
mkosi: update debian commit reference to 1302f123d9ab65bbaff5d95935eabfd659456550

1302f123d9 Restrict wildcard for new files
a6d0098d10 Install new files for upstream build
ce07fd7616 d/t/boot-and-services: use coreutils tunable in apparmor test (LP: #2125614)

12 days agoreport: report user and system CPU time per cgroup
Yaping Li [Wed, 29 Apr 2026 22:17:22 +0000 (15:17 -0700)] 
report: report user and system CPU time per cgroup

Extend io.systemd.CGroup.CpuUsage from a single per-unit nanosecond
counter to three rows distinguished by a "type" field of "total",
"user", or "system". The values come from cpu.stat's usage_usec,
user_usec and system_usec keys, read in a single keyed-attribute
fetch and cached on each CGroupInfo so each scrape only opens
cpu.stat once per cgroup.

12 days agofundamental: drop now-unused macro
Zbigniew Jędrzejewski-Szmek [Thu, 30 Apr 2026 07:31:46 +0000 (09:31 +0200)] 
fundamental: drop now-unused macro

Followup for 9d2f5b4611a47b9e5a31296cea70c2d8c6c86bbb.

12 days agooptions: get rid of "on_error" parameter to FOREACH_OPTION
Lennart Poettering [Thu, 30 Apr 2026 06:52:35 +0000 (08:52 +0200)] 
options: get rid of "on_error" parameter to FOREACH_OPTION

I am really not a fan of full code lines passed to macros as parameters.
Let's get rid of the 3rd parameter of FOREACH_OPTION() hence:

1. Let's return errors just as a regular value (though a negative one),
   that can be handled via a OPTION_ERROR case statement for the switch.
   This normalizes handling of the error, just like any other event
   returned by the option parser.

2. In order to avoid exploding the amount of boilerplate in each use
   (that just propagates the error on OPTION_ERROR), let's then
   introduce an explicit FOREACH_OPTION_OR_RETURN(), that returns from
   the calling function on its own (and makes that clear in the name).

Together this cleans up, normalizes the logic and shortens the code.

12 days agosd-json: limit the number of env variables to something reasonable
Frantisek Sumsal [Wed, 29 Apr 2026 14:50:57 +0000 (16:50 +0200)] 
sd-json: limit the number of env variables to something reasonable

Let's start with 1024, as that should be plenty for all sane use cases.

12 days agodns-question: limit the number of questions per query
Frantisek Sumsal [Wed, 29 Apr 2026 17:18:17 +0000 (19:18 +0200)] 
dns-question: limit the number of questions per query

Let's cap the number of question each query can have to something
reasonable - 128 questions per query should be more than enough for any
real-world scenario.

12 days agofundamental/cleanup: add CLEANUP_ELEMENTS() and DEFINE_POINTER_ARRAY_CLEAR_FUNC()
Daan De Meyer [Mon, 27 Apr 2026 18:03:51 +0000 (18:03 +0000)] 
fundamental/cleanup: add CLEANUP_ELEMENTS() and DEFINE_POINTER_ARRAY_CLEAR_FUNC()

DEFINE_POINTER_ARRAY_CLEAR_FUNC() generates a helper of the form
helper_array_clear(T *array, size_t n) that drops each element but does
not free the array itself, parallel to DEFINE_POINTER_ARRAY_FREE_FUNC()
for cases where the array has automatic storage duration.

CLEANUP_ELEMENTS() pairs with these helpers to provide a _cleanup_-like
attribute for fixed-size arrays: the bound is taken from ELEMENTSOF(),
and the helper is invoked across the elements at scope exit. Compared to
CLEANUP_ARRAY(), the storage is neither freed nor zeroed.

Migrate various logic across the tree over to the new macros.

sd-device: use DEFINE_POINTER_ARRAY_CLEAR_FUNC() for sd_device_unref_array_clear()

Replace the local device_unref_many() helper with the macro-generated
equivalent.

format-table: switch help-table arrays to CLEANUP_ELEMENTS()

Generate table_unref_array_clear() via DEFINE_POINTER_ARRAY_CLEAR_FUNC()
and convert the help-table arrays in bootctl, cryptenroll, nspawn,
repart and vmspawn to CLEANUP_ELEMENTS(). The arrays no longer need a
trailing NULL slot, so the size matches ELEMENTSOF() of the groups
array.

firewall-util: switch netlink message arrays to CLEANUP_ELEMENTS()

Generate sd_netlink_message_unref_array_clear() via
DEFINE_POINTER_ARRAY_CLEAR_FUNC() in place of the NULL-terminated
sd_netlink_message_unref_many(), and convert the two stack arrays of
sd_netlink_message pointers to CLEANUP_ELEMENTS().

12 days agoImprove error logging for fstat failure
Dan Anderson [Thu, 30 Apr 2026 02:53:10 +0000 (22:53 -0400)] 
Improve error logging for fstat failure

Small hygiene fix.  r must be >= 0 as per the prior statement (otherwise we would have returned).  This is really only going to be r == 0, which means return r; is return 0;  I'm updating this to use log_debug_errno

12 days agorepart: hide read-only block devices from candidates
Lennart Poettering [Wed, 29 Apr 2026 16:47:48 +0000 (18:47 +0200)] 
repart: hide read-only block devices from candidates

If they are read-only they are no candidates, since we cannot write to
them.

13 days agobinfmt-util: handle ELOOP/EACCES from automount in read-only bind mounts
Samuel Dainard [Tue, 28 Apr 2026 15:57:26 +0000 (15:57 +0000)] 
binfmt-util: handle ELOOP/EACCES from automount in read-only bind mounts

When /proc is bind-mounted read-only (common in mock/Koji buildroots,
containers, and other sandboxed environments), opening
/proc/sys/fs/binfmt_misc returns ELOOP if it is an automount point
that cannot be triggered in the read-only context.

Currently binfmt_mounted_and_writable() only handles ENOENT, so ELOOP
propagates as an error. This causes test-binfmt-util to fail with
SIGABRT and disable_binfmt() to log a spurious warning at shutdown.

Treat ELOOP and EACCES the same as ENOENT: binfmt_misc is not usably
available, return false.

Note: PR #37006 (merged April 2025) addressed ELOOP in the xstatfsat()
path, but the open() call in binfmt_mounted_and_writable() remained
unhandled.

Fixes #38070

13 days agoman: add section about systemd-boot Type#1 sidecars
Luca Boccassi [Wed, 29 Apr 2026 14:36:32 +0000 (15:36 +0100)] 
man: add section about systemd-boot Type#1 sidecars

Follow-up for 6b1324fb867d89147585ee20160dbe8f37beefc8

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoblockdev-list: fix per-element leak in block_device_array_free() (#41869)
Christian Brauner [Wed, 29 Apr 2026 16:28:16 +0000 (18:28 +0200)] 
blockdev-list: fix per-element leak in block_device_array_free() (#41869)

FOREACH_ARRAY declares 'i' as the iterator but the body passed 'd' (the
array base) to block_device_done(). Since mfree() leaves the field NULL
after the first call, element 0 is freed repeatedly while elements
1..N-1 leak their node, symlinks strv, model, vendor and subsystem.

The bug predates the sanitizer-instrumented callers. PR #41776's new
systemd-storage-block daemon runs blockdev_list() under ASan/LSan in
TEST-87-AUX-UTILS-VM and exposes it (15 allocs / 804 bytes leaked per
ListVolumes request). The fix also benefits repart and blockdev_list's
internal CLEANUP_ARRAY cleanup.

Follow-up for 9f6b2745eaa15be80568fde2a44d0a10ed6eb2a1

13 days agoConvert remaining udev progs to option macros (#41856)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 15:23:18 +0000 (17:23 +0200)] 
Convert remaining udev progs to option macros (#41856)

13 days agofollow-up for recently merged PRs (#41870)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 14:41:35 +0000 (16:41 +0200)] 
follow-up for recently merged PRs (#41870)

Just small stuff.

13 days agosd-json,user-record: store the strv size when extending it
Frantisek Sumsal [Wed, 29 Apr 2026 11:48:49 +0000 (13:48 +0200)] 
sd-json,user-record: store the strv size when extending it

So strv_push_with_size() doesn't have to recalculate the size every
time.

13 days agoupdate TODO 41870/head
Lennart Poettering [Wed, 29 Apr 2026 14:05:36 +0000 (16:05 +0200)] 
update TODO

This is mostly stuff discussed in #41776.

13 days agosd-boot: minor tweaks as follow-up for #41863
Lennart Poettering [Wed, 29 Apr 2026 13:52:29 +0000 (15:52 +0200)] 
sd-boot: minor tweaks as follow-up for #41863

This addresses some trivial points made by @keszybz in the PR review.

13 days agovolume: add an "io.systemd.StorageProvider" IPC API that is supposed to be used by...
Lennart Poettering [Wed, 29 Apr 2026 13:51:52 +0000 (15:51 +0200)] 
volume: add an "io.systemd.StorageProvider" IPC API that is supposed to be used by vmspawn/nspawn/pid1 to provide storage volumes in a generic fashion (#41776)

BindPath= in unit files, and --bind= in nspawn/vmspawn doesn't really
cut it to connect arbitrary storage infra to it. Let's do something
about it, and implement a simple, light-weight API for acquiring an fd
to a storage volume. Benefits:

1. the interface can be implemented by anyone, connecting anything to
vmspawn/nspawn/service management
2. very lose coupling: just bind a socket into a well-known dir, done
3. mounting can happen on-demand

13 days agoudevadm: convert verb dispatch to VERB macros 41856/head
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 12:52:26 +0000 (14:52 +0200)] 
udevadm: convert verb dispatch to VERB macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudev-builtin-hwdb: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 11:24:40 +0000 (13:24 +0200)] 
udev-builtin-hwdb: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoshared/options: add new helper option_parser_get_arg
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 10:20:58 +0000 (12:20 +0200)] 
shared/options: add new helper option_parser_get_arg

option_parser_next_arg() is renamed to option_parser_peek_next_arg()
to match option_parser_consume_next_arg().

A new helper is added option_parser_get_arg(…, n). It is a common pattern
to only need a single arg, and getting an array and extracting a single
item from it is too verbose.

13 days agosd-boot related work from #41543 (add "extra" stanza to bls type 1) (#41863)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 13:25:38 +0000 (15:25 +0200)] 
sd-boot related work from #41543 (add "extra" stanza to bls type 1) (#41863)

This implements the "extra" stanza for type 1 entries in systemd-boot,
see:

https://github.com/uapi-group/specifications/commit/bde167a46c866c44e1240120695f70f0bf70aadc

It comes with a really thorough test suite matching our currently level
of testing of systemd-boot (read: there is none, I ask you to trust me,
Claude, and your review on this one)...

Split out of #41543

13 days agoSmall cleanups in sd-varlink and sd-json (#41861)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 13:03:00 +0000 (15:03 +0200)] 
Small cleanups in sd-varlink and sd-json (#41861)

13 days agosd-bus: store the strv size when extending it (#41864)
Zbigniew Jędrzejewski-Szmek [Wed, 29 Apr 2026 13:01:12 +0000 (15:01 +0200)] 
sd-bus: store the strv size when extending it (#41864)

So strv_push_with_size() doesn't have to recalculate the size every
time.

13 days agoudev-builtin-blkid: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 11:24:36 +0000 (13:24 +0200)] 
udev-builtin-blkid: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-info: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:40:54 +0000 (11:40 +0200)] 
udevadm-info: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
13 days agoudevadm-trigger: convert to OPTION macros
Zbigniew Jędrzejewski-Szmek [Tue, 28 Apr 2026 09:36:00 +0000 (11:36 +0200)] 
udevadm-trigger: convert to OPTION macros

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>