Commit Graph
89045 Commits
Author SHA1 Message Date
Christian Goeschel Ndjomouo df87d75038 doc: bump util-linux baseline to v2.42
This baseline bump is mainly to support the secure mode feature
in more(1) that has been made available since util-linux v2.42.

Signed-off-by: Christian Goeschel Ndjomouo <cgoesc2@wgu.edu>
2026-04-27 13:06:25 -04:00
Christian Goeschel Ndjomouo 84e53b8cfc man: document secure mode support for the more(1) pager
Signed-off-by: Christian Goeschel Ndjomouo <cgoesc2@wgu.edu>
2026-04-27 13:04:43 -04:00
Christian Goeschel Ndjomouo 81d23b58e8 shared/pager: add support for more(1) pager in secure mode
The more(1) pager (part of util-linux) now supports secure mode,
which can be enabled with the PAGERSECURE environment variable.

Adding support for more(1) in secure mode serves as an alternative
for systems that do not have less installed or for users who prefer
it.

Commit d2fce960f9cac740 introduced secure mode in more(1) and the
new feature is available in version 2.42 of util-linux.

Signed-off-by: Christian Goeschel Ndjomouo <cgoesc2@wgu.edu>
2026-04-27 13:04:43 -04:00
Kai Lüke 70d75c22d7 machine-register: don't unref borrowed varlink reply
ASAN showed a use-after-free error for systemd-vmspawn's
machine_register call because the reply got accessed and freed again
through _cleanup. The same problem exists in two
verb_machine_control_one/unregister_machine.
Fix these call sites to not set up _cleanup.
2026-04-27 22:14:05 +09:00
Kai Lüke 41cf689121 nsresource: fix buffer overrun reported by ASAN
This came up when running systemd-vmspawn with ASAN to fix another bug
and thus I had to fix this overrun here first: The dispatch tables were
missing the terminator, add it.
2026-04-27 22:14:05 +09:00
Kai Lüke 4dbcc319ca fork-notify: Use callback instead of argv NULL code path with return
In 012d87c1fc/cc8f398202 it was made possible for fork_notify() to
return in the child but at that point all FDs were closed and the
_cleanup path from the return causes assertion failures due to invalid
FDs in notify_event_source/event, leading to a vmspawn failing to start
with a SIGABRT logged in coredump.
Instead of TAKE_PTR on a bunch of things which is fragile, rather avoid
the return and instead add an explicit callback handler and guarantee
to exit directly after it. A userdata argument is also added but not
used yet I think it's quite normal to have for a callback.
2026-04-27 22:14:05 +09:00
Christian Brauner 0d6d2c9ebd vmspawn-varlink: treat QMP disconnect as success for Terminate
QMP "quit" tells QEMU to exit, which races the reply with the socket
EOF: sometimes the disconnect lands in qmp_client_fail_pending() with
-ECONNRESET before the reply has been parsed. The shared completion
callback then translates that into io.systemd.MachineInstance.NotConnected,
turning the desired outcome into a varlink error.

This is exactly what TEST-87-AUX-UTILS-VM exposes during its repeated
start/pause/resume/terminate stress loop: a successful Pause/Describe
followed milliseconds later by a Terminate that fails with NotConnected
when the disconnect path wins the race.

Give Terminate its own completion callback that treats disconnect-class
errors as success, since QEMU shutting down is the whole point of "quit".
The other simple commands (Pause, Resume, PowerOff, Reboot) keep the
existing semantics: they expect QMP to remain alive, so NotConnected is
the correct reply for them.

Link: https://github.com/systemd/systemd/actions/runs/24986080288/job/73159585425?pr=41835
Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
2026-04-27 15:07:26 +02:00
Michael Vogt 1cde1cc3ba test: add varlink io.systemd.Unit.StartTransient() test
This commit adds a bunch of integration tests for the new varlink
based io.systemd.Unit.StartTransient().
2026-04-27 13:49:24 +02:00
Michael Vogt 913b81735e core: add io.systemd.Unit.StartTransient() to the varlink API
This commit adds a simple version of io.systemd.Unit.StartTransient
for varlink. It is similar to the dbus version, but there is a key
difference:
1. Instead of building the unit from key/value properties it
   takes a json object in the "service" parameter. It is also
   only implementing a minimal set of what can be done with a
   service (for now)
2. No aux units (for now)
3. When called with --more the varlink socket can notify about
   unit job and state changes controlled via a bool on the
   varlink call inputs: notify{Job,Unit}Changes

We use the new io.systemd.Job interface when outputing the
io.systemd.Unit.StartTransient result as it makes the output
nice and mirrors the input.

Note that the property names follow the D-Bus naming to make a
future "systemctl show" transition from D-Bus -> varlink easier.

Because UnitContext is now also used for the inputs we need
to make a bunch of fields `SD_VARLINK_NULLABLE` so that the
input is even accepted. This does not affect the output, it
is still fully populated, just the schema. The ID of UnitContext
is still required.

Thanks to ikruglov and Lennart for their excellent feedback on
this.
2026-04-27 13:49:24 +02:00
Michael Vogt 8edd9b2b66 core: extract manager_setup_transient_unit() helper
Extract the transient unit setup logic from transient_unit_from_message()
in dbus-manager.c into a shared helper.

This prepares for reuse by the varlink StartTransient implementation.
2026-04-27 13:49:24 +02:00
Michael Vogt 9c39db197b varlink: add new io.systemd.Job interface
This commit creates a new varlink-io.systemd.Job.c file and puts
the job related varlink types into this file. Those will be
used by the upcoming io.systemd.Unit.StartTransient.

Note that the property names follow the D-Bus naming to make a
future "systemctl show" transition from D-Bus -> varlink easier.

Thanks to @ikruglov for suggesting this preparation commit and
to Lennart for suggesting the D-Bus compatibility considerations.
2026-04-27 13:49:19 +02:00
Zbigniew Jędrzejewski-Szmek a6e694025a shared/options: add whitespace to OPTION_COMMON definitions
Initially I thought that there'd be just a handful, but the list
has grown over time and all bunched up together they are hard to
read.
2026-04-27 11:33:38 +02:00
Zbigniew Jędrzejewski-Szmek dbe3602abe nspawn,vmspawn: fix state optarg uses 2026-04-27 11:33:13 +02:00
Zbigniew Jędrzejewski-Szmek 5ff0ccaf8b tree-wide: change option_parse() to return option and arg via internal state
It was requested to make the 'c', 'opt', and 'arg' params the same, i.e.
defined through the FOREACH_OPTION macro. But we can't do that easily,
because 'c' was defined in the for loop definition, and we can only
define variables of the same type in that way. Also, in some cases we
need only 'c', in other cases with need 'c' and 'arg, in some cases 'c'
and 'opt', and in other cases all three. We'd need to either
conditionalize or mark those variables with _unused_ to deal with
compiler warnings. But a different approach works quite nicely: add
state.opt and state.arg to show the current option and it's argument.
(The short names are picked on purpose to reduce verbosity since those
are used a lot.)
2026-04-27 11:33:10 +02:00
Zbigniew Jędrzejewski-Szmek d92b511e4a Convert udev helper programs to option macros (#41820) 2026-04-27 11:22:23 +02:00
Daan De Meyer 2d892207a1 fs-util: Some followups for xopenat_full() 2026-04-27 11:01:40 +02:00
Lennart Poettering 78208556b2 job: add a "finished" state for jobs
So far when a job completed we'd never transition into any new state,
we'd just do some final processing work (such as notifying clients) and
destroy it.

Let's change that, and briefly enter a final state: "finished". This is
useful so that code that notifies clients can generically send the
quadruplet of id, type, state, result for any change notification and
naturally can communicate job completion that way: by setting the state
field to "finished".

Prompted by the discussions in: #41583
2026-04-27 09:57:22 +02:00
Zbigniew Jędrzejewski-Szmek 33a37278aa iocost: convert to the new option parser
--help output only has changes expected in the new style.

Co-developed-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 09:14:50 +02:00
Zbigniew Jędrzejewski-Szmek 05fea7df1b scsi_id: convert to the new option parser
Common page-code parsing extracted into a parse_page_code() helper.

While at it, return real error values (-EINVAL, etc.) rather than -1,
and rename retval to r throughout for consistency.

The body of main is moved to new run. The closing of logging file
descriptors is dropped. They will be closed automatically anyway. Not
sure what the original purpose of that code was. The code is also
modernized in various places… though more changes could be made. The
return convention of help() and similar functions is changed to usual
negative/0/1, where 0 means that the caller should quit.

set_inq_values would return positive error values too, which was
previously ignored. It's not entirely clear, but that doesn't seem
to have been on purpose.
2026-04-27 09:14:50 +02:00
Yu Watanabe f0483f308a format-table: fix potential segfault
In format-table.h, TABLE_IN_ADDR is commented as "Takes a union in_addr_union
(or a struct in_addr)". However, if we pass struct in_addr to table_add_many(),
the function reads more than the size of the struct.
2026-04-27 11:11:35 +09:00
Lennart Poettering bc42f7574c preparatory work for the storage provider work in #41776 (#41814)
nothing earth shattering, but generally useful. without #41776 it has no
immediate users though
2026-04-26 23:44:02 +02:00
Luca Boccassi b76e18ce9a various trivial tweaks (#41828) 2026-04-26 22:40:01 +01:00
Lennart Poettering 71d82cc638 blockdev-list: make BLOCKDEV_LIST_IGNORE_ROOT suppress all definitions of the root disk
There are various definitions of the root disk, let's suppress them all if
the flag is set. So far only the outermost is suppressed, which is a bit
weird, given it's "further away" from the rootfs.
2026-04-26 21:45:28 +02:00
Lennart Poettering 41a8cc281e blockdev-list: pick up read_only property 2026-04-26 21:21:49 +02:00
Lennart Poettering 5827ff2b9d fs-util: add XO_AUTO_RW_RO 2026-04-26 21:21:49 +02:00
Lennart Poettering f0abcd5e0f format-table: add tristate field 2026-04-26 21:21:49 +02:00
Lennart Poettering 45ceb97f6a path-lookup: add state_directory_generic() helper inspired by runtime_directory_generic() 2026-04-26 21:21:49 +02:00
Lennart Poettering cde589df88 help-util: reword comment a bit
Based on comments here:

https://github.com/systemd/systemd/pull/41805#discussion_r3141746275
2026-04-26 21:04:07 +02:00
Lennart Poettering 1851a76d6f notify: we typically say 'service manager' not 'init system', do so here too 2026-04-26 21:04:07 +02:00
Frantisek Sumsal bad594f79a ssh-proxy: add a missing dispatch table sentinel
Which was accidentally dropped in e6be5fb720.

Follow-up for e6be5fb720.
2026-04-26 20:59:37 +02:00
Lennart Poettering a9122433c9 varlink: address some trivial points Claude found
Just addressing Claude's last review from #41815
2026-04-26 20:50:09 +02:00
Christian Brauner 114ad136c0 varlink-util: add generic code that calls out to a 'hook' directory o… (#41815)
…f sockets
2026-04-26 17:31:52 +02:00
Zbigniew Jędrzejewski-Szmek 4339197f5d shared/options: split out helper to format -o/--option= 2026-04-26 12:34:14 +02:00
Zbigniew Jędrzejewski-Szmek beea13b9d1 ata_id: convert to the new option parser
The commandline check is tightened to reject extra arguments.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 12:34:13 +02:00
Zbigniew Jędrzejewski-Szmek 3ad76abc43 cdrom_id: convert to the new option parser
The commandline check is tightened to reject extra arguments.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 12:34:13 +02:00
Zbigniew Jędrzejewski-Szmek 9286f1f299 dmi_memory_id: convert to the new option parser
For some reason, the old code had duplicate {"version", 'v'} entry in
the options table and a matching case that could not be reached.

Commandline parsing is tightened to reject any positional arguments.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 12:34:08 +02:00
Zbigniew Jędrzejewski-Szmek e8e75a1c99 fido_id: convert to the new option parser
The commandline check is tightened. Previously the program would
crash if called without an argument.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 12:34:07 +02:00
Zbigniew Jędrzejewski-Szmek dad6381d45 mtd_probe: convert to the new option parser
The commandline check is tightened. Previously the program would
crash if called without an argument.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-26 12:34:06 +02:00
Lennart Poettering 0a8560eed8 varlink-util: add generic code that calls out to a 'hook' directory of sockets 2026-04-26 11:29:52 +02:00
Frantisek Sumsal ef3c07352b test: don't strip directives from test units
The original find was matching even our test units, which caused issues
when the check was extended with Memory*= directives, as we stripped
them off from test units for TEST-55-OOMD where we certainly need them.
Since the stripping was meant primarily for "production-grade" units,
let's limit it to units under /etc/systemd/system/ and
/usr/lib/systemd/system/.
2026-04-25 23:39:47 +02:00
Frantisek Sumsal 035ba3ea57 test: slightly reduce the performance/memory overhead for wrapped binaries
Let's drop the quarantine that ASan uses for use-after-free detection,
as it's pointless in wrapped binaries and can consume up to 256 MiB of
memory (with the default configuration). Also, don't keep any stack
traces for allocations & deallocations, which should (slightly) help
with both memory & performance overhead.
2026-04-25 18:55:47 +02:00
Frantisek Sumsal 445f980548 test: temporarily ignore sanitizer warning about blocked ptrace()
LLVM 22 introduced an additional check [0] for ptrace() syscall when
invoking sanitizers [0] which currently produces a false-positive
warning when running some of our units under sanitizers:

[   47.524680] systemd-timedated[740]: ==740==WARNING: ptrace appears to be blocked (is seccomp enabled?). LeakSanitizer may hang.
[   47.524680] systemd-timedated[740]: ==740==Child exited with signal 15.
...
[ 1555.734223] systemd-oomd[93]: ==93==WARNING: ptrace appears to be blocked (is seccomp enabled?). LeakSanitizer may hang.
[ 1555.734223] systemd-oomd[93]: ==93==Child exited with signal 15.
...

It is a false positive because we disable the seccomp filters
system-wide for our units in the sanitizer jobs.

Now, from what I've seen so far this happens only in
Type=notify(-reload) units that also utilize bus_event_loop_with_idle().
This, combined with the fact that the ptrace()-check child process from
[0] checks only if the child process was killed by _any_ signal, means
that if the systemd unit exits on its own after becoming idle and then
something sends it SIGTERM (either via explicit `systemctl stop` or
during system shutdown), this SIGTERM might hit the ptrace()-check child
process from the sanitizer handler (as we also send the signal to all
processes in the target cgroup), which the parent process then
mistakenly evaluates as a blocked ptrace() syscall, even though the
check process wasn't killed by SIGSYS.

I filed this as [1] to the LLVM project, but let's also temporarily
ignore the warning in the sanitizer report processing, as it currently
causes annoying test fails.

[0] https://github.com/llvm/llvm-project/commit/a708b4bf21d7c2298224cdacf7d424abc3c8fed4
[1] https://github.com/llvm/llvm-project/issues/193714
2026-04-25 18:49:40 +02:00
Frantisek Sumsal e3aaf3d76e test: drop any memory limits from units when running with sanitizers
As the memory usage under sanitizers is quite unpredictable.

This is currently relevant mainly for Polkit, as it introduced memory
limits for its polkitd.service unit in the latest version [0] which are
very easy to trigger when running under sanitizers (as polkitd depends
on libsystemd which brings ASan into polkitd's address space).

[0] https://github.com/polkit-org/polkit/commit/7d9c06c58a957ee3f2a4383ade6f207b05207e3e
2026-04-25 18:49:40 +02:00
Frantisek Sumsal a8400c8f1a test: wrap even more binaries when running with sanitizers
Turns out that the util-linux dep on libsystemd caused more fun than I
originally anticipated:

$ lddtree /usr/bin/dfuzzer
dfuzzer => /usr/bin/dfuzzer (interpreter => /lib64/ld-linux-x86-64.so.2)
    libgio-2.0.so.0 => /lib64/libgio-2.0.so.0
        libgmodule-2.0.so.0 => /lib64/libgmodule-2.0.so.0
        libz.so.1 => /lib64/libz.so.1
        libmount.so.1 => /lib64/libmount.so.1
            libblkid.so.1 => /lib64/libblkid.so.1
            libsystemd.so.0 => /lib64/libsystemd.so.0
                libm.so.6 => /lib64/libm.so.6
                    ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
        libselinux.so.1 => /lib64/libselinux.so.1
            libpcre2-8.so.0 => /lib64/libpcre2-8.so.0
...

Also, the tpm2 utils now depend on libudev through libcurl -> libssh ->
libfido2 dep chain:

$ lddtree /usr/bin/tpm2_pcrread
tpm2_pcrread => /usr/bin/tpm2_pcrread (interpreter => /lib64/ld-linux-x86-64.so.2)
    ...
    libcurl.so.4 => /lib64/libcurl.so.4
    ...
        libssh.so.4 => /lib64/libssh.so.4
            libfido2.so.1 => /lib64/libfido2.so.1
                libcbor.so.0.13 => /lib64/libcbor.so.0.13
                libudev.so.1 => /lib64/libudev.so.1
                    libgcc_s.so.1 => /lib64/libgcc_s.so.1
...

Follow-up for 8030e0b19e.
2026-04-25 17:42:20 +02:00
Zbigniew Jędrzejewski-Szmek 2f42b19c0f v4l_id: convert to the new option parser
The commandline check is tightened to reject extra arguments.

Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 14:50:46 +02:00
fecet 6897562ea0 hwdb: sensor: add accel mount matrix for GPD WIN 5
The WIN 5 (DMI product G1618-05) ships the same BMI0160
accelerometer with the same physical mounting as the Win Max 2
(G1619-04), so reuse its mount matrix. Verified on hardware:
without the matrix iio-sensor-proxy reports
AccelerometerOrientation=normal regardless of physical pose,
and applying the G1619-04 matrix makes orientation transitions
(normal / left-up / right-up / bottom-up) track the device
correctly.
2026-04-25 10:29:15 +01:00
Zbigniew Jędrzejewski-Szmek b045a2fa6f add helpers for unified --help formatting (#41805)
I see --help output formatting as contiuation of @keszybz's work on
options.[ch], hence let's start to add some really basic infrastructure
to unify the --help output more.
2026-04-25 11:23:18 +02:00
Yu Watanabe 15b20e19b1 ip-util: introduce several functions for IP packet handling (#41801) 2026-04-25 10:15:54 +09:00
Yu Watanabe 3b4e01637f ip-util: define IPV4_MIN_REASSEMBLY_SIZE
The number will be later used at several places.
2026-04-25 07:26:02 +09:00
Yu Watanabe 11def23206 ip-util: introduce udp_packet_verify()
This is mostly equivalent to dhcp_packet_verify_headers(), but
- it optionally returns the UDP payload as iovec, and
- supports IP header with options,
- check packet length more strictly.
2026-04-25 07:25:18 +09:00