Commit Graph
9757 Commits
Author SHA1 Message Date
Daan De Meyer a4bff6ef8e basic: Move log context functions to log-context.h 2025-04-18 11:57:33 +02:00
Daan De Meyer 40d60725ec basic: Move ratelimit logging functions to ratelimit.h
The ratelimit logging functions are only useful in a few scenarios
so let's move them to ratelimit.h instead of keeping them in the
generic log.h
2025-04-18 10:11:40 +02:00
Stefan Hansson b1236ce38b missing_fcntl: Introduce O_ACCMODE_STRICT
On musl, O_ACCMODE is defined as (03|O_SEARCH), unlike glibc which
defines it as (O_RDONLY|O_WRONLY|O_RDWR). Additionally, O_SEARCH is
simply defined as O_PATH.

This causes problems for systemd on musl, as it changes the
behaviour of open_mkdir_at_full() to return -EINVAL if O_PATH is
included in flags due to the fact that O_ACCMODE includes O_SEARCH
(i.e. O_PATH). Consequently, this makes the test-fs-util test fail.

Upstream musl seems content with this behaviour and doesn't seem
interested in matching glibc's behaviour due to that defining it this
way allows for O_SEARCH to match POSIX better by allowing it to open
directories where read permission is missing. Apparently musl does some
emulation in other places to make this work more consistently as well.

Initially I took the approach of working around this by redefining
O_SEARCH as O_RDONLY if O_SEARCH == O_PATH. This fixes the test and is
the approach taken by both XZ[1] and Gzip[2][3], but was not taken as
redefining system headers potentially could be problematic.

Instead, introduce O_ACCMODE_STRICT which just is a copy of glibc's
O_ACCMODE and use it everywhere. This way we don't have to deal with
unusual definitions of O_ACCMODE from C standard libraries other than
glibc.

 [1]: https://git.tukaani.org/?p=xz.git;a=blob;f=src/xz/file_io.c;h=8c83269b13fa31284f7ea5f3627a1dfbce7d6e14;hb=HEAD#l72
 [2]: https://git.savannah.gnu.org/cgit/gnulib.git/tree/lib/fcntl.in.h
      (lines 380 and 396, commit d7f551b30f3f2a0fa57c1b10c12f4eea41a9b89e)
 [3]: https://lists.gnu.org/archive/html/bug-gzip/2025-01/msg00000.html
2025-04-18 05:22:06 +09:00
Yu Watanabe 188286eec6 cgroup-setup: drop unnecessary controller argument
This also removes unnecessary cg_{create,attach,trim}_everywhere(),
and rename cg_enable_everywhere() -> cg_enable().
2025-04-16 03:56:04 +09:00
Yu Watanabe 3988e2489a core: drop several more cgroup version check 2025-04-16 03:56:04 +09:00
Yu Watanabe 3fcb98cbff core/bpf-foreign: drop unnecessary check for cgroup v1 2025-04-16 03:56:04 +09:00
Yu Watanabe ff7f99db30 core/bpf-devices: drop cgroup v1 support 2025-04-16 03:55:00 +09:00
Yu Watanabe 4ee64e4365 core/cgroup: drop cgroup v1 specific code in unit_update_cgroup() 2025-04-16 03:42:11 +09:00
Yu Watanabe 35f88201f2 core/cgroup: drop unnecessary cgroup version check in several getters
After 2b61489e5a, these checks are not
necessary anymore.
2025-04-16 03:25:46 +09:00
Yu Watanabe 0818300288 core/cgroup: drop unnecessary _unified_ modifier from function names 2025-04-16 03:25:45 +09:00
Yu Watanabe f1c5534eb6 core/cgroup: remove logic of CGroup v1 attribute assignment 2025-04-16 03:19:16 +09:00
Yu Watanabe a7b06f6c30 core/cgroup: remove unused legacy parameters in CGroupContext 2025-04-15 22:34:22 +09:00
Yu Watanabe 3e316a6699 core/cgroup: remove CGroup v1 settings in dump message 2025-04-15 22:34:22 +09:00
Yu Watanabe db6986e02c core: deprecate CGroup v1 DBus properties 2025-04-15 22:34:22 +09:00
Yu Watanabe 98d64ff500 core: remove deprecated CGroup v1 settings 2025-04-15 22:34:22 +09:00
Yu Watanabe cde55c44ed core: hash_ops related cleanups (#37114) 2025-04-14 03:17:26 +09:00
Mike Yuan e9f0e96234 core/taint: decrease stage array size for "cgroupsv1" removal
Follow-up for 399791eaf0
2025-04-13 18:09:02 +02:00
Yu Watanabe 5c6ea30209 core/unit: use string_hash_ops_free for Unit.aliases 2025-04-13 09:49:40 +09:00
Yu Watanabe 5793a39dd8 core,systemctl: unit_file_find_fragment() provides names with string_hash_ops_free
names are assigned with set_put_strdup(), hence string_hash_ops_free is
used and we can use set_free() rather than set_free_free().
2025-04-13 09:49:40 +09:00
Yu Watanabe c4c4ea2fb6 core: replace unnecessary use of set_free_free() with set_free()
These variables are assigned with set_put_strv(), hence
string_hash_ops_free is used.

This also drops unnecessary call of set_ensure_allocated() with wrong
hash ops.
2025-04-13 09:49:39 +09:00
Mike Yuan 7065494e7e core/execute: set_get_strv() does not transfer ownership of strings
Prompted by #37090
2025-04-13 09:14:18 +09:00
Mike Yuan 66f83537f9 core: unit_watch_pidref() gracefully handles EEXIST
No need to check that at callsite.
2025-04-11 23:50:50 +02:00
Mike Yuan 55e4df21ef core: drop cgroup v1 synthetic empty event logic
cgroup v2's empty events are reliable, hence we'd not bother
with validating it again in unit_add_to_cgroup_empty_queue()
either.
2025-04-11 23:50:50 +02:00
Mike Yuan c9eff0bcfc core/cgroup: drop v1 handling in unit_attach_pids_to_cgroup() 2025-04-11 23:44:24 +02:00
Mike Yuan 9c0d8b8c4f core/exec-invoke: consult NSS for root user creds if SetLoginEnvironment=/PAMName= 2025-04-09 19:31:58 +02:00
Mike Yuan 2fb438cc88 core/exec-invoke: never override acquired user cred with fallback one 2025-04-09 19:30:17 +02:00
Daan De Meyer ad04dc4116 exec-invoke: Fix two log messages 2025-04-09 16:21:03 +02:00
Yu Watanabe 38747451af core/service: fix typo
Follow-up for c53d2d54bd.
2025-04-07 16:42:10 +09:00
Mike Yuan c06b8d96f4 core: do not use pidref_hash_ops_free for Manager.watch_pids
The PidRefs are in all cases owned by Unit.pids, and gets removed
from Manager.watch_pids(_more) when the unit is destructed, via
unit_unwatch_pidref(). This hasn't caused any issue because
manager_clear_jobs_and_units() is called before destroying
Manager.watch_pids(_more), but let's get this right.
2025-04-07 15:48:23 +09:00
Mike Yuan ead510fe06 core/manager: also assert on Manager.units_by_invocation_id being empty after cleanup 2025-04-07 15:48:23 +09:00
Daan De Meyer 6aa69f702b core: Resolve /dev/console if it's connected to stdin (#36666) 2025-04-06 14:14:35 +02:00
Yu Watanabe e4e40936f3 nspawn: drop cgv1 handling; core: drop cgroup agent (#36764) 2025-04-05 17:57:18 +09:00
Mike Yuan b157a7e613 core: also stash executor path in Manager
Prompted by b58c240312

Let's not query it over and over again in exec_spawn().
2025-04-05 02:33:00 +09:00
Daan De Meyer 2b0087e5b1 exec-invoke: Always go via stdin fd in setup_pam() to get tty
We might have resolved the tty to something else if it was set to
/dev/console, so let's always go via stdin in setup_pam(). This also
means we won't set the pam tty if only stdout or stderr are connected
to a tty, which seems like a sensible thing to do.
2025-04-04 17:13:16 +02:00
Daan De Meyer 6f1d594d63 core: Resolve /dev/console if it's connected to stdin
If /dev/console is connected to stdin there's a possibility that
the unit might try to start a logind session from within the unit.
Let's make sure that any such sessions are started on the tty that
/dev/console points to and not on /dev/console itself.
2025-04-04 17:13:14 +02:00
Daan De Meyer c7f7d87db5 terminal-util: Make sure resolve_dev_console() always returns a full path
Currently it returns a full path in some cases and a partial path in others.
Let's make sure it always returns a full path.
2025-04-04 17:12:58 +02:00
Mike Yuan fc4663b379 core/cgroup: drop extraneous CGRuntime check in unit_get_memory_available()
Currently, for units whose CGRuntime is not allocated just yet, e.g.
inactive ones, MemoryAvailable fails to account for their MemoryMax/High
settings. Let's remove the CGRuntime check hence. The call to
unit_get_memory_accounting() would certainly fail, but it doesn't matter,
since 'current' is initially set to 0 anyways.
2025-04-04 15:34:52 +02:00
Mike Yuan 702aa33935 core/cgroup: fold unit_get_current_memory() into generic memory accounting helper 2025-04-04 15:34:52 +02:00
Mike Yuan 77a0d2e3ec core/cgroup: remove legacy hierarchy setup
This also makes pin_cgroupfs_fd actually pin the fs root,
so that we can port all cg_* helpers to operate under
the fd later on.
2025-04-04 15:34:51 +02:00
Mike Yuan be1d96dbc3 core: remove cgroups-agent 2025-04-04 15:34:51 +02:00
Yu Watanabe b58c240312 build-path: make pin_callout_binary() optionally provides the path to the found executable 2025-04-04 21:02:18 +09:00
Lennart Poettering bcd904d471 dissect-image: move extension release arguments of verity_dissect_and_mount() into a structure 2025-04-03 11:08:57 +02:00
Lennart Poettering f1395724f6 dissect-image: add a concept for "filtering" partitions we dissect
DDIs may contain multiple versions of the same OS, or even multiple
OSes. Hence it makes sense to not just pick the "newest", whatever that
might be, but only partitions associated with specific images, or in a
specific version.

Let's a concept for such filtering: a per-designator glob expression
that can be applied to the partition label string, and can be used for
such filtering.

Usecase: when picking UKI belonging to OS image X in version Y, make
sure we only pick a /usr/ partition belonging to X in version Y, and a
root and home partition belonging to X in any version.

This only adds the basic infrastructure, but doesn't actually expose it
anywhere.
2025-04-03 11:08:57 +02:00
Lennart Poettering e34c89897a dissect-image: guess verity root hash from the resources we found
When dissecting an image, let's make use of the Verity data even if we
got told no root hash explicitly: we can simply determine it by
concatenating the data partition uuid with the verity partition uuid.

Of course, on first thought this doesn't really add much: if the root
hash is not pinned from somewhere, this does not guarantee trust in
the image.

However, this is very useful for attestation: if we have the root hash
we can measure it before mounting things, even if we don't actually
authenticate it.

Hence, at best this helps us with attestation, at worst it doesn't improve
security but certainly doesn't hurt it.
2025-04-03 11:08:57 +02:00
Yu Watanabe 9ec7d7ae90 tree-wide: replace unsigned int -> unsigned, long int -> long 2025-04-03 06:01:31 +09:00
Yu Watanabe abaa8bc7ca some selinux modernizations (#36955) 2025-04-03 01:30:03 +09:00
Yu Watanabe b0c9ba4eb1 core: delegate mountns implicitly when any of pidns/cgns/netns is in use, clean up private cgroupfs mount (#36892)
Fixes #36952
2025-04-03 00:15:33 +09:00
Lennart Poettering ec88828430 selinux-setup: modernizations
Adjustments to match our current coding style, in particular ensures we
always print log messages for unexpected errors.

This changes our code assume mac_selinux_get_create_label_from_exe()
returns a valid label on success. I checked libselinux, this is
guaranteed, and is otherwise relied on in our tree, hence don't do the
pointless check here.
2025-04-02 16:09:20 +02:00
Lennart Poettering cb16d39163 unit: return a better error state for unit_get_unit_file_preset() if we have no fragment path
We'd previously return what was already set. Let's instead return a
clear ENOEXEC in this case, to make clear what is going on: preset logic
doesn't apply to units which lag a fragment path.
2025-04-01 16:47:41 +02:00
Lennart Poettering 7cb7f8b8e4 unit: initialize unit_file_preset field to valid value
"-1" is not a valid enum value. Use a better one. All code using this
considers negative values error codes anyway, hence the old code was
just a weird way to write -EPERM. Let's clean this up.
2025-04-01 16:44:21 +02:00