systemd/.git
20 months agonsresource: fix FD leak
Luca Boccassi [Mon, 8 Apr 2024 01:33:27 +0000 (02:33 +0100)]
nsresource: fix FD leak

Also fix return code, namespace_open_by_type uses RET_NERRNO

CID#1542923

Follow-up for 54452c7b2aa

20 months agonetworkd: report error if lease file cannot be loaded and ignore
Zbigniew Jędrzejewski-Szmek [Sat, 6 Apr 2024 17:01:56 +0000 (19:01 +0200)]
networkd: report error if lease file cannot be loaded and ignore

On my system, networkd would report that interface ve-rawhide is "Failed"
without anything in the logs:
systemd-networkd[651095]: ve-rawhide: Trying to reconfigure the interface.
systemd-networkd[651095]: ve-rawhide: Gained IPv6LL
systemd-networkd[651095]: ve-rawhide: Link DOWN
systemd-networkd[651095]: ve-rawhide: Lost carrier
systemd-networkd[651095]: ve-rawhide: Configuring with /usr/lib/systemd/network/80-container-ve.network.
systemd-networkd[651095]: ve-rawhide: Link UP
systemd-networkd[651095]: ve-rawhide: Gained carrier
systemd-networkd[651095]: ve-rawhide: Failed

At debug level:
systemd-networkd[799993]: dhcp-server-lease/ve-rawhide:1:1: Missing object field 'Address'.

$ jq </var/lib/systemd/network/dhcp-server-lease/ve-rawhide
{
  "BootID": "5d86b34b98894322bfd4ae8443ce59b3",
  "Leases": [
    {
      "ClientId": [ ... ],
      "Address": [ 192, 168, 120, 179 ],
      "Hostname": "rawhide",
      "ExpirationUSec": 966046821158,
      "ExpirationRealtimeUSec": 1711203197266940
    }
  ]
}

I'm not sure why "Address" is missing, but anyway, in this case, we should ignore the
lease file rather than refusing to configure the interface. Also, warn at the point
where we know what the filename is.

20 months agocore: fix typo
Antonio Alvarez Feijoo [Mon, 8 Apr 2024 08:04:32 +0000 (10:04 +0200)]
core: fix typo

20 months agotree-wide: drop several remaining license headers
Yu Watanabe [Fri, 5 Apr 2024 04:08:05 +0000 (13:08 +0900)]
tree-wide: drop several remaining license headers

And downgrade the license of utf8.c to LGPL-2.0-or-later, to follow the
original license.

20 months agomountfsd: fix typo
Yu Watanabe [Mon, 8 Apr 2024 00:22:03 +0000 (09:22 +0900)]
mountfsd: fix typo

Follow-up for 702a52f4b5d49cce11e2adbc740deb3b644e2de0.

20 months agonsresourced: fix typo
Yu Watanabe [Mon, 8 Apr 2024 00:20:17 +0000 (09:20 +0900)]
nsresourced: fix typo

Follow-up for 8aee931e7ae1adb01eeac0e1e4c0aef6ed3969ec.

20 months agodissect: fix typo
Yu Watanabe [Mon, 8 Apr 2024 00:17:50 +0000 (09:17 +0900)]
dissect: fix typo

Follow-up for 9444e54e56b3d9ea81135700abe0792ead7f69ae.

20 months agonspawn: fix typo
Yu Watanabe [Mon, 8 Apr 2024 00:12:06 +0000 (09:12 +0900)]
nspawn: fix typo

Follow-up for 0af7e294343b29d769c1bae6a8d390236560ec1a.

20 months agoMerge pull request #32136 from YHNdnzj/nextroot-auto-mountpoint
Luca Boccassi [Sun, 7 Apr 2024 22:32:18 +0000 (23:32 +0100)]
Merge pull request #32136 from YHNdnzj/nextroot-auto-mountpoint

systemctl-logind: auto soft-reboot only if /run/nextroot/ is mountpoint

20 months agotest-execute: check for s390x first and duplicate test
Luca Boccassi [Sun, 7 Apr 2024 15:24:38 +0000 (16:24 +0100)]
test-execute: check for s390x first and duplicate test

s390x will define both s390x and s390, so exec-personality-s390.service is ran
in both cases but fails on s390x, as the personality returned is s390x.
Split the test and check specifically for s390x.

20 months agohibernate-util: check 'noresume' before reading resume setting
Mike Yuan [Sat, 6 Apr 2024 18:59:07 +0000 (02:59 +0800)]
hibernate-util: check 'noresume' before reading resume setting

Also hibernation_is_safe() should really take this
into consideration too.

20 months agoMerge pull request #26826 from poettering/mntfsd
Luca Boccassi [Sun, 7 Apr 2024 18:43:34 +0000 (19:43 +0100)]
Merge pull request #26826 from poettering/mntfsd

unprivileged DDI mounts + dynamic userns range allocation via IPC

20 months agomkosi: Install dnf5 in Fedora image
Daan De Meyer [Sun, 7 Apr 2024 13:51:57 +0000 (15:51 +0200)]
mkosi: Install dnf5 in Fedora image

20 months agoMerge pull request #32135 from keszybz/compiler-warning-cleanup
Luca Boccassi [Sun, 7 Apr 2024 15:33:38 +0000 (16:33 +0100)]
Merge pull request #32135 from keszybz/compiler-warning-cleanup

Compiler warning cleanup

20 months agosystemctl-logind: auto soft-reboot only if /run/nextroot/ is mountpoint
Mike Yuan [Sun, 7 Apr 2024 11:33:37 +0000 (19:33 +0800)]
systemctl-logind: auto soft-reboot only if /run/nextroot/ is mountpoint

Consider the following case: a user sets up a minimum rootfs for
file system maintenance work in /run/nextroot/ dir directly. When
they're done, they expect 'systemctl reboot' to perform a full reboot.
But they keep soft-rebooting back to the tmpfs root, until they
find out about $SYSTEMCTL_SKIP_AUTO_SOFT_REBOOT.

So currently, when /run/nextroot/ is a normal dir, pid1 automatically
turns it into a bind mount to soft-reboot into. This is good, but when
combined with automatic soft-reboot it has an arguably unexpected
behavior, since /run/nextroot/ can never go away in such a case.
OTOH, if /run/nextroot/ is a mountpoint in the first place, the mount
is *moved* so a second reboot would not trigger auto soft-reboot.
Let's just make things more friendly to users, and do auto soft-reboot
only if /run/nextroot/ is also a mountpoint.

20 months agologind-dbus: use FLAGS_SET more
Mike Yuan [Sun, 7 Apr 2024 11:26:56 +0000 (19:26 +0800)]
logind-dbus: use FLAGS_SET more

20 months agocore: use log_unit_debug in *_set_state
Mike Yuan [Sat, 6 Apr 2024 14:04:17 +0000 (22:04 +0800)]
core: use log_unit_debug in *_set_state

20 months agorun: query for SoftRebootsCount only for system scope runs
Luca Boccassi [Fri, 5 Apr 2024 23:00:41 +0000 (00:00 +0100)]
run: query for SoftRebootsCount only for system scope runs

Only the system manager records soft reboots, and the user session is
restarted anyway so it doesn't suffer from the ID clash issue

Follow-up for ed358516937780b524a2cfa833427da3df1bc87f

20 months agosd-bus: rework assert to make the gcc happy
Zbigniew Jędrzejewski-Szmek [Sun, 7 Apr 2024 09:13:06 +0000 (11:13 +0200)]
sd-bus: rework assert to make the gcc happy

With gcc-14.0.1-0.13.fc40, when compiling with -O2, the compiler doesn't understand
that sd_bus_error_setf() always returns negative on error when <name> is provided:

[28/576] Compiling C object systemd-resolved.p/src_resolve_resolved-bus.c.o
../src/resolve/resolved-bus.c: In function ‘call_link_method’:
../src/resolve/resolved-bus.c:1763:16: warning: ‘l’ may be used uninitialized [-Wmaybe-uninitialized]
 1763 |         return handler(message, l, error);
      |                ^~~~~~~~~~~~~~~~~~~~~~~~~~
../src/resolve/resolved-bus.c:1749:15: note: ‘l’ was declared here
 1749 |         Link *l;
      |               ^
../src/resolve/resolved-bus.c: In function ‘bus_method_get_link’:
../src/resolve/resolved-bus.c:1822:13: warning: ‘l’ may be used uninitialized [-Wmaybe-uninitialized]
 1822 |         p = link_bus_path(l);
      |             ^~~~~~~~~~~~~~~~
../src/resolve/resolved-bus.c:1810:15: note: ‘l’ was declared here
 1810 |         Link *l;
      |               ^
...

Let's make the assertion a bit more explicit. With this, the warning goes away,
but I think it's more obvious to a human reader too.

20 months agoask-password: minor shortening
Zbigniew Jędrzejewski-Szmek [Sun, 7 Apr 2024 09:08:22 +0000 (11:08 +0200)]
ask-password: minor shortening

20 months agocore: silence gcc warning about unitialized variable
Zbigniew Jędrzejewski-Szmek [Sun, 7 Apr 2024 09:05:42 +0000 (11:05 +0200)]
core: silence gcc warning about unitialized variable

When compiled with -O2, the compiler is not happy about dynamic_user_pop() and
would warn about the output variables not being set. It does have a point:
we were doing a cast from ssize_t to int, and theoretically there could be
wraparound. So let's add an explicit check that the cast to int is fine.

[540/2509] Compiling C object src/core/libsystemd-core-256.so.p/dynamic-user.c.o
../src/core/dynamic-user.c: In function ‘dynamic_user_close.isra’:
../src/core/dynamic-user.c:580:9: warning: ‘uid’ may be used uninitialized [-Wmaybe-uninitialized]
  580 |         unlink_uid_lock(lock_fd, uid, d->name);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/core/dynamic-user.c:560:15: note: ‘uid’ was declared here
  560 |         uid_t uid;
      |               ^~~
../src/core/dynamic-user.c: In function ‘dynamic_user_realize’:
../src/core/dynamic-user.c:476:29: warning: ‘new_uid’ may be used uninitialized [-Wmaybe-uninitialized]
  476 |                         num = new_uid;
      |                         ~~~~^~~~~~~~~
../src/core/dynamic-user.c:398:23: note: ‘new_uid’ was declared here
  398 |                 uid_t new_uid;
      |                       ^~~~~~~

20 months agoupdate TODO
Lennart Poettering [Mon, 4 Dec 2023 16:57:06 +0000 (17:57 +0100)]
update TODO

20 months agotest: add integration test for unpriv mountfsd/nsresourced
Lennart Poettering [Tue, 23 Jan 2024 15:20:10 +0000 (16:20 +0100)]
test: add integration test for unpriv mountfsd/nsresourced

20 months agonspawn: make nspawn work without privileges
Lennart Poettering [Tue, 12 Dec 2023 10:00:19 +0000 (11:00 +0100)]
nspawn: make nspawn work without privileges

20 months agocore: implement RootImage= via mountfsd in unprivileged environments
Lennart Poettering [Wed, 6 Dec 2023 15:39:39 +0000 (16:39 +0100)]
core: implement RootImage= via mountfsd in unprivileged environments

20 months agodissect-tool: allow systemd-dissect to talk to mountfsd
Lennart Poettering [Thu, 20 Apr 2023 17:07:10 +0000 (19:07 +0200)]
dissect-tool: allow systemd-dissect to talk to mountfsd

20 months agodissect-image: add a generic varlink client side for mountfsd
Lennart Poettering [Mon, 4 Dec 2023 21:09:15 +0000 (22:09 +0100)]
dissect-image: add a generic varlink client side for mountfsd

20 months agomountfsd: add new systemd-mountfsd component
Lennart Poettering [Thu, 9 Mar 2023 11:27:29 +0000 (12:27 +0100)]
mountfsd: add new systemd-mountfsd component

20 months agonsresourced: add client-side helpers around nsresourced APIs
Lennart Poettering [Mon, 4 Dec 2023 16:57:22 +0000 (17:57 +0100)]
nsresourced: add client-side helpers around nsresourced APIs

This adds simple functions that wrap the Varlink IPC calls.

20 months agonsresourced: add new daemon for granting clients user namespaces and assigning resour...
Lennart Poettering [Thu, 20 Apr 2023 17:07:33 +0000 (19:07 +0200)]
nsresourced: add new daemon for granting clients user namespaces and assigning resources to them

This adds a small, socket-activated Varlink daemon that can delegate UID
ranges for user namespaces to clients asking for it.

The primary call is AllocateUserRange() where the user passes in an
uninitialized userns fd, which is then set up.

There are other calls that allow assigning a mount fd to a userns
allocated that way, to set up permissions for a cgroup subtree, and to
allocate a veth for such a user namespace.

Since the UID assignments are supposed to be transitive, i.e. not
permanent, care is taken to ensure that users cannot create inodes owned
by these UIDs, so that persistancy cannot be acquired. This is
implemented via a BPF-LSM module that ensures that any member of a
userns allocated that way cannot create files unless the mount it
operates on is owned by the userns itself, or is explicitly
allowelisted.

BPF LSM program with contributions from Alexei Starovoitov.

20 months agobuild-sys: pick up vmlinux.h from running kernel BTF or user
Lennart Poettering [Wed, 6 Dec 2023 17:37:31 +0000 (18:37 +0100)]
build-sys: pick up vmlinux.h from running kernel BTF or user

20 months agodissect-image: document one more dissected_image_decrypt() error code
Lennart Poettering [Tue, 23 Jan 2024 15:19:38 +0000 (16:19 +0100)]
dissect-image: document one more dissected_image_decrypt() error code

20 months agodissect-image: make dissected_image_acquire_metadata() operate within a userns if...
Lennart Poettering [Mon, 4 Dec 2023 17:23:31 +0000 (18:23 +0100)]
dissect-image: make dissected_image_acquire_metadata() operate within a userns if possible

This opens the door for making the call work without privileges: if we
pass in a userns fd and DissectedImage that has mount fds then we can
acquire all information without privs.

20 months agodissect-image: add a new helper that checks if VeritySettings has anything set at all
Lennart Poettering [Mon, 4 Dec 2023 17:12:58 +0000 (18:12 +0100)]
dissect-image: add a new helper that checks if VeritySettings has anything set at all

20 months agodissect-image: add dissected_image_close() that closes all references to resources
Lennart Poettering [Tue, 14 Mar 2023 21:46:56 +0000 (22:46 +0100)]
dissect-image: add dissected_image_close() that closes all references to resources

20 months agodiscover-image: export search paths array
Lennart Poettering [Wed, 26 Apr 2023 19:22:06 +0000 (21:22 +0200)]
discover-image: export search paths array

This way we can use it to validate image paths later.

20 months agocgroup-setup: add fd-based version of cg_attach()
Lennart Poettering [Tue, 12 Dec 2023 10:02:59 +0000 (11:02 +0100)]
cgroup-setup: add fd-based version of cg_attach()

20 months agocgroup-util: add helpers for opening cgroup by id
Lennart Poettering [Tue, 12 Dec 2023 09:44:57 +0000 (10:44 +0100)]
cgroup-util: add helpers for opening cgroup by id

20 months agolock-util: make global lock return parameter to image_path_lock() optional
Lennart Poettering [Fri, 8 Dec 2023 09:47:38 +0000 (10:47 +0100)]
lock-util: make global lock return parameter to image_path_lock() optional

When adding unprivileged nspawn support we don't really want a global
lock file, since we cannot even access the dir they are stored in, hence
make the concept optional.

Some minor other modernizations.

20 months agobpf-dlopen: pick up more symbols from libbpf
Lennart Poettering [Fri, 1 Mar 2024 16:31:06 +0000 (17:31 +0100)]
bpf-dlopen: pick up more symbols from libbpf

20 months agonamespace-util: add new helper is_our_namespace()
Lennart Poettering [Wed, 6 Dec 2023 10:35:04 +0000 (11:35 +0100)]
namespace-util: add new helper is_our_namespace()

20 months agonamespace-util: add namespace_open_by_type() helper
Lennart Poettering [Tue, 5 Dec 2023 10:51:26 +0000 (11:51 +0100)]
namespace-util: add namespace_open_by_type() helper

20 months agonamespace-util: add detach_mount_namespace_userns()
Lennart Poettering [Tue, 14 Mar 2023 21:36:35 +0000 (22:36 +0100)]
namespace-util: add detach_mount_namespace_userns()

20 months agonamespace-util: add helper for allocating an empty userns fd
Lennart Poettering [Tue, 14 Mar 2023 16:22:18 +0000 (17:22 +0100)]
namespace-util: add helper for allocating an empty userns fd

20 months agonamespace-util: add detach_mount_namespace_harder()
Lennart Poettering [Mon, 13 Mar 2023 14:23:11 +0000 (15:23 +0100)]
namespace-util: add detach_mount_namespace_harder()

This is just like detach_mount_namespace() but if need be uses unpriv
user namespaces to be able to execute CLONE_NEWNS.

20 months agouid-range: add some basic operations on UidRange objects
Lennart Poettering [Thu, 20 Apr 2023 16:51:26 +0000 (18:51 +0200)]
uid-range: add some basic operations on UidRange objects

Helpers to compare and get size, and whether the object is empty.

20 months agouid-range: add new uid_range_load_userns_by_fd() helper
Lennart Poettering [Thu, 20 Apr 2023 16:51:55 +0000 (18:51 +0200)]
uid-range: add new uid_range_load_userns_by_fd() helper

This is similar to uid_range_load_userns() but instead of reading the
uid_map off a process it reads it off a userns fd.

(Of course the kernel has no API for this right now, hence we fork off a
throw-away process which joins the user namespace, and then read off the
data from there.)

20 months agouid-range: optionally load outside view of UID range from uid_map procfs file
Lennart Poettering [Thu, 20 Apr 2023 16:51:03 +0000 (18:51 +0200)]
uid-range: optionally load outside view of UID range from uid_map procfs file

20 months agouid-range: add uid_range_overlaps() helper
Lennart Poettering [Tue, 14 Mar 2023 09:38:58 +0000 (10:38 +0100)]
uid-range: add uid_range_overlaps() helper

20 months agoimage-policy: add a new image_policy_intersect() call
Lennart Poettering [Wed, 26 Apr 2023 19:51:53 +0000 (21:51 +0200)]
image-policy: add a new image_policy_intersect() call

This new call takes two image policy objects and generates an
"intersection" policy, i.e. only allows what is allowed by both. Or in
other words it conceptually implements a binary AND of the policy flags.
(Except that it's a bit harder, due to normalization, and underspecified
flags).

We can use this later for mountfsd: a client can specify a policy, and
mountfsd can specify another policy, and we'll then apply only what both
allow.

Note that a policy generated like this might be invalid. For example, if
one policy says root must exist and be verity or luks protected, and the
other policy says root must be absent, then the intersection is invalid,
since one policy only allows what the other prohibits and vice versa.
We'll return a clear error code in that case (ENAVAIL). (This is because
we simply don't allow encoding such impossible policies in an
ImagePolicy structure, for good reasons.)

20 months agovarlink: add varlink_peek_dup_fd() helper
Lennart Poettering [Tue, 23 Jan 2024 09:22:27 +0000 (10:22 +0100)]
varlink: add varlink_peek_dup_fd() helper

This new call is like varlink_peek_fd() (i.e. gets an fd out of the
connection but leaving it also in there), and combines ith with
F_DUPFD_CLOEXEC to make a copy of it.

We previously already had varlink_dup_fd() which was a duplicating
version for pushing an fd *into* the connection. To reduce confusion,
let's rename that one varlink_push_dup_fd() to make the symmetry to
valrink_push_fd() clear so that we have no:

varlink_peer_push_fd()        → put fd in without dup'ing
varlink_peer_push_dup_fd()    → same with F_DUPFD_CLOEXEC
varlink_peer_peek_fd()        → get fd out without dup'ing
varlink_peer_peek_dup_fd()    → same with F_DUPFD_CLOEXEC

20 months agovarlink: add varlink_get_peer_gid() helper
Lennart Poettering [Tue, 19 Dec 2023 12:12:14 +0000 (13:12 +0100)]
varlink: add varlink_get_peer_gid() helper

20 months agotest: improve debug-ability of test-execute
Frantisek Sumsal [Fri, 5 Apr 2024 19:23:42 +0000 (21:23 +0200)]
test: improve debug-ability of test-execute

Since e56a8790a0 debugging test-execute fails has been a royal PITA, since
we ditch all potentially useful output from the test units (that, for
the most part, run `sh -x ...`). Let's improve the situation a bit by
setting EXEC_OUTPUT_NULL only when running the single test case that
needs it, and inheriting stdout otherwise.

For example, with a purposefully introduced error we get this output
with this patch:
exec-personality-x86-64.service: About to execute: sh -x -c "c=\$\$(uname -m); test \"\$\$c\" = \"foo_bar\""
Serializing sd-executor-state to memfd.
...
        Personality: x86-64
        LockPersonality: no
        SystemCallErrorNumber: kill
++ uname -m
+ c=x86_64
+ test x86_64 = foo_bar
Received SIGCHLD from PID 1520588 (sh).
Child 1520588 (sh) died (code=exited, status=1/FAILURE)
exec-personality-x86-64.service: Child 1520588 belongs to exec-personality-x86-64.service.
exec-personality-x86-64.service: Main process exited, code=exited, status=1/FAILURE
exec-personality-x86-64.service: Failed with result 'exit-code'.
...
        Exit Status: 1
src/test/test-execute.c:456:test_exec_personality: exec-personality-x86-64.service: can_unshare=yes: exit status 1, expected 0
(test-execute-root) terminated by signal ABRT.
Assertion 'r >= 0' failed at src/test/test-execute.c:1433, function prepare_ns(). Aborting.
Aborted

But without it, we'd miss the most important part:
exec-personality-x86-64.service: About to execute: sh -x -c "c=\$\$(uname -m); test \"\$\$c\" = \"foo_bar\""
Serializing sd-executor-state to memfd.
...
        Personality: x86-64
        LockPersonality: no
        SystemCallErrorNumber: kill
Received SIGCHLD from PID 1521365 (sh).
Child 1521365 (sh) died (code=exited, status=1/FAILURE)
exec-personality-x86-64.service: Child 1521365 belongs to exec-personality-x86-64.service.
exec-personality-x86-64.service: Main process exited, code=exited, status=1/FAILURE
exec-personality-x86-64.service: Failed with result 'exit-code'.
...
        Exit Status: 1
src/test/test-execute.c:456:test_exec_personality: exec-personality-x86-64.service: can_unshare=yes: exit status 1, expected 0
(test-execute-root) terminated by signal ABRT.
Assertion 'r >= 0' failed at src/test/test-execute.c:1433, function prepare_ns(). Aborting.
Aborted

20 months agoMerge pull request #31131 from poettering/dlopen-kmod
Luca Boccassi [Sat, 6 Apr 2024 12:19:27 +0000 (13:19 +0100)]
Merge pull request #31131 from poettering/dlopen-kmod

turn libkmod into a dlopen() dependency, too

20 months agoman: fix typo s/veno/reno/
Vito Caputo [Sat, 6 Apr 2024 04:11:28 +0000 (21:11 -0700)]
man: fix typo s/veno/reno/

20 months agoMerge pull request #32115 from YHNdnzj/service-main-pid-take
Luca Boccassi [Fri, 5 Apr 2024 22:53:13 +0000 (23:53 +0100)]
Merge pull request #32115 from YHNdnzj/service-main-pid-take

core/service: a few improvements for main pid handling

20 months agoMerge pull request #32123 from mrc0mmand/assorted-tweaks
Luca Boccassi [Fri, 5 Apr 2024 21:22:06 +0000 (22:22 +0100)]
Merge pull request #32123 from mrc0mmand/assorted-tweaks

A couple of assorted tweaks

20 months agoMerge pull request #32125 from YHNdnzj/post-merge-stuff
Luca Boccassi [Fri, 5 Apr 2024 21:18:31 +0000 (22:18 +0100)]
Merge pull request #32125 from YHNdnzj/post-merge-stuff

Trivial post merge stuff

20 months agocore/service: add a FIXME to use pidfd to monitor foreign processes
Mike Yuan [Fri, 5 Apr 2024 10:41:07 +0000 (18:41 +0800)]
core/service: add a FIXME to use pidfd to monitor foreign processes

20 months agocore/service: complain louder if new MAINPID= is refused
Mike Yuan [Fri, 5 Apr 2024 10:28:13 +0000 (18:28 +0800)]
core/service: complain louder if new MAINPID= is refused

20 months agocore/service: make service_set_main_pidref consume pidref
Mike Yuan [Fri, 5 Apr 2024 10:21:50 +0000 (18:21 +0800)]
core/service: make service_set_main_pidref consume pidref

Currently, the memory management of service_set_main_pidref
is a bit odd. Normally we either invalidate the original
resource on caller's side after the call succeeds, or
just pass the ownership wholly. But service_set_main_pidref
take a pointer, and calls pidref_done() internally.

Let's just make it consume the passed pidref. This is more
straightforward.

20 months agosleep: rename SleepMemMode= to MemorySleepMode=
Mike Yuan [Fri, 5 Apr 2024 18:10:17 +0000 (02:10 +0800)]
sleep: rename SleepMemMode= to MemorySleepMode=

Addresses https://github.com/systemd/systemd/pull/31986#discussion_r1554053623

20 months agoos-util: use ENDSWITH_SET where appropriate
Mike Yuan [Fri, 5 Apr 2024 18:06:38 +0000 (02:06 +0800)]
os-util: use ENDSWITH_SET where appropriate

Addresses https://github.com/systemd/systemd/pull/31435#discussion_r1553969156

Co-authored-by: Lennart Poettering <lennart@poettering.net>
20 months agobase-filesystem: check for __s390x__ first
Frantisek Sumsal [Fri, 5 Apr 2024 17:33:28 +0000 (19:33 +0200)]
base-filesystem: check for __s390x__ first

On s390x both __s390__ and __s390x__ are defined, and with the original
order we'd go through the __s390__ branch and emit a warning:

[169/2118] Compiling C object src/shared/libsystemd-shared-256.a.p/base-filesystem.c.o
../src/shared/base-filesystem.c:136:11: note: ‘#pragma message: Please add an entry above specifying whether your architecture uses /lib64/, /lib32/, or no such links.’
  136 | #  pragma message "Please add an entry above specifying whether your architecture uses /lib64/, /lib32/, or no such links."
      |           ^~~~~~~

20 months agotest: account for build dir being under one of the tmpfs-ed directories
Frantisek Sumsal [Fri, 5 Apr 2024 17:23:12 +0000 (19:23 +0200)]
test: account for build dir being under one of the tmpfs-ed directories

If we're running test-execute from the build directory which is under
one of the tmpfs-ed directories (i.e. /root or /tmp), test-execute might
behave strangely, since in that case manager_new() pins the system
systemd-executor binary instead of the build dir one, which may lead to
a very confusing test fails (if there's enough difference between the
system and built sd-executor binary). Let's account for that and
bind-mount the build dir under the tmpfs-ed directory if necessary.

20 months agotest: make test-fd-util more lenient when using fd_move_above_stdio()
Frantisek Sumsal [Fri, 5 Apr 2024 10:18:58 +0000 (12:18 +0200)]
test: make test-fd-util more lenient when using fd_move_above_stdio()

On s390x this test fails when the SUT uses the z90crypt kernel module,
as it's an another FD the test doesn't account for:

/* test_rearrange_stdio */
Successfully forked off 'rearrange' as PID 57293.
test_rearrange_stdio: r=0
/proc/57293/fd:
total 0
lrwx------. 1 root root 64 Apr  5 06:18 0 -> /dev/pts/0
lrwx------. 1 root root 64 Apr  5 06:18 1 -> /dev/pts/0
lrwx------. 1 root root 64 Apr  5 06:18 2 -> /dev/pts/0
lrwx------. 1 root root 64 Apr  5 06:18 3 -> /dev/z90crypt
rearrange terminated by signal ABRT.

Debugging this was pain, since the child process didn't log anything
once we closed stdout/stderr (for obvious reasons). Let's fix both
issues by switching logging to kmsg once we close stdin/stdout/stderr,
and also by making the test work fine when there are some extra FDs in
the child's environment.

20 months agoMerge pull request #31435 from bluca/portable_fix_versioned
Zbigniew Jędrzejewski-Szmek [Fri, 5 Apr 2024 15:04:17 +0000 (17:04 +0200)]
Merge pull request #31435 from bluca/portable_fix_versioned

portable: assorted bug fixes

20 months agosd-journal: fix check in `journal_file_verify_header()`
Antonio Alvarez Feijoo [Fri, 5 Apr 2024 06:27:36 +0000 (08:27 +0200)]
sd-journal: fix check in `journal_file_verify_header()`

Fixes 6ea51363c8e39fb0924dda972a212936456a2b4f

20 months agolog: fix comment
Frantisek Sumsal [Fri, 5 Apr 2024 10:14:18 +0000 (12:14 +0200)]
log: fix comment

20 months agocore: Serialize both pid and pidfd to keep downgrades working
Daan De Meyer [Wed, 3 Apr 2024 14:06:14 +0000 (16:06 +0200)]
core: Serialize both pid and pidfd to keep downgrades working

Currently, when downgrading from a version with pidfd support to a
version without pidfd support, all information about running processes
is lost as the newer systemd will serialized pidfds which are not recognized
by the older systemd when deserializing.

To improve the situation, let's serialize both the pid and the pidfd.
This is safe because existing versions will either replace the first
deserialized pidref with the second one or discard the second one in
favor of the first one depending on the unit and field. Older versions
that don't support pidfd's will silently discard any fields that contain
a pidfd as those will try to parse the field as a pid and since a pidfd
field will start with '@', those versions will debug error log and ignore
the value.

To make sure we reuse the existing pidfd as much as possible, the pidfd
is serialized first. Both for scopes and service main pids, if the same
pid is seen multiple times, the first pidref is kept. So by serializing
the pidfd first we make sure the original pidfd is used instead of the
new one which is opened when deserializing the first pid field.

For other control units, older versions with pidfd support will discard
the first pidfd and replace it with a new pidfd from the second pid field.
This is a slight regression on downgrades, but we make sure it doesn't
happen for future versions (and older versions when this commit is
backported) by modifying the logic to only use the first successfully
deserialized pidref so that the raw pid without pidfd is discarded instead
of it replacing the existing pidfd.

20 months agomeson: set -fno-ssa-phiopt when building bpf with gcc
Luca Boccassi [Thu, 4 Apr 2024 22:42:45 +0000 (23:42 +0100)]
meson: set -fno-ssa-phiopt when building bpf with gcc

There are bugs in the kernel verifier that cause legitimate code
to be rejected, disabling this optimization makes bpf programs
built with a new enough gcc work again.

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

20 months agohwdb: fix missing colon (#32108)
Kirk [Fri, 5 Apr 2024 01:18:59 +0000 (20:18 -0500)]
hwdb: fix missing colon (#32108)

Missing colon prevents this from working correctly on the Chuwi UBook X and UBook X Pro.

20 months agoMerge pull request #32085 from yuwata/udev-check-processing
Luca Boccassi [Thu, 4 Apr 2024 22:46:26 +0000 (23:46 +0100)]
Merge pull request #32085 from yuwata/udev-check-processing

udev: check ID_PROCESSING udev property more

20 months agoMerge pull request #31373 from yuwata/network-neighbor-advertisement
Yu Watanabe [Thu, 4 Apr 2024 20:54:12 +0000 (05:54 +0900)]
Merge pull request #31373 from yuwata/network-neighbor-advertisement

network: add basic support of neighbor advertisement

20 months agoudevadm-test: also show security labels if specified
Yu Watanabe [Wed, 3 Apr 2024 20:06:39 +0000 (05:06 +0900)]
udevadm-test: also show security labels if specified

Follow-up for 03b6879f4d45c49264708aef872fd05af30ddcf0.

20 months agobacklight: fix detection of multiple graphic cards
Yu Watanabe [Wed, 3 Apr 2024 20:45:11 +0000 (05:45 +0900)]
backlight: fix detection of multiple graphic cards

Follow-up for e0504dd011189d97a1ea813aabfe1e696742bcf5.

Hopefully, devices in PCI subsystem have some properties, thus have
their udev database file. But, that may not be true. Here, we only read
sysattrs of enumerated devices, hence it is not necessary to check if
the device is initialized or not.

20 months agoudev: do not update sysattr and sysctl value on testing
Yu Watanabe [Wed, 3 Apr 2024 19:58:25 +0000 (04:58 +0900)]
udev: do not update sysattr and sysctl value on testing

Follow-up for 089bef66316e5bdc91b9984148e5a6455449c1da.

20 months agoMerge pull request #32102 from YHNdnzj/efi-var-consistent
Luca Boccassi [Thu, 4 Apr 2024 20:21:10 +0000 (21:21 +0100)]
Merge pull request #32102 from YHNdnzj/efi-var-consistent

Trivial follow-up for hibernate-resume

20 months agoman/kernel-command-line: document resume_offset= too
Mike Yuan [Thu, 4 Apr 2024 19:02:00 +0000 (03:02 +0800)]
man/kernel-command-line: document resume_offset= too

20 months agohibernate-util: say "HibernateLocation EFI variable" consistently
Mike Yuan [Thu, 4 Apr 2024 18:59:59 +0000 (02:59 +0800)]
hibernate-util: say "HibernateLocation EFI variable" consistently

20 months agoudevadm-test: insert missing line break
Yu Watanabe [Thu, 4 Apr 2024 17:03:27 +0000 (02:03 +0900)]
udevadm-test: insert missing line break

Addresses post-merge comment:
https://github.com/systemd/systemd/commit/03b6879f4d45c49264708aef872fd05af30ddcf0#r140587790

20 months agoTEST-50: add tests for riscv{32,64}
Zbigniew Jędrzejewski-Szmek [Thu, 4 Apr 2024 11:25:41 +0000 (13:25 +0200)]
TEST-50: add tests for riscv{32,64}

Requested for the testing of F40 riscv bringup. Numbers copied from
https://uapi-group.org/specifications/specs/discoverable_partitions_specification/.

It'd be nice to do the same in TEST-58, but the code there is rather involved
and I don't have a system to test on. We can probably try that later on when F40
is available.

20 months agoFixed resolution for pen and touchpad
mkubiak [Thu, 4 Apr 2024 12:25:15 +0000 (14:25 +0200)]
Fixed resolution for pen and touchpad

20 months agonetowrk/ndisc: drop NDisc configurations when received NA without Router flag
Yu Watanabe [Wed, 14 Feb 2024 12:32:56 +0000 (21:32 +0900)]
netowrk/ndisc: drop NDisc configurations when received NA without Router flag

Closes #28421.

20 months agotest-ndisc: add basic tests for Neighbor Advertisement handling
Yu Watanabe [Wed, 14 Feb 2024 12:17:00 +0000 (21:17 +0900)]
test-ndisc: add basic tests for Neighbor Advertisement handling

20 months agosd-ndisc: add basic support of Neighbor Advertisement message
Yu Watanabe [Wed, 14 Feb 2024 11:39:50 +0000 (20:39 +0900)]
sd-ndisc: add basic support of Neighbor Advertisement message

This adds basic support of receiving and parsing Neighbor Advertisement
message defined in RFC 4861.

20 months agocryptsetup-tokens: fix argument order mismatch in function
Antonio Alvarez Feijoo [Thu, 4 Apr 2024 15:44:52 +0000 (17:44 +0200)]
cryptsetup-tokens: fix argument order mismatch in function

The order of the arguments of the function `acquire_luks2_key()` in
`luks2-tpm2.h` is wrong, `pcrlock_path` and `pin` are swapped.

Fixes 404aea7815595c1324947ed7f2a7502b17d3cc01

20 months agotree-wide: refuse enumerated device with ID_PROCESSING=1
Yu Watanabe [Wed, 3 Apr 2024 20:53:55 +0000 (05:53 +0900)]
tree-wide: refuse enumerated device with ID_PROCESSING=1

When enumerated devices are being processed by udevd, we will receive
corresponding uevents later. So, we should not process devices in that
case.

20 months agotree-wide: use device_is_processed() more
Yu Watanabe [Wed, 3 Apr 2024 20:40:52 +0000 (05:40 +0900)]
tree-wide: use device_is_processed() more

20 months agoudev-util: rename device_is_processing() -> device_is_processed()
Yu Watanabe [Wed, 3 Apr 2024 20:39:25 +0000 (05:39 +0900)]
udev-util: rename device_is_processing() -> device_is_processed()

And make it also check the existence of the udev database.

20 months agoMerge pull request #32097 from keszybz/sd-notify-cleanups
Luca Boccassi [Thu, 4 Apr 2024 16:44:12 +0000 (17:44 +0100)]
Merge pull request #32097 from keszybz/sd-notify-cleanups

Small cleanups to sd_notify docs

20 months agoMerge pull request #32033 from DaanDeMeyer/unit-creds
Daan De Meyer [Thu, 4 Apr 2024 16:27:20 +0000 (18:27 +0200)]
Merge pull request #32033 from DaanDeMeyer/unit-creds

debug-generator: Add unit and drop-in credentials

20 months agoupdate TODO
Lennart Poettering [Tue, 30 Jan 2024 13:58:47 +0000 (14:58 +0100)]
update TODO

20 months agolibkmod: turn into dlopen() dependency
Lennart Poettering [Tue, 30 Jan 2024 13:50:35 +0000 (14:50 +0100)]
libkmod: turn into dlopen() dependency

As it turns out libkmod has quite a bunch of deps, including various
compressing libs and similar. By turning this into a dlopen()
dependency, we can make our depchain during install time quite a bit
smaller. In particular as inside of containers kmod doesn't help anyway
as CAP_SYS_MODULE is not available anyway.

While we are at it, also share the code that sets up logging/kmod
context.

After:

$ lddtree ./build/systemd
systemd => ./build/systemd (interpreter => /lib64/ld-linux-x86-64.so.2)
    libsystemd-core-255.so => ./build/src/core/libsystemd-core-255.so
        libaudit.so.1 => /lib64/libaudit.so.1
            libcap-ng.so.0 => /lib64/libcap-ng.so.0
                ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
        libm.so.6 => /lib64/libm.so.6
        libmount.so.1 => /lib64/libmount.so.1
            libblkid.so.1 => /lib64/libblkid.so.1
        libseccomp.so.2 => /lib64/libseccomp.so.2
        libselinux.so.1 => /lib64/libselinux.so.1
            libpcre2-8.so.0 => /lib64/libpcre2-8.so.0
    libsystemd-shared-255.so => /home/lennart/projects/systemd/build/src/shared/libsystemd-shared-255.so
        libacl.so.1 => /lib64/libacl.so.1
            libattr.so.1 => /lib64/libattr.so.1
        libcap.so.2 => /lib64/libcap.so.2
        libcrypt.so.2 => /lib64/libcrypt.so.2
        libgcrypt.so.20 => /lib64/libgcrypt.so.20
            libgpg-error.so.0 => /lib64/libgpg-error.so.0
        liblz4.so.1 => /lib64/liblz4.so.1
        libcrypto.so.3 => /lib64/libcrypto.so.3
            libz.so.1 => /lib64/libz.so.1
        libpam.so.0 => /lib64/libpam.so.0
            libeconf.so.0 => /lib64/libeconf.so.0
        liblzma.so.5 => /lib64/liblzma.so.5
        libzstd.so.1 => /lib64/libzstd.so.1
    libc.so.6 => /lib64/libc.so.6

Before:

$ lddtree ./build/systemd
systemd => ./build/systemd (interpreter => /lib64/ld-linux-x86-64.so.2)
    libsystemd-core-255.so => ./build/src/core/libsystemd-core-255.so
        libaudit.so.1 => /lib64/libaudit.so.1
            libcap-ng.so.0 => /lib64/libcap-ng.so.0
                ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2
        libkmod.so.2 => /lib64/libkmod.so.2
            libzstd.so.1 => /lib64/libzstd.so.1
            liblzma.so.5 => /lib64/liblzma.so.5
            libz.so.1 => /lib64/libz.so.1
            libcrypto.so.3 => /lib64/libcrypto.so.3
            libgcc_s.so.1 => /lib64/libgcc_s.so.1
        libm.so.6 => /lib64/libm.so.6
        libmount.so.1 => /lib64/libmount.so.1
            libblkid.so.1 => /lib64/libblkid.so.1
        libseccomp.so.2 => /lib64/libseccomp.so.2
        libselinux.so.1 => /lib64/libselinux.so.1
            libpcre2-8.so.0 => /lib64/libpcre2-8.so.0
    libsystemd-shared-255.so => /home/lennart/projects/systemd/build/src/shared/libsystemd-shared-255.so
        libacl.so.1 => /lib64/libacl.so.1
            libattr.so.1 => /lib64/libattr.so.1
        libcap.so.2 => /lib64/libcap.so.2
        libcrypt.so.2 => /lib64/libcrypt.so.2
        libgcrypt.so.20 => /lib64/libgcrypt.so.20
            libgpg-error.so.0 => /lib64/libgpg-error.so.0
        liblz4.so.1 => /lib64/liblz4.so.1
        libpam.so.0 => /lib64/libpam.so.0
            libeconf.so.0 => /lib64/libeconf.so.0
    libc.so.6 => /lib64/libc.so.6

20 months agowatchdog: clarify that we set the *watchdog* timeout
Lennart Poettering [Thu, 4 Apr 2024 07:59:00 +0000 (09:59 +0200)]
watchdog: clarify that we set the *watchdog* timeout

This makes sure we mention the word "watchdog" in every log message
related to the watchdog.

Also, this uses the expression "hardware timeout" when referring to the
primary timeout of the watchdog, as opposed to the "pretimeout".

(Not ideal wording I know, but it's preexisting to some point, I just
continued it. I think it's OK though, in particular to underline the
difference to the software watchdog logic we implement via WATCHDOG= in
sd_notify().)

Fixes: #31662

20 months agodebug-generator: Add unit and drop-in credentials
Daan De Meyer [Sun, 31 Mar 2024 20:18:19 +0000 (22:18 +0200)]
debug-generator: Add unit and drop-in credentials

These allow adding extra units and drop-ins via credentials.

20 months agonetwork-generator: Add logging
Daan De Meyer [Tue, 2 Apr 2024 20:52:02 +0000 (22:52 +0200)]
network-generator: Add logging

We stick to debug logging because in some cases network-generator
will fall back to trying another parsing function if one fails, so
if we return an error it's not necessarily a failure.

20 months agoman: align strings in sd_notify() examples
Zbigniew Jędrzejewski-Szmek [Thu, 4 Apr 2024 10:17:43 +0000 (12:17 +0200)]
man: align strings in sd_notify() examples

I think this way it's easier to see that they are part of the same argument.

20 months agoman/notify-selfcontained-example: check argument first
Zbigniew Jędrzejewski-Szmek [Thu, 4 Apr 2024 08:57:30 +0000 (10:57 +0200)]
man/notify-selfcontained-example: check argument first

This is just good style. In this particular case, if the argument is incorrect and
the function is not tested with $NOTIFY_SOCKET set, the user could not get the
proper error until running for real.

Also, remove mention of systemd. The protocol is fully generic on purpose.

20 months agoman: regenerate rules
Zbigniew Jędrzejewski-Szmek [Thu, 4 Apr 2024 10:12:25 +0000 (12:12 +0200)]
man: regenerate rules

Fixup for dfad86b83807fa8696ca94982a5ba591b6d86a80.