Commit Graph
9757 Commits
Author SHA1 Message Date
Zbigniew Jędrzejewski-Szmek 28f1f1a5e6 Drop support for nscd
nscd is known to be racy [1] and it was already deprecated and later dropped in
Fedora a while back [1,2]. We don't need to support obsolete stuff in systemd,
and the cache in systemd-resolved provides a better solution anyway.

We announced the plan to drop nscd in d44934f378.

[1] https://fedoraproject.org/wiki/Changes/DeprecateNSCD
[2] https://fedoraproject.org/wiki/Changes/RemoveNSCD

The option is kept as a stub without any effect to make the transition easier.
2024-06-28 18:51:56 +02:00
Mike Yuan f26b2ec461 core: do not set up cgroup runtime on coldplug
Currently, unit_setup_cgroup_runtime() is called in
various _coldplug() functions if the unit is not inactive.
That seems unnecessary though, and kinda defeats the purpose
of CGroupRuntime. If we need to fork off a process for the unit
or got something during deserialization, the CGroupRuntime
would be automatically set up by unit_prepare_exec() /
cgroup_runtime_deserialize_one(). Otherwise it would mean
the cgroup doesn't exist and we don't need to allocate
that in the first place.

Plus, note that socket units might also carry a cgroup with
ExecStartPre=/ExecStartPost=/... Hence the existing code
is really inconsistent.
2024-06-28 15:43:21 +02:00
Mike Yuan 8d178f702d core: cast ignored retval of unit_realize_cgroup to void 2024-06-28 15:43:21 +02:00
Mike Yuan 4918f14ada core: do not drop CGroupRuntime when unit stops, but only on GC
Fixes #33149
Replaces #33145
2024-06-28 15:43:21 +02:00
Mike Yuan 4c1fc52d2a core/cgroup: drop spurious ", ignoring" for unit_cgroup_is_empty 2024-06-28 15:43:21 +02:00
Mike Yuan 3849d1f56b core/cgroup: actually make use of the cached accounting values
If cgroup is already gone, i.e. CGRuntime.cgroup_path is NULL,
do not return -ENODATA prematurely, but check for cached values
first.

For #33149
2024-06-28 15:43:21 +02:00
Mike Yuan d3d035395e core/cgroup: check root cgroup earlier for unit_get_memory_accounting 2024-06-28 15:43:20 +02:00
Mike Yuan bc347edfe0 core: unify reset_accounting handling
Since the introduction of CGroupRuntime, there's no need
to call *_reset_accounting in unit_new(), hence make those
static. While at it, refrain from hardcoding default values
in cgroup_runtime_new(), but call the corresponding funcs.

This also corrects the default value of io_accounting_base.

Fixes #33482
2024-06-28 15:43:08 +02:00
Mike Yuan 5a8c2c9559 core/cgroup: call bpf_firewall_close in cgroup_runtime_free
No functional change, just deduplicate default values
in cgroup_runtime_free() and remove pointless call in
unit_free() (at the time it's called the CGRuntime has
been destroyed already).
2024-06-28 15:38:56 +02:00
Mike Yuan 4442aef08e core/cgroup: make unit_has_host_root_cgroup take const Unit* 2024-06-28 15:38:42 +02:00
Mike Yuan c97c79aded core/cgroup: check CGroupRuntime.cgroup_path rather than _realized for freezer
The same check is used everywhere else.
2024-06-28 15:38:42 +02:00
Mike Yuan 8153be97c4 core/cgroup: use > 0 comparison rather than == 1 2024-06-28 15:38:41 +02:00
Mike Yuan 38f3b737dc core/cgroup: correct macro alignment 2024-06-28 15:38:41 +02:00
Luca Boccassi a1a40297db core: deduplicate identical dm-verity ExtensionImages=
It turns out OverlayFS doesn't handle gracefully when the same source is
specified multiple times in lowerdir= and it fails with ELOOP:

Failed to mount overlay (type overlay) on /run/systemd/mount-rootfs/opt (MS_RDONLY "lowerdir=/run/systemd/unit-extensions/1/opt:/run/systemd/unit-extensions/0/opt:/run/systemd/mount-rootfs/opt"): Too many levels of symbolic links

This happens even if we mount each image in a different internal mount
path, as OverlayFS will resolve it and look for the backing device, which
will be the same device mapper entity, and return a hard error.
This error does not appear if dm-verity is not used, so it is very
confusing for users, and unnecessary.

When mounting ExtensionImages, check if an image is dm-veritied,
and drop duplicates if the root hashes match, to avoid this user-unfriendly
hard error.
2024-06-28 14:37:58 +01:00
Florian Schmaus 016e9d8d08 core/exec-invoke: use sched_setattr instead of sched_setscheduler
The kernel's sched_setattr interface allows for more control over a processes
scheduling attributes as the previously used sched_setscheduler interface.

Using sched_setattr is also the prerequisite for support of utilization
clamping (UCLAMP [1], see #26705) and allows to set sched_runtime. The latter,
sched_runtime, will probably become a relevant scheduling parameter of the
EEVDF scheduler [2, 3], and therefore will not only apply to processes
scheduled via SCHED_DEADLINE, but also for processes scheduled via
SCHED_OTHER/SCHED_BATCH (i.e., most processes).

1: https://docs.kernel.org/next/scheduler/sched-util-clamp.html
2: https://lwn.net/Articles/969062/
3: https://lwn.net/ml/linux-kernel/20240405110010.934104715@infradead.org/
2024-06-26 20:54:53 +02:00
Luca Boccassi 4d2a86936a Merge pull request #33451 from yuwata/core-exec-use-write
core: use write() instead of send()
2024-06-25 14:44:21 +02:00
Luca Boccassi 11a66a95ec Merge pull request #33454 from YHNdnzj/user-service-working-dir-relax
core: verify WorkingDirectory= is outside of API VFS only under mount namespacing
2024-06-25 00:48:37 +02:00
Yu Watanabe 84b79215cc core: do not filter out write() if required in the very late stage
Before 12001b1bf0, write() is required for
if Type=exec. However, with the previous commit, now write() is also used
for sending handoff timestamp. Let's allow write() if necessary.

Fixes a regression caused by 12001b1bf0.
Fixes #33299.
2024-06-25 05:15:55 +09:00
Yu Watanabe 5161422bb5 core: use write() to send handoff timestamp
Before 12001b1bf0, the timestamp is sent
with write(), but the commit made the timestamp sent by send(), and
causes regressin #33299.

Note the invocation will still fail if write() is filtered by seccomp.
But, that is an old issue since Type=exec is introduced
(5686391b00).

Partially fixes a regression caused by 12001b1bf0.
Partially fixes #33299.
2024-06-25 05:14:57 +09:00
Mike Yuan c24ac9b97b core/exec-invoke: clean up OpenFile= logging
Make collect_open_file_fds() the only logging function,
and downgrade various usual errors to debug level
if OPENFILE_GRACEFUL is set.

Fixes #33458
2024-06-24 18:31:38 +02:00
Mike Yuan b9c5d812d5 core/exec-invoke: reopen OpenFile= fds with O_NOCTTY 2024-06-24 18:31:36 +02:00
Mike Yuan 276bd392ec core: verify WorkingDirectory= is outside of API VFS only under mount namespacing
The purpose of the check is to prevent leaking API VFS fds
from host into a mount namespace/container. When mountns
is not used at all, the check is pointless and causes
inconvenience. E.g. file managers might need to be spawned
under those directories, and they surely won't run in mountns.

Suggested in https://github.com/systemd/systemd/pull/33454#issuecomment-2186351467
Fixes #33361
2024-06-24 16:01:07 +02:00
Mike Yuan 453cb5d01e core/load-fragment: use ASSERT_PTR where appropriate 2024-06-24 15:35:56 +02:00
Mike Yuan 9d50d053f3 core: expose PrivateTmp=disconnected
As discussed in https://github.com/systemd/systemd/pull/32724#discussion_r1638963071

I don't find the opposite reasoning particularly convincing.
We have ProtectHome=tmpfs and friends, and those can be
pretty much trivially implemented through TemporaryFileSystem=
too. The new logic brings many benefits, and is completely generic,
hence I see no reason not to expose it. We can even get more tests
for the code path if we make it public.
2024-06-21 17:31:44 +02:00
Mike Yuan d7f24848ba core/namespace: add assertion for PRIVATE_TMP_CONNECTED 2024-06-21 17:24:08 +02:00
Mike Yuan 335b14ade5 core/exec-invoke: respect needs_sandboxing for PrivateTmp
Follow-up for 0e551b04ef
2024-06-21 17:24:08 +02:00
Mike Yuan 5f460ae1c2 core/dbus-util: move dbus setter/getter for PrivateTmp to dbus-execute
As with all other properties for ExecContext
2024-06-21 17:23:16 +02:00
Mike Yuan 41db82f206 core/dbus-execute: use FOREACH_ARRAY more, drop bus_ prefix for static funcs 2024-06-21 17:04:41 +02:00
Mike Yuan 9c025022d9 core/service: store BUSERROR= & VARLINKERROR= received through notification
Closes #6073
2024-06-20 19:03:44 +02:00
Yu Watanabe 8422d04e8d Merge pull request #33420 from poettering/build-with-object
sd-json: add sd_json_build() flavour that implies we are building an object
2024-06-20 13:04:32 +09:00
Yu Watanabe 7fef19963d core/namespace: ensure private tmpfs is mounted earlier
And drop spurious assertion.

Fortunately, the previous logic worked, as /run/systemd/unit-private-tmp
is ordered earlier than /tmp or /var/tmp. But, let's ensure the tmpfs
mounted earlier to make the logic clearer.

Follow-up for 0e551b04ef.
2024-06-20 12:59:49 +09:00
Lennart Poettering be5bee2a13 tree-wide: port over to new builder apis 2024-06-19 22:50:02 +02:00
Yu Watanabe de732ade09 Merge pull request #33034 from yuwata/update-kernel-headers
basic/linux: update kernel headers from v6.10-rc3
2024-06-20 03:53:16 +09:00
Yu Watanabe 834afa11ab core: drop unnecessary auto_fs4.h inclusion
auto_fs4.h is a trivial wrapper of auto_fs.h, and it is already included
by auto_dev-ioctl.h.
2024-06-20 02:35:35 +09:00
Yu Watanabe 0cced2948f basic/linux: update kernel headers from v6.10-rc3
This also
- merges basic/linux and shared/linux,
- moves BPF_JUMP_A() to basic/missing_bpf.h,
- copies from usrspace kernel headers directory generated by 'make headers',
  rather than copying from kernel tree,
- copies const.h into our tree to reduce change in ethtool.h,
- copies auto_fs.h into our tree to reduce change in auto_dev-ioctl.h.
2024-06-20 02:35:35 +09:00
Zbigniew Jędrzejewski-Szmek ff3f29537c various: move ptr indicator to return value 2024-06-19 16:37:12 +02:00
Zbigniew Jędrzejewski-Szmek bfd5a0687f various: move const ptr indicator to return value 2024-06-19 16:28:28 +02:00
Zbigniew Jędrzejewski-Szmek cd2fb04960 Fix confusion between killer and prey
"who" is the entity doing the killing, "whom" is the target.
Follow-up for 4ccde410a3.
2024-06-19 16:22:23 +02:00
Luca Boccassi fcbe3e3b2e Merge pull request #32724 from bluca/dynamic_user_no_private_tmp
core: do not imply PrivateTmp with DynamicUser, create a private tmpfs instead
2024-06-18 00:11:11 +01:00
Luca Boccassi 0cf5ebeffc Merge pull request #33375 from yuwata/trivial-follow-ups
Trivial follow ups for recent PRs
2024-06-17 20:06:46 +01:00
Luca Boccassi 0e551b04ef core: do not imply PrivateTmp with DynamicUser, create a private tmpfs instead
DynamicUser= enables PrivateTmp= implicitly to avoid files owned by reusable uids
leaking into the host. Change it to instead create a fully private tmpfs instance
instead, which also ensures the same result, since it has less impactful semantics
with respect to PrivateTmp=yes, which links the mount namespace to the host's /tmp
instead. If a user specifies PrivateTmp manually, let the existing behaviour
unchanged to ensure backward compatibility is not broken.
2024-06-17 17:05:55 +01:00
Yu Watanabe abeb98d185 core/mount: suffix function name with paren
Follow-up for 88188e1ff1.
2024-06-18 00:19:59 +09:00
Mike Yuan 9f5d8c3da4 core/service: fix accept-socket deserialization
Follow-up for 45b1017488
2024-06-17 17:02:51 +02:00
Mike Yuan 42fdb14286 core: cast ignored retval of deserialize_* to void
Fixes CID#1547098
2024-06-17 16:56:19 +02:00
Mike Yuan 42e9967baf core/socket: use FOREACH_ARRAY at one more place 2024-06-17 16:56:19 +02:00
Luca Boccassi 9981bc210a Merge pull request #33355 from YHNdnzj/shutdown-cad
shutdown: re-enable CAD handling in kernel at start, several other cleanups
2024-06-17 09:19:08 +01:00
Mike Yuan 156d23abc9 core/service: use r to store parsed int values 2024-06-16 19:05:29 +02:00
Mike Yuan 029df9ed7a core/service: drop unused bus_name_owner
Follow-up for fc67a943d9

After the mentioned comment, we no longer need to record
the owner to restore the previous bus owner state.
Therefore, bus_name_owner is effectively unused. Kill it.
2024-06-16 19:00:39 +02:00
Mike Yuan a74b284073 core/service: also serialize/dump status_errno 2024-06-16 19:00:39 +02:00
Mike Yuan 301dc07347 core/service: use serialize_usec where appropriate, drop redundant debug log 2024-06-16 19:00:39 +02:00