]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
9 months agofuzz: tentatively disable fuzz-compress on oss-fuzz 36490/head
Yu Watanabe [Sat, 22 Feb 2025 20:34:55 +0000 (05:34 +0900)] 
fuzz: tentatively disable fuzz-compress on oss-fuzz

It does not work on oss-fuzz for some reasons. See #11018.

9 months agofuzz: decompress_startswith() may return zero
Yu Watanabe [Sat, 22 Feb 2025 19:59:46 +0000 (04:59 +0900)] 
fuzz: decompress_startswith() may return zero

Fixes #36472.

9 months agosd-event: always operate on child source via pidfd (#36480)
Yu Watanabe [Sat, 22 Feb 2025 19:41:28 +0000 (04:41 +0900)] 
sd-event: always operate on child source via pidfd (#36480)

9 months agosbsign: Don't set bit in SpcPeImageData->flags
Daan De Meyer [Fri, 21 Feb 2025 21:41:26 +0000 (22:41 +0100)] 
sbsign: Don't set bit in SpcPeImageData->flags

Neither sbsign nor pesign set this flag in SpcPeImageData->flags,
which is about which resources should be included specifying "Which
portions of the Windows PE file are hashed." according to the
authenticode spec. However, this is followed by "Although flags is
always present, it is ignored when calculating the file hash for both
signing and verification purposes". So as it doesn't seem to do
anything useful and the other tools don't set any of these flags
either, let's follow suite and not set this flag ourselves either.

9 months agohwdb: add axis range corrections for the Lenovo Yoga Slim 7 14ARE05
KidGrimes [Fri, 21 Feb 2025 21:27:53 +0000 (18:27 -0300)] 
hwdb: add axis range corrections for the Lenovo Yoga Slim 7 14ARE05

9 months agomkosi: add libapparmor1 to package list for opensuse
Luca Boccassi [Fri, 21 Feb 2025 21:32:27 +0000 (21:32 +0000)] 
mkosi: add libapparmor1 to package list for opensuse

TEST-02-UNITTESTS.sh[4381]: [ 2329.636166] test-dlopen-so[650]: libapparmor.so.1 is not installed: libapparmor.so.1: cannot open shared object file: No such file or directory
TEST-02-UNITTESTS.sh[4381]: [ 2329.636174] test-dlopen-so[650]: Assertion 'dlopen_libapparmor() >= 0' failed at src/test/test-dlopen-so.c:103, function run(). Aborting.

Follow-up for 384949f7dee164c2c3cfd78f94a5f27b61fb7c28

9 months agoCoding style followups (#36476)
Luca Boccassi [Fri, 21 Feb 2025 21:58:54 +0000 (21:58 +0000)] 
Coding style followups (#36476)

9 months agoprocess-util: refuse FORK_WAIT + FORK_FREEZE combination
Mike Yuan [Thu, 20 Feb 2025 19:51:05 +0000 (20:51 +0100)] 
process-util: refuse FORK_WAIT + FORK_FREEZE combination

9 months agosd-event: always operate on child source via pidfd 36480/head
Mike Yuan [Tue, 18 Feb 2025 15:49:05 +0000 (16:49 +0100)] 
sd-event: always operate on child source via pidfd

Follow-up for 6e14c46bac760d01868b0bf48461f6ac44c86be3

Nowadays a pidfd is guarenteed to be around for child
event sources, hence drop the effectively unused pid-based
branches.

Addresses https://github.com/systemd/systemd/pull/36410#discussion_r1959930716

9 months agosd-event: assert on hashmap_remove(child.pid)
Mike Yuan [Fri, 21 Feb 2025 15:45:34 +0000 (16:45 +0100)] 
sd-event: assert on hashmap_remove(child.pid)

Follow-up for 54988a27b9d1487e1690f94b79031ef61edd6651
and a342c71d360e083b3f6b06a64d852c4e3aceeef3

9 months agoprocess-util: introduce SIGINFO_CODE_IS_DEAD helper
Mike Yuan [Tue, 18 Feb 2025 16:06:19 +0000 (17:06 +0100)] 
process-util: introduce SIGINFO_CODE_IS_DEAD helper

9 months agodocs/CONTROL_GROUP_INTERFACE: fix typo
Lin Jian [Fri, 21 Feb 2025 13:07:27 +0000 (21:07 +0800)] 
docs/CONTROL_GROUP_INTERFACE: fix typo

9 months agoudev-builtin-blkid: merge var definitions, fix grammar 36476/head
Mike Yuan [Fri, 21 Feb 2025 13:17:57 +0000 (14:17 +0100)] 
udev-builtin-blkid: merge var definitions, fix grammar

Follow-up for f8825c1364fb1c3f3f5d96654e779fd51500f476

9 months agobasic/utf8: add missing assertion
Mike Yuan [Tue, 18 Feb 2025 13:33:01 +0000 (14:33 +0100)] 
basic/utf8: add missing assertion

Follow-up for 104a6b8c390730f66f5acbcaefbc27898bfef9fe

9 months agobasic/strv: minor coding style follow-ups
Mike Yuan [Tue, 18 Feb 2025 13:32:30 +0000 (14:32 +0100)] 
basic/strv: minor coding style follow-ups

Follow-up for 428146dc89506725f777ae82d288439340926a83

Addresses https://github.com/systemd/systemd/pull/36271#discussion_r1958334800

9 months agocore: dlopen()'ify libapparmor
Mike Yuan [Sun, 7 Jul 2024 17:35:40 +0000 (19:35 +0200)] 
core: dlopen()'ify libapparmor

In Arch Linux we currently have a half-baked apparmor support,
in particular we cannot link systemd to libapparmor for service
context integration, since that will pull apparmor into base system.
Hence, let's turn this into a dlopen dep.

Ref: https://gitlab.archlinux.org/archlinux/packaging/packages/systemd/-/issues/22

9 months agoSupport booting from rootfs acquired via HTTP (#36314)
Lennart Poettering [Fri, 21 Feb 2025 10:26:14 +0000 (11:26 +0100)] 
Support booting from rootfs acquired via HTTP (#36314)

This extends systemd-import-generator to not only download a disk image
at boot, but also attach it to a loopback device, so that we can boot
from it.

We have most of the pieces already in place, this just polishes some
things, to make this round.

The topmost commit contains example command lines that just work to make
`systemd-vmspawn` boot from a `mkosi serve` call.

Note that this does not address how to get the UKI running on the target
system, this only deals with the later boot phase once the UKI is
already running.

This is WIP, because it lacks docs, and I want to do some more
polishing. But it works great.

Ultimate goal, provide a complete solution so that we also can do uefi
http boot for ukis

9 months agoupdate TODO 36314/head
Lennart Poettering [Mon, 10 Feb 2025 12:18:25 +0000 (13:18 +0100)] 
update TODO

9 months agoboot: when we detect that sd-boot is called as NBP, print friendly message
Lennart Poettering [Wed, 12 Feb 2025 21:42:10 +0000 (22:42 +0100)] 
boot: when we detect that sd-boot is called as NBP, print friendly message

Fixes: #11850
9 months agosd-boot: also read type #1 entries from SMBIOS Type #11
Lennart Poettering [Wed, 12 Feb 2025 08:31:29 +0000 (09:31 +0100)] 
sd-boot: also read type #1 entries from SMBIOS Type #11

With this we can now do:

systemd-vmspawn -n -i foobar.raw -s io.systemd.boot.entries-extra:particleos-current.conf=$'title ParticleOS Current\nuki-url http://example.com/somedir/uki.efi'

Assuming sd-boot is available inside the ESP of foobar.raw a new item
will show up in the boot menu that allows booting directly into the
specified UKI.

9 months agovmspawn: simplify cmdline_add_vsock() a tiny bit
Lennart Poettering [Wed, 12 Feb 2025 08:32:49 +0000 (09:32 +0100)] 
vmspawn: simplify cmdline_add_vsock() a tiny bit

9 months agovmspawn: add --smbios11= switch for passing arbitrary smbios type #11 strings to vm
Lennart Poettering [Wed, 12 Feb 2025 08:32:18 +0000 (09:32 +0100)] 
vmspawn: add --smbios11= switch for passing arbitrary smbios type #11 strings to vm

9 months agovmspawn: split out code that appends kernel command line into its own helper
Lennart Poettering [Wed, 12 Feb 2025 08:27:17 +0000 (09:27 +0100)] 
vmspawn: split out code that appends kernel command line into its own helper

9 months agoboot: add new 'uki-url' bls type #1 menu items for booting remote UKIs
Lennart Poettering [Tue, 11 Feb 2025 08:34:20 +0000 (09:34 +0100)] 
boot: add new 'uki-url' bls type #1 menu items for booting remote UKIs

Companion BLS spec PR:

https://github.com/uapi-group/specifications/pull/135

9 months agoboot: add new bls type #1 stanza "uki"
Lennart Poettering [Tue, 11 Feb 2025 08:18:14 +0000 (09:18 +0100)] 
boot: add new bls type #1 stanza "uki"

This one is between "efi" and "linux": we'll recognize such entries as
linux, but we'll just invoke them as EFI binaries.

This creates a high-level concept for invoking UKIs via indirection of a
bls type #1 entry, for example to permit invocation from a non-standard
path or for giving entries a different name.

Companion BLS spec PR:

https://github.com/uapi-group/specifications/pull/135

(Let's rename LOADER_UNIFIED_LINUX to LOADER_TYPE2_UKI at the same time
to reduce confusion what is what)

9 months agoboot: move behaviour checks into per-entry-type helpers
Lennart Poettering [Tue, 11 Feb 2025 06:35:02 +0000 (07:35 +0100)] 
boot: move behaviour checks into per-entry-type helpers

9 months agoboot: be stricter when filtering out invalid bls #1 entries
Lennart Poettering [Tue, 11 Feb 2025 06:33:34 +0000 (07:33 +0100)] 
boot: be stricter when filtering out invalid bls #1 entries

9 months agoboot: bls type #1 with 'efi' stanza are bls type #1 too
Lennart Poettering [Tue, 11 Feb 2025 06:32:47 +0000 (07:32 +0100)] 
boot: bls type #1 with 'efi' stanza are bls type #1 too

9 months agoefi: add strcspn16()/strspn16() to efi libs too
Lennart Poettering [Tue, 11 Feb 2025 22:47:00 +0000 (23:47 +0100)] 
efi: add strcspn16()/strspn16() to efi libs too

9 months agoefi-string: add new xstr16_to_ascii() helper
Lennart Poettering [Tue, 11 Feb 2025 18:22:28 +0000 (19:22 +0100)] 
efi-string: add new xstr16_to_ascii() helper

9 months agoefi: modernize reconnect_all_drivers() a bit
Lennart Poettering [Tue, 11 Feb 2025 18:22:09 +0000 (19:22 +0100)] 
efi: modernize reconnect_all_drivers() a bit

9 months agogpt-auto-generator: if root=gpt-auto is specified on kernel cmdline, always wait...
Lennart Poettering [Mon, 10 Feb 2025 22:15:15 +0000 (23:15 +0100)] 
gpt-auto-generator: if root=gpt-auto is specified on kernel cmdline, always wait for /dev/gpt-auto-root symlink

So far our login in gpt-auto-generator when run in the initrd has been
to generate the units that wait for /dev/gpt-auto-root to show up and
mount them only if we have the loader partition EFI variables set. This
is of course not the case for network boots with a UKI kernel, which
means auto-gpt would not work for mounting the rootfs.

What's nasty is that we don't know for sure whether the "rootdisk"
loopback device will shown up eventually, as it needs explicit
configuration by the user via the kernel cmdline, or could be configured
entirely indepdenently. Hence, let's tweak the logic when we wat for
/dev/gpt-auto-root as device to mount: make the gpt auto root logic a
tristate: if root=gpt-auto is specified on the cmdline *definitely*
enable the logic. If root= is specified and set to anyting else,
*definitely* disable the logic. And if root= is not specified check for
the EFI partition vars – as before – to conditionalized things.

Or in other words, you can now boot the same image either via ESP/local
boot or via netboot with a kernelcmdline image like this:

    rd.systemd.pull=verify=no,machine,blockdev,bootorigin,raw:rootdisk:image.raw root=gpt-auto rootflags=x-systemd.device-timeout=infinity ip=any

9 months agoudev-builtin-blkid: use loopback block device 'ref' field fo determining gpt-auto...
Lennart Poettering [Mon, 10 Feb 2025 21:24:52 +0000 (22:24 +0100)] 
udev-builtin-blkid: use loopback block device 'ref' field fo determining gpt-auto whole block device

So far the gpt-auto logic only looked for the partition table of devices
that the ESP/XBOOTLDR partition used to boot was on. This works great
for local boots, but is more problematic if we boot a UKI via UEFI HTTP
boot, because there is no ESP in play in that case.

Let's introduce an alternative to communicate the intended default root
disk to cover for this situation: any loopback block device whose
backing file field (i.e. the userspace controlled freeform field we use
for /dev/disk/by-loop-ref/ naming) is set to "rootdisk" will be consider
for gpt-auto will be consider for gpt-auto.

With this in place we should have nice automatic behaviour:

1. If we are booted locally we'll get the ESP/XBOOTLDR data, and derive
   the root disk from that.

2. If we are booted via UEFI HTTP boot we expect that the caller makes
   the loopback device appear with the right loop-ref identifier, and
   then will use that.

9 months agoimport-generator: give import services better names
Lennart Poettering [Fri, 7 Feb 2025 17:22:13 +0000 (18:22 +0100)] 
import-generator: give import services better names

Previously, we'd name the import services numerically. Let's instead use
the local target file name, i.e. the object we are creating with these
services locally. That's useful so that we can robustely order against
these service instances, should we need to one day.

9 months agofstab-generator: validate root= and mount.usr= the same way
Lennart Poettering [Mon, 10 Feb 2025 12:12:46 +0000 (13:12 +0100)] 
fstab-generator: validate root= and mount.usr= the same way

In both cases, let's check for the same special mount sources. We
already covered some of the same, but let's just make it the same
codepaths.

9 months agofstab-generator: support creating bind mounts via root= kernel cmdline switches
Lennart Poettering [Mon, 10 Feb 2025 11:56:08 +0000 (12:56 +0100)] 
fstab-generator: support creating bind mounts via root= kernel cmdline switches

This is useful for bind mounting a freshly downloaded and unpacked tar
disk images to /sysroot to mount into.

Specifically, with a kernel command line like this one:

  rd.systemd.pull=verify=no,machine,tar:root:http://_gateway:8081/image.tar root=bind:/run/machines/root ip=any

The first parameter downloads the root image, the second one then binds
it to /sysroot so that we can boot into it.

9 months agoimport-generator: optionally import images into /run/ hierarchy rather than /var/
Lennart Poettering [Mon, 10 Feb 2025 10:57:19 +0000 (11:57 +0100)] 
import-generator: optionally import images into /run/ hierarchy rather than /var/

This is useful in particular in the initrd, as this ensures any
downloaded images are not deleted during the initrd→host transition
(where /var/ does not survive, but /run/ does). Might be useful in other
cases too, for example for transiently deployed confexts and such.

9 months agoimportd: optionally allow clients to specify alternative image root
Lennart Poettering [Mon, 10 Feb 2025 10:52:21 +0000 (11:52 +0100)] 
importd: optionally allow clients to specify alternative image root

9 months agoimport-generator: add new option 'bootorigin' to derive URL from efi boot url
Lennart Poettering [Sun, 9 Feb 2025 23:23:21 +0000 (00:23 +0100)] 
import-generator: add new option 'bootorigin' to derive URL from efi boot url

9 months agosd-stub: if we are http booted, query source URL and write to EFI variable
Lennart Poettering [Fri, 7 Feb 2025 22:30:13 +0000 (23:30 +0100)] 
sd-stub: if we are http booted, query source URL and write to EFI variable

This way userspace can read the field, and use it to retrieve more
resources from the same place.

9 months agoimport-generator: optionally create loopback devices after download
Lennart Poettering [Fri, 7 Feb 2025 15:29:00 +0000 (16:29 +0100)] 
import-generator: optionally create loopback devices after download

This is useful for booting from a freshly downloaded disk image: just
specify

    rd.systemd.pull=verify=no,machine,blockdev,raw:image:https://192.168.100.1:8081/image.raw
    root=/dev/disk/by-loop-ref/image.raw-part2

on the kernel command line, and we'll download that in the initrd and boot from it.

(note the above disables download-time verification, putting trust in
verity and image policy that this won#t do harm)

Here's a more complete example. From a git checkout do:

    ninja -C build && mkosi -f -T serve

and then from another terminal do within the same checkout:

    ./build/systemd-vmspawn \
            --ram=16G \
            --register=no \
            -n \
            -i ./build/mkosi.output/image.raw \
            rd.systemd.pull=verify=no,machine,blockdev,raw:image:http://192.168.100.1:8081/image.raw \
            root=/dev/disk/by-loop-ref/image.raw-part2 \
            rootflags=x-systemd.device-timeout=infinity \
            ip=any

This will then boot via the ESP of the specified image, then download
the image via HTTP from the mkosi instance running in the first
terminal, attach it to a loopback block device, and then use its second
partition as root fs, and boot into it.

(this assumes your host is 192.168.100.1, of course)

Note that downloading the full image takes a bit of time (this downloads
it uncompressed after all), hence we turn off the timeout to wait for
the device.

This also introduces a new "imports.target" unit (and associated
"imports-pre.target") between imports are grouped, and which ensure the
imports actually are ordered correctly both on the host and in the
initrd.

9 months agoman: mention 'rd.' prefix for import-generator kernel cmdline options
Lennart Poettering [Thu, 13 Feb 2025 09:37:11 +0000 (10:37 +0100)] 
man: mention 'rd.' prefix for import-generator kernel cmdline options

9 months agounits: add generic service for attaching a file to a loopback device
Lennart Poettering [Fri, 7 Feb 2025 15:33:17 +0000 (16:33 +0100)] 
units: add generic service for attaching a file to a loopback device

This is mostly just a friendly unit wrapper around "systemd-dissect
--attach".

This is useful so that we can automatically attach disk images as
block device at boot.

9 months agodissect: add --quiet mode
Lennart Poettering [Fri, 7 Feb 2025 18:44:13 +0000 (19:44 +0100)] 
dissect: add --quiet mode

9 months agodissect: optionally derive loop-ref from image filename
Lennart Poettering [Fri, 7 Feb 2025 16:55:08 +0000 (17:55 +0100)] 
dissect: optionally derive loop-ref from image filename

9 months agomkosi: add kernel-bootcfg to all images
Lennart Poettering [Sun, 9 Feb 2025 06:28:44 +0000 (07:28 +0100)] 
mkosi: add kernel-bootcfg to all images

kernel-bootcfg --add-uri= is just too useful when playing with network
boot. Let's just add it to our images.

9 months agomkosi: include networkd + import-generator in initrd
Lennart Poettering [Fri, 7 Feb 2025 16:54:36 +0000 (17:54 +0100)] 
mkosi: include networkd + import-generator in initrd

9 months agoexec-invoke: Use FORK_DETACH when forking off pid namespace child (#36446)
Luca Boccassi [Fri, 21 Feb 2025 00:27:17 +0000 (00:27 +0000)] 
exec-invoke: Use FORK_DETACH when forking off pid namespace child (#36446)

This ensures the child process is immediately re-parented to the
manager process which avoids a "Supervising process xxx which is
not our child. We'll most likely not notice when it exits." warning
which can currently happen if the parent systemd-executor parent
process sends the pid namespace child process pidref to the manager
process and the manager process dispatches the child process pidref
before the systemd-executor parent process exits, since at that point
the pid namespace child process's parent will still be the
systemd-executor parent process and not the manager process.

9 months agoexec-invoke: Use FORK_DETACH when forking off pid namespace child 36446/head
Daan De Meyer [Wed, 19 Feb 2025 19:57:24 +0000 (20:57 +0100)] 
exec-invoke: Use FORK_DETACH when forking off pid namespace child

This ensures the child process is immediately re-parented to the
manager process which avoids a "Supervising process xxx which is
not our child. We'll most likely not notice when it exits." warning
which can currently happen if the parent systemd-executor parent
process sends the pid namespace child process pidref to the manager
process and the manager process dispatches the child process pidref
before the systemd-executor parent process exits, since at that point
the pid namespace child process's parent will still be the
systemd-executor parent process and not the manager process.

9 months agoprocess-util: Allow setting ret_pid with FORK_DETACH in safe_fork()
Daan De Meyer [Wed, 19 Feb 2025 19:38:14 +0000 (20:38 +0100)] 
process-util: Allow setting ret_pid with FORK_DETACH in safe_fork()

Let's allow getting the pid even if the caller sets FORK_DETACH. We
do this via a socketpair() over which we send the inner child pid.

9 months agoSome minor improvements to D-Bus docs (#36467)
Lennart Poettering [Thu, 20 Feb 2025 19:48:55 +0000 (20:48 +0100)] 
Some minor improvements to D-Bus docs (#36467)

See the commit messages for details:
 - Fix some confusing wording
 - Clarify about signal emission on convenience objects for login1

9 months agoprocess-util: Implement safe_fork_full() on top of pidref_safe_fork_full()
Daan De Meyer [Thu, 20 Feb 2025 08:24:58 +0000 (09:24 +0100)] 
process-util: Implement safe_fork_full() on top of pidref_safe_fork_full()

Let's switch things around, and move the internals of safe_fork_full() into
pidref_safe_fork_full() and make safe_fork_full() a trivial wrapper on top
of pidref_safe_fork_full().

9 months agotest-async: Use ASSERT_OK_ERRNO() instead of ASSERT_OK() where applicable
Daan De Meyer [Thu, 20 Feb 2025 10:14:13 +0000 (11:14 +0100)] 
test-async: Use ASSERT_OK_ERRNO() instead of ASSERT_OK() where applicable

9 months agotest-async: Specify FORK_REOPEN_LOG in one more place
Daan De Meyer [Thu, 20 Feb 2025 10:13:51 +0000 (11:13 +0100)] 
test-async: Specify FORK_REOPEN_LOG in one more place

Otherwise debugging assertions from the child process is rather hard.

9 months agoFix race in io.systemd.Machine.Open() test case (#36410)
Daan De Meyer [Thu, 20 Feb 2025 18:53:00 +0000 (19:53 +0100)] 
Fix race in io.systemd.Machine.Open() test case (#36410)

This started out as a simple attempt to fix a race in an existing test
case for io.systemd.Machine.Open(). To address it nicely I added some
machinery to varlinkctl and systemd-notify though, and because of that I
refacting reception of sd_notify() messages in various places of our
codebase. So it became much much bigger.

This ports all receivers of sd_notify() messages over to a new common
implementation, except for one: the one in PID1. It's more powerful than
the others, since it accepts fds too. I think we should generalize
notify_recv() to cover that too, it's not that much more work, but for
now I didn't want to add even more refactorings on top, and this can
easily happen later separately, hence I left it out for now.

9 months agodocs: Clarify that login1 signals are not emitted for convenience objects 36467/head
Philip Withnall [Thu, 20 Feb 2025 18:15:43 +0000 (18:15 +0000)] 
docs: Clarify that login1 signals are not emitted for convenience objects

While this is obvious if you spend a few minutes thinking about how
D-Bus signals work (in this case, they are broadcast from a system
service, so cannot apply to a specific user/session/seat), it’s a bit
easy to overlook this while putting code together which uses the login1
D-Bus API, so it’s helpful to point this hazard out specifically in the
docs.

The signals can only be emitted on the canonical objects. The
convenience objects are useful for method calls, as the calling context
can be used to dereference ‘self’ and ‘auto’, but this can’t work for
signals.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
9 months agodocs: Fix some confusing wording in various D-Bus docs
Philip Withnall [Thu, 20 Feb 2025 18:13:00 +0000 (18:13 +0000)] 
docs: Fix some confusing wording in various D-Bus docs

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
9 months agocore: also check boot ID and product UUID in ConditionHost=
Lennart Poettering [Wed, 19 Feb 2025 16:15:41 +0000 (17:15 +0100)] 
core: also check boot ID and product UUID in ConditionHost=

Sometimes it's interesting to condition units not just on the
installation but on the physical device. Let's make ConditionHost=
useful for that kind of checks, and while we are at it, also allow it to
be used for condition checks on the boot id.

Overloading like this is safe, since UUIDs are globally unique after
all, and hence there should be no conflicts between the namespace of
boot ids, machine ids and product ids.

Finally, relax rules on uuid checking: if the specified string parses
as uuid or id, also check it against the hostname, for setups where
people name hosts after uuids. I wouldn't know why anyone would do that,
but also, why not? shouldn'rt hurt allowing them and should not create
ambiguity conflicts.

9 months agohomework: unify common error handling
Lennart Poettering [Tue, 18 Feb 2025 21:30:31 +0000 (22:30 +0100)] 
homework: unify common error handling

9 months agoptyfwd-tool: don't segfault if called without arguments 36410/head
Lennart Poettering [Mon, 17 Feb 2025 16:14:30 +0000 (17:14 +0100)] 
ptyfwd-tool: don't segfault if called without arguments

9 months agotest: fix racy machined test
Lennart Poettering [Mon, 17 Feb 2025 10:34:27 +0000 (11:34 +0100)] 
test: fix racy machined test

Previously, one of the io.systemd.Machine.Open() tests would invoke a
command line via machined, and then check if it ran properly. This was
implemented in a racy fashion: the client side would immediately close
the pty fd allocated for the operation, thus triggering an immediate
SIGHUP on the other side. Now, depending whether this client was quicker
in closing or the server was quicker in executing the command line this
was a race.

Fix this comprehensively: let's first wait for the varlink operation to
complete via the new "systemd-notify --fork" logic (because varlinkctl
sends out READY=1 once handing off to --exec). Secondly let's use
varlinkctl's --exec logic to invoke a process which keeps open the open
pty until we kill it (we just use sleep for that).

(Also add some more tests for the varlinkctl --exec stuff)

9 months agovarlinkctl: introduce new --exec switch
Lennart Poettering [Fri, 14 Feb 2025 13:35:18 +0000 (14:35 +0100)] 
varlinkctl: introduce new --exec switch

This new switch makes it possible to process fds attached to a varlink
reply: if specified it will execute a command line specified by the
caller, will pass the response json as stdin, and any fds acquired as
fd3, fd4, …

9 months agonotify: add a new --fork verb that implements a minimal receiver side for sd_notify...
Lennart Poettering [Fri, 14 Feb 2025 13:43:22 +0000 (14:43 +0100)] 
notify: add a new --fork verb that implements a minimal receiver side for sd_notify() messages

9 months agonotify: introduce arg_action enum
Lennart Poettering [Fri, 14 Feb 2025 13:43:02 +0000 (14:43 +0100)] 
notify: introduce arg_action enum

9 months agonspawn: port to notify_recv()
Lennart Poettering [Mon, 17 Feb 2025 11:00:19 +0000 (12:00 +0100)] 
nspawn: port to notify_recv()

9 months agosysupdated: port to notify_recv()
Lennart Poettering [Mon, 17 Feb 2025 10:50:15 +0000 (11:50 +0100)] 
sysupdated: port to notify_recv()

9 months agosysupdate: port to notify_recv()
Lennart Poettering [Mon, 17 Feb 2025 10:44:40 +0000 (11:44 +0100)] 
sysupdate: port to notify_recv()

9 months agoimportd: port to notify_recv()
Lennart Poettering [Fri, 14 Feb 2025 13:41:23 +0000 (14:41 +0100)] 
importd: port to notify_recv()

9 months agonotify-recv: add generic implementation of sd_notify() server side dgram recv code
Lennart Poettering [Fri, 14 Feb 2025 13:40:31 +0000 (14:40 +0100)] 
notify-recv: add generic implementation of sd_notify() server side dgram recv code

The code is not trivial, and we implemented this at various places
already, introduce a common implementation for this we can reuse.

9 months agosd-varlink: add new sd_varlink_get_n_fds() helper
Lennart Poettering [Fri, 14 Feb 2025 13:33:48 +0000 (14:33 +0100)] 
sd-varlink: add new sd_varlink_get_n_fds() helper

This new call returns how many fds have been associated with the current
incoming message.

9 months agohomed: explicitly set access mode of private/public signing key pair
Lennart Poettering [Thu, 20 Feb 2025 08:57:47 +0000 (09:57 +0100)] 
homed: explicitly set access mode of private/public signing key pair

So far we relied that the temporary file logic would create the key
files with 0600 mode, but let's set the access mode explicitly:

1. Tighten private key file access from 0600 to 0400, after all we never
   want to write it again, it's not a mutable file.

2. Relaxed public key file access mode from 0600 to 0444, after all it's
   a public key file, and people should be able to see it if they want
   This is useful for propagating the key onto other systems if needed.

9 months agotree-wide: initialize row/column explicitly before calling sd_json_parse_file()
Lennart Poettering [Thu, 20 Feb 2025 09:04:34 +0000 (10:04 +0100)] 
tree-wide: initialize row/column explicitly before calling sd_json_parse_file()

The variables are error return parameters, i.e. only initialized on some errors,
not all. Let's hence always zero initialize them.

9 months agohomed: return the correct error if an image file is not present when we try to activa...
Lennart Poettering [Thu, 20 Feb 2025 14:09:25 +0000 (15:09 +0100)] 
homed: return the correct error if an image file is not present when we try to activate it

We already return BUS_ERROR_HOME_ABSENT when we detect the image being
absent before we fork off the homework worker. Let's also return the
same error if the homework process notices the same condition while
actually doing something.

This mostly fixes a race, that the same condition seen at different
points in time results in the same errors.

9 months agoresolve: cleanups for validating query flags and fix resolving service with record...
Lennart Poettering [Thu, 20 Feb 2025 16:31:19 +0000 (17:31 +0100)] 
resolve: cleanups for validating query flags and fix resolving service with record type filter (#36398)

Follow-up for 81ae2237c1792943a1ec712ae2e630bcc592175b.
Fixes
https://github.com/systemd/systemd/pull/36353#issuecomment-2659558382.

9 months agomkosi: Enable userdb tmpfiles dropin on Fedora/CentOS
Daan De Meyer [Thu, 20 Feb 2025 14:08:53 +0000 (15:08 +0100)] 
mkosi: Enable userdb tmpfiles dropin on Fedora/CentOS

It's disabled by default in the Fedora spec, but still available
as an example file. Let's symlink it to the proper name in the images
to enable it again.

9 months agouser-runtime-dir: use right accessor got get GID of account
Lennart Poettering [Thu, 20 Feb 2025 14:07:30 +0000 (15:07 +0100)] 
user-runtime-dir: use right accessor got get GID of account

9 months agohomed: make "register" call more friendly
Lennart Poettering [Thu, 20 Feb 2025 14:11:53 +0000 (15:11 +0100)] 
homed: make "register" call more friendly

Let's accept full user records (including status and so on) and simply
eat up the parts we don't care about, instead of refusing the whole
record wholesale.

This makes it easier to just copy a user record from one machine and
registering it at another, without stripping the irrelevant parts first.

9 months agoupdate TODO
Lennart Poettering [Thu, 20 Feb 2025 10:05:05 +0000 (11:05 +0100)] 
update TODO

9 months agotimedated: Send error when time set is past build date time
Pavithra Barithaya [Thu, 13 Feb 2025 06:58:40 +0000 (12:28 +0530)] 
timedated: Send error when time set is past build date time

When the user/customer sets the time on the system which is prior
than that of the systemd build time, as systemd doesn't allow time
before it's build date after a reboot, systemd is resetting it but
there is no error or exception present in the setTime method due
to which user/customer is unaware of why the time is reset back to
the systemd-build time.

Added a condition check in the set_time() method to return an
error when tried to set time past the systemd build date.

Tested: Verified that it throws an error when we try to set the
time prior to systemd build date.

Change-Id: Ia6b58320bdb7234a21885a44af8fd3bda64c3789

9 months agomkosi: Install systemd-boot in opensuse initrd
Daan De Meyer [Thu, 20 Feb 2025 13:11:58 +0000 (14:11 +0100)] 
mkosi: Install systemd-boot in opensuse initrd

This contains the systemd-stub tmpfiles snippet which we need to
copy stuff from /.extra to /run/systemd/stub which
TEST-86-MULTI-UKI-PROFILE depends on to work properly.

9 months agomkosi: Do not run unit tests during build by default (#36450)
Daan De Meyer [Thu, 20 Feb 2025 12:25:03 +0000 (13:25 +0100)] 
mkosi: Do not run unit tests during build by default  (#36450)

9 months agoman: fix typo in systemd.watchdog_device kernel option
Ahmad Fatoum [Thu, 20 Feb 2025 11:53:49 +0000 (12:53 +0100)] 
man: fix typo in systemd.watchdog_device kernel option

The option that systemd actually looks for has an underscore and no dash
as can be seen in src/core/main.c.

The man/kernel-command-line.xml documentation also gets it right with
this file being the only instance of watchdog-device being used.

Fixes: c75396c30bd9 ("documentation: add description for watchdog device path")
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
9 months agotools/dbus_exporter: set LD_ORIGIN_PATH if procfs is not available
Luca Boccassi [Fri, 8 Nov 2024 22:41:09 +0000 (22:41 +0000)] 
tools/dbus_exporter: set LD_ORIGIN_PATH if procfs is not available

The script runs the binaries which try to find the internal libs via /proc/self/exe due
to glibc's RPATH resolution and fail:

/var/cache/src/systemd/tools/dbus_exporter.py interfaces
 /var/cache/src/systemd/build/systemd
 /var/cache/src/systemd/build/systemd-homed
 /var/cache/src/systemd/build/systemd-hostnamed
 /var/cache/src/systemd/build/systemd-importd
 /var/cache/src/systemd/build/systemd-localed
 /var/cache/src/systemd/build/systemd-logind
 /var/cache/src/systemd/build/systemd-machined
 /var/cache/src/systemd/build/systemd-networkd
 /var/cache/src/systemd/build/systemd-oomd
 /var/cache/src/systemd/build/systemd-portabled
 /var/cache/src/systemd/build/systemd-resolved
 /var/cache/src/systemd/build/systemd-sysupdated
 /var/cache/src/systemd/build/systemd-timedated
execve("/var/cache/src/systemd/build/systemd", ["/var/cache/src/systemd/build/sys"..., "--bus-introspect", "list"], 0x7ffc7ab68600 /* 20 vars */) = 0
brk(NULL)                               = 0x56265bf70000
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f56ced7f000
readlinkat(AT_FDCWD, "/proc/self/exe", 0x7ffedeaa7a90, 4096) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=20293, ...}) = 0
mmap(NULL, 20293, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f56ced7a000
close(3)                                = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v4/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v4/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/x86_64-linux-gnu/", {st_mode=S_IFDIR|0755, st_size=19312, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v4/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v4/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v2/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/x86_64-linux-gnu/", {st_mode=S_IFDIR|0755, st_size=19312, ...}, 0) = 0
openat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v4/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v4/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v3/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v3/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v2/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/glibc-hwcaps/x86-64-v2/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/lib/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/lib/", {st_mode=S_IFDIR|0755, st_size=642, ...}, 0) = 0
openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v4/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v4/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v3/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v3/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v2/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/glibc-hwcaps/x86-64-v2/", 0x7ffedeaa80b0, 0) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/usr/lib/libsystemd-core-258.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
newfstatat(AT_FDCWD, "/usr/lib/", {st_mode=S_IFDIR|0755, st_size=642, ...}, 0) = 0
writev(2, [{iov_base="/var/cache/src/systemd/build/sys"..., iov_len=36},
           {iov_base=": ", iov_len=2},
           {iov_base="error while loading shared libra"..., iov_len=36},
           {iov_base=": ", iov_len=2},
           {iov_base="libsystemd-core-258.so", iov_len=22},
           {iov_base=": ", iov_len=2},
           {iov_base="cannot open shared object file", iov_len=30},
           {iov_base=": ", iov_len=2},
           {iov_base="No such file or directory", iov_len=25},
           {iov_base="\n", iov_len=1}],
           10/var/cache/src/systemd/build/systemd: error while loading shared libraries: libsystemd-core-258.so: cannot open shared object file: No such file or directory
) = 158

9 months agomkosi: Do not run unit tests during build by default 36450/head
Daan De Meyer [Thu, 20 Feb 2025 09:30:16 +0000 (10:30 +0100)] 
mkosi: Do not run unit tests during build by default

We want the incremental builds to be as fast as possible, so let's
not run the unit tests locally during the image build by default.

9 months agodocs: Document how to run the unit tests in HACKING.md
Daan De Meyer [Thu, 20 Feb 2025 09:31:02 +0000 (10:31 +0100)] 
docs: Document how to run the unit tests in HACKING.md

9 months agotree-wide: tweaks to mount point inode creation (#36308)
Luca Boccassi [Wed, 19 Feb 2025 22:09:52 +0000 (22:09 +0000)] 
tree-wide: tweaks to mount point inode creation (#36308)

Some love for make_mount_point_inode_from_xyz() and ports PID 1 over to
it for mount units.

Alternative to #36290

9 months agorepart: add parameter to attach offline verity signature (#36405)
Luca Boccassi [Wed, 19 Feb 2025 18:12:19 +0000 (18:12 +0000)] 
repart: add parameter to attach offline verity signature (#36405)

Add --join-signature=hash:sig - when a verity signature partition
has been deferred in a previous run, this allows attaching a signature
that was created offline, for example on a build system like OBS where
the private key is not available to the build process.

Can be specified multiple times, the right partition to act upon will
be selected by matching the data+verity partitions UUIDs with the
provided roothash(es)

9 months agorepart: add parameter to attach offline verity signatures 36405/head
Luca Boccassi [Mon, 3 Feb 2025 15:05:46 +0000 (16:05 +0100)] 
repart: add parameter to attach offline verity signatures

Add --join-signature=hash:sig - when a verity signature partition
has been deferred in a previous run, this allows attaching a signature
that was created offline, for example on a build system like OBS where
the private key is not available to the build process.

Can be specified multiple times, the right partition to act upon will
be selected by matching the data+verity partitions UUIDs with the
provided roothash(es)

9 months agologind: save seat before applying acl
xinpeng wang [Mon, 17 Feb 2025 07:01:22 +0000 (15:01 +0800)] 
logind: save seat before applying acl

udev will trigger the uaccess program in 73-seat-late.rules, which
may modify the device's acl permissions. In some cases, udev triggers
the uaccess program when logind is started and active is being set.
At this time, 1) logind sets the user's acl permissions, 2) uaccess
obtains active and sets acl permissions; 3) logind updates seat's
stat_file and writes active. This situation will cause the device to
not have the correct acl permissions, resulting in abnormal situations
such as a black screen. Therefore, it is necessary to write active to
seat's stat file before setting acl.

9 months agoissue: add trailing empty line
Lennart Poettering [Wed, 19 Feb 2025 11:13:50 +0000 (12:13 +0100)] 
issue: add trailing empty line

(Make this more alike the version actually shipped in Fedora)

9 months agoupdate TODO
Lennart Poettering [Wed, 19 Feb 2025 08:09:51 +0000 (09:09 +0100)] 
update TODO

9 months agomkosi: Update distribution packaging specs for arch, opensuse and fedora (#36428)
Daan De Meyer [Wed, 19 Feb 2025 13:42:52 +0000 (14:42 +0100)] 
mkosi: Update distribution packaging specs for arch, opensuse and fedora (#36428)

9 months agogithub: bump versions in issue forms
Jan Macku [Wed, 19 Feb 2025 13:19:36 +0000 (14:19 +0100)] 
github: bump versions in issue forms

9 months agomkosi: update fedora commit reference 36428/head
Daan De Meyer [Wed, 19 Feb 2025 12:46:47 +0000 (13:46 +0100)] 
mkosi: update fedora commit reference

6c7c4a510d Do not use dynamic spec generation for non-upstream builds
6201755b36 Allow co-installation of systemd-sysusers-standalone and systemd
eba1721678 Split out -sysusers and -shared
ac9c438e27 Use dynamic spec generation for triggers
3671a5cc79 Move more auxiliary files into subpackages
5c40e08728 Remove patch that is already upstream
49ec9f3286 Move some files into subpackages
2c0b984bf4 Version 257.3
d66f997915 Add explicit BR: libxcrypt-devel
1ffa7bf7c7 Make Georgian mapping patch downstream-only
de4ae54a34 Backport PR #36194 to add Georgian mapping to kbd-model-map
cc9bce7893 Drop override of $PATH in the user manager
d0973df863 Backport patch to emit audit events from systemd-sysusers
e54ec2f978 Trim changelog entries that are not relevant to users

9 months agoobs: trigger systemd-suse instead of systemd-fedora
Luca Boccassi [Tue, 18 Feb 2025 23:10:00 +0000 (23:10 +0000)] 
obs: trigger systemd-suse instead of systemd-fedora

The suse recipe is the odd one out, so now fedora builds with
arch/debian/ubuntu and suse is in its own package

9 months agonetwork: drop old kernel support (#36402)
Luca Boccassi [Tue, 18 Feb 2025 22:39:36 +0000 (22:39 +0000)] 
network: drop old kernel support (#36402)

9 months agoshell completion: add kernel-identify/inspect verbs for bootctl
Luca Boccassi [Tue, 18 Feb 2025 21:15:08 +0000 (21:15 +0000)] 
shell completion: add kernel-identify/inspect verbs for bootctl

Follow-up for a05255981ba5b04f1cf54ea656fbce1dfd9c3a68
Follow-up for 3e0a3a0259324b4c40a9a62c8506fe683cd0273b

9 months agoupdate TODO
Lennart Poettering [Tue, 18 Feb 2025 21:28:31 +0000 (22:28 +0100)] 
update TODO

9 months agoJournal-remote: modernize source_free() and fix memleak (#36430)
Yu Watanabe [Tue, 18 Feb 2025 19:56:15 +0000 (04:56 +0900)] 
Journal-remote: modernize source_free() and fix memleak (#36430)

- modernize source_free().
- fix memleak introduced by cfaf78001c3451d549bcb1ee4adca3e85b934e56. Fixes CID#1591182.

9 months agoterminal-util: fix possible NULL pointer dereference
Yu Watanabe [Tue, 18 Feb 2025 15:42:18 +0000 (00:42 +0900)] 
terminal-util: fix possible NULL pointer dereference

Fixes a bug introduced by 94a2b1cd25c93870a7a4ac904f6c0f2e4f902038.
Fixes CID#1591787.