Commit Graph
58040 Commits
Author SHA1 Message Date
Daan De Meyer 7d4ea41bd1 bootctl parts of installer PR (#40447)
This contains the "bootctl install" related work from the #38764 split
out, but also includes the preparatory work already split out into
#40446.

I'll rebase this PR once the prep work is merged.

This has a simple CI test already, and has docs
2026-02-09 09:46:39 +01:00
Mike Yuan 8b7e98f183 journal-send: check if $LOG_NAMESPACE denotes our /run/systemd/journal/ is already namespaced properly 2026-02-09 09:41:47 +01:00
Mike Yuan cc9a9d6a15 tree-wide: use path_split_prefix_filename() where appropriate 2026-02-09 09:07:15 +01:00
Mike Yuan 18a8ea3377 path-util: unify path_extract_filename/directory into path_split_prefix_filename() 2026-02-09 09:05:45 +01:00
Mike Yuan 294855953c path-util: drop redundant condition in path_find_last_component()
Follow-up for 3a7ba9f6b9
2026-02-09 09:05:44 +01:00
Mike Yuan 3788ec1b4a snapshot-util: include shared-forward.h 2026-02-09 09:05:44 +01:00
Matteo Croce c1bf450fa0 oomd: implement a prekill varlink event
When a cgroup is selected for termination, send varlink messages
to hooks registered in `/run/systemd/oomd.prekill-hooks/`.
oomd waits up to `PreKillHookTimeoutSec=` seconds for response
before proceeding with the kill.
2026-02-09 02:05:57 +01:00
Matteo Croce 67cbfbbf4b Revert "oomd: move check if processes can be killed into oomd_cgroup_kill()"
This reverts commit 332bce5bd7.

The revert is needed because with the PreKill hook, oomd_cgroup_kill()
is not goint to really kill processes but it just creates the callbacks.
So the check is deferred to the real kill.
2026-02-09 02:05:57 +01:00
Daan De Meyer 8fba6e2b40 oomd: Make OomdCGroupContext reference counted
Preparation for adding oomd hooks.
2026-02-09 02:05:57 +01:00
Lennart Poettering 5276ef1548 udev: Introduce uaccess for remote graphical sessions (#38516)
When systemd is compiled with group-render-mode=0660, only the active
seat gets access to the render devices through uaccess. Remote desktop
sessions like gnome-remote-desktop would be left with no hardware
rendering, because those sessions are not associated with a seat.

We solve the issue by granting uaccess to specifically tagged devices on
session start, if the session is marked with
XDG_SESSION_EXTRA_DEVICE_ACCESS.

udev-builtin-uaccess is refactored to grant multiple users access to a
device, taking into account the device's seat and all the active
EXTRA_DEVICE_ACCESS sessions.
2026-02-08 21:41:21 +01:00
Lennart Poettering 9b09b11d21 report: rework limits logic
Let's count how many sources we skip, and output that as a summary, and
return an error exit code in this case.

Let's also put a limit on the metrics collected, not just the sources.

Also, our macros that put limits on things are usually called XYZ_MAX,
follow the same scheme here.
2026-02-07 23:30:00 +01:00
Lennart Poettering a7aebb2250 report: don't claim no reporting sockets were found, when it's no metrics that were found
Let's add a proper message about missing sources, and call them
"sources", i.e. take a more high-level view on things.
2026-02-07 23:28:51 +01:00
Lennart Poettering 1b9506601f report: keep track of varlink connections inside of Context object
Let's also move the Varlink connection management into the Context
object. Let's also switch to Set* for it, so that we get get
auto-expanding behaviour.
2026-02-07 23:28:51 +01:00
Lennart Poettering 6c051e84c7 report: move event loop object into Context
It's one of the primary objects that make up the program "context"
conceptually, hence it also should be part of the Context object. This
allows us to just have it available if the Context object is seen.
2026-02-07 23:13:16 +01:00
Lennart Poettering 3317ea84bc report: pass Context as first argument to metrics_call()
Typically the context object should be the first one. And the return
parameters should be the last ones.
2026-02-07 23:13:16 +01:00
Lennart Poettering 9fa9f10088 report: -p is not defined 2026-02-07 23:13:16 +01:00
Lennart Poettering 0ec663a41f report: do not treat an empty report dir as an issue
We should permit that the report varlink dir is created on the fly when
the first socket is bound there. Hence, let's treat a non-existant dir
equivalent to an empty one.

We usually do this in our tree like this, do it here too.
2026-02-07 23:13:16 +01:00
Lennart Poettering 1f8b09dfc6 report: use sd_json_variant_unref_many() 2026-02-07 23:13:16 +01:00
Lennart Poettering 75e1963df1 report: add the usual --json= argument 2026-02-07 23:13:16 +01:00
Yu Watanabe 1f3b407307 daemon-util: downgrade log level on ECONNREFUSED and friends
This partially reverts 36c557f7d4, which
introduced notify_remove_fd() that logs in LOG_DEBUG. However,
notify_remove_fd_warn() is still called other library functions, e.g.
notify_push_fd(), and produces warning message about the failure in
removing fd from fdstore on shutdown.

During shutdown process, we get the following logs:
```
systemd-udevd[370]: Failed to send notify message to '/run/systemd/notify': Connection refused
systemd-udevd[370]: Failed to remove file descriptor "config-serialization" from the store, ignoring: Connection refused
systemd-udevd[370]: Failed to send notify message to '/run/systemd/notify': Connection refused
systemd-udevd[370]: Failed to push serialization fd to service manager: Connection refused
```
Here, the 1st, 3rd, and 4th messages are in LOG_DEBUG, but the 2nd one
was in LOG_WARNING before this commit, and this makes it also in LOG_DEBUG.

Follow-up for 472404aca5.
2026-02-07 00:15:33 +01:00
Nick Rosbrook e28958315f resolvectl: include ifindex when printing link-local DNS server
Historically, resolvectl status has not included the interface
specification for DNS servers with an IPv6 link-local address, since it
is technically somewhat redundant. But, adding this extra bit of
information makes it easier to copy-and-paste to use elsewhere, etc.

For example, the previous output:

 Link 2 (enp34s0)
     Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
          Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
 Current DNS Server: fe80::861e:a3ff:feb1:f8e7
        DNS Servers: 192.168.1.12 192.168.1.13 fe80::861e:a3ff:feb1:f8e7
         DNS Domain: lan

now becomes:

 Link 2 (enp34s0)
     Current Scopes: DNS LLMNR/IPv4 LLMNR/IPv6
          Protocols: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
 Current DNS Server: fe80::861e:a3ff:feb1:f8e7%2
        DNS Servers: 192.168.1.12 192.168.1.13 fe80::861e:a3ff:feb1:f8e7%2
         DNS Domain: lan
2026-02-07 00:14:37 +01:00
Lennart Poettering a537c5e4b8 bootctl: add comments emphasizing that certain functions do not touch the file read pointer 2026-02-06 23:17:02 +01:00
Lennart Poettering 9b29d38c33 bootctl: return recognizable Varlink error when we cannot determine the boot entry token
When running "bootctl install" on an empty --root= dir, we don't know
which token to use, and the operation will fail. Make sure to return an
explicit error about this.

This introduces a recognizable low-level error for this (EUNATCH), and
then turns this into a recognizable Varlink error.

(I made sure that the old low-level error EINVAL wasn't load-bearing,
and it is safe to change this.)
2026-02-06 23:16:50 +01:00
Lennart Poettering 91b3620b07 bootctl: optionally include backing disk name in efi boot option description 2026-02-06 23:16:49 +01:00
Lennart Poettering 7ee2f6657f bootctl: parse install source via our usual string table helpers 2026-02-06 23:16:00 +01:00
Lennart Poettering aea76373b2 bootctl: add Install() varlink API
Fixes: #11221
2026-02-06 23:15:49 +01:00
Lennart Poettering 38433a6d06 bootctl: rework bootctl-install.c in preparation of varlinkification
This primarily introduces a context object for each operation, so that
we later can instantiate one for each varlink op we execute, and can
safely lifecycle all operation parameters for each subequent call.

This also reworks the root dir handling to be fd based.

This drops explicit CHASE_TRIGGER_AUTOFS from a bunch of chase() calls
that operate within the ESP/XBOOTLDR, while it keeps them in place for the
chase() calls that find the top-level ESP/XBOOTLDR inode. This reflects
the fact that we explicitly support autofs for the ESP/XBOOTLDR itself,
but below it expect no further mounts, just plain VFAT.

This changes behaviour of the interaction of $KERNEL_INSTALL_CONF_ROOT
and --root=: the former will now be taken relative to the host root, and
will no longer be affected by --root=. This follows similar behaviour in
kernel-install, where it is very explicitly documented in the man page
(the bootclt man page does not document this). This is strictly speaking
a compat breakage, but i think a very minor, niche one, and I think the
pain afflicted by this change is probably neglible compare to the
unsystematic behaviour comapred to kernel-install.
2026-02-06 23:15:47 +01:00
Lennart Poettering 0c9de6daee inhibit: drop redundant table_set_header() caller
The immediately following table_print_with_pager() call already
processes arg_legend, no need to do this manually first.
2026-02-06 20:10:24 +01:00
Alessandro Astone 5a198ad6f8 udev: Grant sessions access to devices tagged with xaccess
Grant access to devices tagged with "xaccess" on session start, if the session
was created with XDG_SESSION_EXTRA_DEVICE_ACCESS=1.

udev-builtin-uaccess is refactored to grant multiple users access to a device,
taking into account the device's seat and all the active EXTRA_DEVICE_ACCESS
sessions.
2026-02-06 16:20:18 +01:00
Alessandro Astone 87840e144b login: Add XDG_SESSION_EXTRA_DEVICE_ACCESS variable for additional access
A session created with XDG_SESSION_EXTRA_DEVICE_ACCESS will be granted
additional powers.
Exactly which powers are granted is going to be defined by udevd.
2026-02-06 16:20:18 +01:00
Yu Watanabe 5f815d6fa1 metrics: fix typo
Follow-up for fd73cd6c91.
2026-02-06 15:20:28 +09:00
Yu Watanabe 06a806aed8 udev: fix typo
Follow-up for b7363d3330.
2026-02-06 15:20:28 +09:00
Lennart Poettering 823054d079 pcrextend: fix varlink API to match what we actually take
(Change test case slightly, to ensure we don't regress on this)
2026-02-06 15:08:51 +09:00
Louis Stagg 23c6ab3971 portablectl: Strip .v or .raw.v when extracting prefix
This allows a plain "portablectl attach foobar.raw.v" without needing to
specify a prefix.
2026-02-05 23:12:18 +01:00
Mike Yuan a3ecd774db stat-util: introduce xstatx() (#40507) 2026-02-05 16:51:57 +01:00
Daan De Meyer dd8c07da04 Various fixes related to mountfsd (#40564) 2026-02-05 16:39:28 +01:00
Daan De Meyer cbd2e08f00 pidfd-util: Remove unused include
This snuck in when CI was broken.
2026-02-05 16:18:35 +01:00
Christian Brauner e8416e854b nsresourced: Ensure that all user namespaces are cleaned-up
The code here assumes that free_user_ns() is called for every single
user namespace. That however has never been the case and the logic for
free_user_ns() is a bit more involved.

A nested user namespace pins its parent user namespace. IOW, the
lifetime of the parent user namespaces is at least as long as the child
user namespaces.

If a parent user namespace becomes unused (no namespace file descriptors
or task using it anymore) then it will stick around and its lifetime
still bound to the child user namespace.

free_user_ns() takes advantage of that behavior. If a child user
namespace is freed and its parent user namespace is already unused then
then free_user_ns() will free both the child and the parent user
namespace. This means a single free_user_ns() frees two user namespaces.
Hence, the bpf program never sees the parent user namespace being freed.

We can fix this by piggy-backing on another function that is called for
every single user namespace being freed. This requires CONFIG_SYSCTL but
systemd doesn't work without that anyway.

The return type needs to change to a scalar type as required by libbpf.

Long-term what we need is appropriate LSM infrastructure for this
including hooks that get called on namespace destruction.

Thanks to Daan DeMeyer for figuring out that the cast is needed.

Signed-off-by: Christian Brauner <brauner@kernel.org>
2026-02-05 15:32:15 +01:00
Daan De Meyer 14054134c6 nsresourced: Add comment about mknod() hook covering regular files 2026-02-05 15:16:31 +01:00
Daan De Meyer d1ae0e5205 nsresourced: Fix typo 2026-02-05 15:16:31 +01:00
Daan De Meyer b4bfacf496 mountfsd: Always open_tree() in mount namespace of peer
open_tree() will fail with EINVAL when passed a directory file descriptor
that comes from another mount namespace. While this should be fixed in a
future kernel, let's workaround the issue for now by entering the mount
namespace of the peer if needed and calling open_tree() there and then
passing the fd back to the mountfsd process.
2026-02-05 15:16:29 +01:00
Daan De Meyer 8b6d8ec66f udev: fix performance regression in resolving event dependencies (#40364)
Fixes #39583.
Fixes #39817.
2026-02-05 14:14:47 +01:00
Mike Yuan 9feb490633 stat-util: drop now unused statx_warn_mount_{id,root}() 2026-02-05 14:14:40 +01:00
Mike Yuan 10072d8be4 various: use xstatx() 2026-02-05 14:14:40 +01:00
Mike Yuan 5817c73391 mountpoint-util: rework name_to_handle_at() unique mount id handling
name_to_handle_at_try_unique_mntid_fid() in its current form is
ill-designed for various reasons:

* AT_HANDLE_FID requires file system support, while unique mount id
  is a VFS concept hence is always available if supported. Hence
  the fallback for AT_HANDLE_MNT_ID_UNIQUE should be independent
  of fid.
* The request for AT_HANDLE_MNT_ID_UNIQUE can be identified via
  specifying ret_unique_mnt_id, no need for opening up the control
  to caller (and currently the function simply doesn't handle
  mismatch between ret params and flags).
* The caller cannot realistically differentiate whether the returned
  mount id is actually unique.
* The path_get_unique_mnt_id() fallback did not handle AT_SYMLINK_FOLLOW.

Let's instead move the statx() fallback into name_to_handle_at_loop()
directly, and revamp interaction of ret_mnt_id/ret_unique_mnt_id:
if both are set, it indicates that the caller can handle both, hence
set what we have and return 0/1 for whether we managed to acquire
the unique one.

The !ret_handle && ret_mnt_id logic is removed. Let's not rely on
undocumented bizaare behavior and it's unused anyways.
path_get_mnt_id_at() exists for a reason...
2026-02-05 14:14:40 +01:00
Mike Yuan 56adac1193 mountpoint-util: port to xstatx(), support XAT_FDROOT 2026-02-05 14:14:39 +01:00
Mike Yuan 1cf84c5642 stat-util: introduce xstatx() 2026-02-05 14:14:39 +01:00
Mike Yuan 6b039272e9 basic: add generated statx_mask_one_to_name()/statx_attribute_to_name() 2026-02-05 14:14:39 +01:00
Mike Yuan 539e2b75aa fd-util: add generic resolve_xat_fdroot()
As suggested in
https://github.com/systemd/systemd/pull/40500#discussion_r2740921215
2026-02-05 14:14:39 +01:00
Mike Yuan 3065bc80cb shared/find-esp: STATX_MNT_ID is no longer needed as we rely on _ATTR_MOUNT_ROOT
Follow-up for a98a6eb95c
2026-02-05 14:14:39 +01:00