]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
7 days agoupdate TODO 40590/head
Lennart Poettering [Fri, 6 Feb 2026 17:08:07 +0000 (18:08 +0100)] 
update TODO

7 days agotest: add superficial test for list-registry
Lennart Poettering [Fri, 6 Feb 2026 16:13:11 +0000 (17:13 +0100)] 
test: add superficial test for list-registry

7 days agoman: document new varlinkctl feature
Lennart Poettering [Fri, 6 Feb 2026 16:07:14 +0000 (17:07 +0100)] 
man: document new varlinkctl feature

7 days agovarlinkctl: add 'list-registry' command
Lennart Poettering [Fri, 6 Feb 2026 14:04:48 +0000 (15:04 +0100)] 
varlinkctl: add 'list-registry' command

7 days agochase: add new flag CHASE_MUST_BE_SOCKET
Lennart Poettering [Fri, 6 Feb 2026 14:03:23 +0000 (15:03 +0100)] 
chase: add new flag CHASE_MUST_BE_SOCKET

Just like CHASE_MUST_BE_DIRECTORY and CHASE_MUST_BE_REGULAR, but test if
the inode is a socket.

7 days agostat-util: add stat_verify_socket() helper
Lennart Poettering [Fri, 6 Feb 2026 14:02:45 +0000 (15:02 +0100)] 
stat-util: add stat_verify_socket() helper

7 days agounits: symlink well-known Varlink services into /run/varlink/registry/
Lennart Poettering [Fri, 6 Feb 2026 14:04:11 +0000 (15:04 +0100)] 
units: symlink well-known Varlink services into /run/varlink/registry/

So far we didn't provide any concept to enumerate local Varlink
services. Let's change that.

Let's define very light-weight scheme for this: provide a well-known dir
/run/varlink/registry/ where services that implement public interfaces
can link their sockets into. When enumerating services it's thus
sufficient to enumerate inodes in that directory.

The usecase for this is twofold:

1. It's simply very useful to be able to see which public services are
   bound on the local system, for debugging/admin/development purposes.

2. At Amutable we'd like to optionally provide a HTTP-to-Varlink bridge
   on individual nodes, that allows remote peers (after authentication)
   to access local Varlink services. For that it's essential we know the
   list of services and their entrypoints to expose, it would be
   security-wise highly problematic for clients to provide AF_UNIX
   entrypoint paths when connecting. hence: let's instead just have a
   dir with the public stuff, and let's ensure the HTTP-to-Varlink
   bridge simply exposes that stuff, and nothing else.

Non-public interfaces (such as the oomd interfaces between PID 1 and
oomd), and interfaces with multiple implementors (such as the resolved
hook interface, or the metrics collection stuff) should not be linked
in.

This is inspired by the Varlink.org "registry" concept, briefly
explained here:

https://varlink.org/FAQ#how-do-i-find-the-service-which-implements-a-local-interface

Note however that the described Varlink interface is not actually
implemented here, the directory is introduced however in a fashion that
conceptually matches the registry defined there, and would allow us to
implement the registry interface on top of it. (One of the reason the
registry Varlink API is not implemented right now is that the URI format
it relies on is entirely unspecified in the Varlink docs right now. Some
research needs to be done to extract what's implemented in the reference
implementation and to determine how it maps to the Varlink entrypoint
address format systemd's own tooling currently uses)

This primarily installs the symlinks via Symlinks= in unit files and via
a new tmpfiles.d/ drop-in. But since we touch all .socket units relating
to Varlink this also sets the FileDescriptorName= to varlink for each,
just to minimize diffrences and make things work more alike (the
services in questin don't care about the name, so this doesn't change).
In one case we replace a pair of separate sockets for two closely
related varlink services by a socket and a symlink, so that we can
safely use Symlinks= to also install the registry symlinks.

7 days agomountfsd: don't cross mount boundaries when looking for owner of foreign UID owned...
Lennart Poettering [Mon, 9 Feb 2026 09:36:22 +0000 (10:36 +0100)] 
mountfsd: don't cross mount boundaries when looking for owner of foreign UID owned tree (#40578)

7 days agoupdate TODO 40578/head
Lennart Poettering [Thu, 5 Feb 2026 16:00:10 +0000 (17:00 +0100)] 
update TODO

7 days agomountfsd: do not cross mount boundaries when looking for parent of foreign UID range...
Lennart Poettering [Thu, 5 Feb 2026 15:51:56 +0000 (16:51 +0100)] 
mountfsd: do not cross mount boundaries when looking for parent of foreign UID range owned dirs

This is primarily paranoia: it might be possible for unpriv users to set
up mount hierarchies in unexpected ways when using userns. Hence let's
make protections more rigid: when looking for a parent dir of a foreign
UID owned dir tree, refuse to cross mount boundaries.

7 days agostat-util: add statx_verify_directory() helper, similar to stat_verify_directory...
Lennart Poettering [Thu, 5 Feb 2026 15:42:20 +0000 (16:42 +0100)] 
stat-util: add statx_verify_directory() helper, similar to stat_verify_directory() but for statx

7 days agomountpoint-util: use xstatx() a bit more
Lennart Poettering [Thu, 5 Feb 2026 15:41:50 +0000 (16:41 +0100)] 
mountpoint-util: use xstatx() a bit more

7 days agodirent-util: use xstatx_full() some more
Lennart Poettering [Thu, 5 Feb 2026 15:40:57 +0000 (16:40 +0100)] 
dirent-util: use xstatx_full() some more

7 days agoreport: many smaller clean-ups/tweaks to systemd-report (#40598)
Zbigniew Jędrzejewski-Szmek [Mon, 9 Feb 2026 09:28:29 +0000 (10:28 +0100)] 
report: many smaller clean-ups/tweaks to systemd-report (#40598)

/cc @keszybz

7 days agobootctl parts of installer PR (#40447)
Daan De Meyer [Mon, 9 Feb 2026 08:46:39 +0000 (09:46 +0100)] 
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

7 days agojournal-send: check if $LOG_NAMESPACE denotes our /run/systemd/journal/ is already...
Mike Yuan [Sat, 7 Feb 2026 20:22:56 +0000 (21:22 +0100)] 
journal-send: check if $LOG_NAMESPACE denotes our /run/systemd/journal/ is already namespaced properly

7 days agodocs: note step to update obs workflow file on release
Luca Boccassi [Fri, 6 Feb 2026 17:22:15 +0000 (17:22 +0000)] 
docs: note step to update obs workflow file on release

7 days agoREADME: note that we now have packages built from stable branch too
Luca Boccassi [Fri, 6 Feb 2026 17:05:37 +0000 (17:05 +0000)] 
README: note that we now have packages built from stable branch too

7 days agomeson: use printf instead of echo
Mike Gilbert [Mon, 9 Feb 2026 00:12:30 +0000 (19:12 -0500)] 
meson: use printf instead of echo

The echo builtin provided by some shells (mksh) will interpret \x2d as
an escape sequence. This causes meson to fail:

```
test/fuzz/meson.build:93:52: ERROR: File fuzz-unit-file/dm-back-slash.swap does not exist.
```

Bug: https://bugs.gentoo.org/969789

7 days agoupdate TODO
Lennart Poettering [Mon, 9 Feb 2026 08:33:07 +0000 (09:33 +0100)] 
update TODO

7 days agooomd: implement a prekill hook (#38584)
Lennart Poettering [Mon, 9 Feb 2026 07:43:13 +0000 (08:43 +0100)] 
oomd: implement a prekill hook (#38584)

When a cgroup is selected for termination, send varlink messages to
hooks registered in `/run/systemd/oomd.prekill-hooks/`.
oomd waits up to `PreKillTimeoutSec=` seconds for response before
proceeding with the kill.

7 days agodocs/INCOMPATIBILITIES: fix typo
Mike Yuan [Tue, 3 Feb 2026 23:39:34 +0000 (00:39 +0100)] 
docs/INCOMPATIBILITIES: fix typo

7 days agomailmap: deduplicate Lennart and Daan @Amutable
Mike Yuan [Wed, 4 Feb 2026 18:59:57 +0000 (19:59 +0100)] 
mailmap: deduplicate Lennart and Daan @Amutable

7 days agooomd: implement a prekill varlink event 38584/head
Matteo Croce [Mon, 25 Aug 2025 15:13:00 +0000 (17:13 +0200)] 
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.

7 days agoRevert "oomd: move check if processes can be killed into oomd_cgroup_kill()"
Matteo Croce [Mon, 24 Nov 2025 11:58:07 +0000 (12:58 +0100)] 
Revert "oomd: move check if processes can be killed into oomd_cgroup_kill()"

This reverts commit 332bce5bd7a9294c3b414b6da72b09986af69d6b.

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.

7 days agooomd: Make OomdCGroupContext reference counted
Daan De Meyer [Tue, 28 Oct 2025 12:02:32 +0000 (13:02 +0100)] 
oomd: Make OomdCGroupContext reference counted

Preparation for adding oomd hooks.

7 days agoudev: Introduce uaccess for remote graphical sessions (#38516)
Lennart Poettering [Sun, 8 Feb 2026 20:41:21 +0000 (21:41 +0100)] 
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.

8 days agomkosi: always install util-linux-script in Fedora
Luca Boccassi [Sun, 8 Feb 2026 13:29:23 +0000 (13:29 +0000)] 
mkosi: always install util-linux-script in Fedora

F41 is EOL, so we can unconditionally install this package, so that we
don't have to add a new version every time a new release is branched

Fixes test issues such as:

TEST-74-AUX-UTILS.sh[1363]: .//usr/lib/systemd/tests/testdata/units/TEST-74-AUX-UTILS.networkctl.sh: line 55: script: command not found

8 days agoTODO: add some items about report/metrics 40598/head
Lennart Poettering [Sat, 7 Feb 2026 22:55:23 +0000 (23:55 +0100)] 
TODO: add some items about report/metrics

8 days agoman: add super basic man page
Lennart Poettering [Sat, 7 Feb 2026 22:34:09 +0000 (23:34 +0100)] 
man: add super basic man page

8 days agoreport: rework limits logic
Lennart Poettering [Sat, 7 Feb 2026 22:26:21 +0000 (23:26 +0100)] 
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.

8 days agoreport: don't claim no reporting sockets were found, when it's no metrics that were...
Lennart Poettering [Sat, 7 Feb 2026 22:12:30 +0000 (23:12 +0100)] 
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.

8 days agoreport: keep track of varlink connections inside of Context object
Lennart Poettering [Sat, 7 Feb 2026 22:10:54 +0000 (23:10 +0100)] 
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.

8 days agoreport: move event loop object into Context
Lennart Poettering [Sat, 7 Feb 2026 22:01:00 +0000 (23:01 +0100)] 
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.

8 days agoreport: pass Context as first argument to metrics_call()
Lennart Poettering [Sat, 7 Feb 2026 21:57:41 +0000 (22:57 +0100)] 
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.

8 days agoreport: -p is not defined
Lennart Poettering [Fri, 6 Feb 2026 22:43:31 +0000 (23:43 +0100)] 
report: -p is not defined

8 days agoreport: do not treat an empty report dir as an issue
Lennart Poettering [Fri, 6 Feb 2026 22:42:36 +0000 (23:42 +0100)] 
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.

8 days agoreport: use sd_json_variant_unref_many()
Lennart Poettering [Fri, 6 Feb 2026 22:42:15 +0000 (23:42 +0100)] 
report: use sd_json_variant_unref_many()

8 days agoreport: add the usual --json= argument
Lennart Poettering [Fri, 6 Feb 2026 22:42:02 +0000 (23:42 +0100)] 
report: add the usual --json= argument

9 days agobash-completion/sysext: add missing candidates for --always-refresh
Yu Watanabe [Fri, 6 Feb 2026 15:48:38 +0000 (00:48 +0900)] 
bash-completion/sysext: add missing candidates for --always-refresh

Follow-up for 23115eeaf10ab551b44b7de68b8c23923bcf28e9.

9 days agodaemon-util: downgrade log level on ECONNREFUSED and friends
Yu Watanabe [Fri, 6 Feb 2026 16:07:33 +0000 (01:07 +0900)] 
daemon-util: downgrade log level on ECONNREFUSED and friends

This partially reverts 36c557f7d41441bbd98a8965348dfe8050fc9c98, 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 472404aca5357b7e65cdddf418342070b0ccd4d2.

9 days agoresolvectl: include ifindex when printing link-local DNS server
Nick Rosbrook [Fri, 6 Feb 2026 16:38:47 +0000 (11:38 -0500)] 
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

9 days agobootctl: add comments emphasizing that certain functions do not touch the file read... 40447/head
Lennart Poettering [Fri, 6 Feb 2026 21:31:53 +0000 (22:31 +0100)] 
bootctl: add comments emphasizing that certain functions do not touch the file read pointer

9 days agobootctl: add test case for bootctl install via varlink
Lennart Poettering [Fri, 23 Jan 2026 12:09:08 +0000 (13:09 +0100)] 
bootctl: add test case for bootctl install via varlink

9 days agobootctl: return recognizable Varlink error when we cannot determine the boot entry...
Lennart Poettering [Fri, 23 Jan 2026 20:04:55 +0000 (21:04 +0100)] 
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.)

9 days agobootctl: optionally include backing disk name in efi boot option description
Lennart Poettering [Sat, 20 Sep 2025 06:38:51 +0000 (08:38 +0200)] 
bootctl: optionally include backing disk name in efi boot option description

9 days agobootctl: parse install source via our usual string table helpers
Lennart Poettering [Mon, 8 Sep 2025 08:16:22 +0000 (10:16 +0200)] 
bootctl: parse install source via our usual string table helpers

9 days agobootctl: add Install() varlink API
Lennart Poettering [Wed, 3 Sep 2025 10:11:19 +0000 (12:11 +0200)] 
bootctl: add Install() varlink API

Fixes: #11221
9 days agobootctl: rework bootctl-install.c in preparation of varlinkification
Lennart Poettering [Wed, 3 Sep 2025 10:11:00 +0000 (12:11 +0200)] 
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.

9 days agotests: don't use dd anymore for allocating empty test disk images (#40583)
Lennart Poettering [Fri, 6 Feb 2026 20:03:55 +0000 (21:03 +0100)] 
tests: don't use dd anymore for allocating empty test disk images (#40583)

9 days agoCODING_STYLE: document how to handle kernel compat
Lennart Poettering [Fri, 6 Feb 2026 11:15:23 +0000 (12:15 +0100)] 
CODING_STYLE: document how to handle kernel compat

Let's define a way how to mark codepaths that are subject to
deletion once the kernel baseline reaches a certain version, to make it
easier to find these cases.

WHile we are at it, introuce a whole section in CODING_STYLE about
kernel version compat.

I followed the new scheme in #39621, but we can merge the coding style
guidelines on this already.

9 days agoinhibit: drop redundant table_set_header() caller
Lennart Poettering [Fri, 6 Feb 2026 15:16:14 +0000 (16:16 +0100)] 
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.

10 days agotest: bump disk sizes for some test cases 40583/head
Lennart Poettering [Fri, 6 Feb 2026 11:16:15 +0000 (12:16 +0100)] 
test: bump disk sizes for some test cases

In my testing I switched building my locally run CI integration tests to
ArchLinux and realized that for that the default sizes don't work
anymore, the images are larger than the space allocated. Let's bump the
size by 50% for the relevant disk images.

10 days agotests: don't use "dd" to allocate empty files
Lennart Poettering [Fri, 6 Feb 2026 10:16:48 +0000 (11:16 +0100)] 
tests: don't use "dd" to allocate empty files

Let's use truncate -s … to create empty files (if they can be sparse)

Let's use fallocate -l … to create empty non-sparse files.

This should reduce the disk footprint of our tests a bit, given that in
most cases we won't use the allocate disk space in full, not even
remotely.

10 days agoman/sd-login: Document the uaccess and xaccess udev tags 38516/head
Alessandro Astone [Fri, 6 Feb 2026 09:29:29 +0000 (10:29 +0100)] 
man/sd-login: Document the uaccess and xaccess udev tags

Fixes: #4288
10 days agoman: Update docs for ExtraDeviceAccess
Alessandro Astone [Wed, 26 Nov 2025 17:20:30 +0000 (18:20 +0100)] 
man: Update docs for ExtraDeviceAccess

10 days agorules: Tag DRM render nodes with xaccess
Alessandro Astone [Wed, 26 Nov 2025 16:30:52 +0000 (17:30 +0100)] 
rules: Tag DRM render nodes with xaccess

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.

Tag the render nodes with "xaccess" so that access is also granted to remote
sessions created with XDG_SESSION_EXTRA_DEVICE_ACCESS=1

10 days agoudev: Grant sessions access to devices tagged with xaccess
Alessandro Astone [Wed, 26 Nov 2025 16:26:53 +0000 (17:26 +0100)] 
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.

10 days agologin: Add XDG_SESSION_EXTRA_DEVICE_ACCESS variable for additional access
Alessandro Astone [Wed, 26 Nov 2025 16:23:13 +0000 (17:23 +0100)] 
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.

10 days agometrics: fix typo
Yu Watanabe [Fri, 6 Feb 2026 06:19:51 +0000 (15:19 +0900)] 
metrics: fix typo

Follow-up for fd73cd6c912a4d31f404d54700654d8398ea8f27.

10 days agoudev: fix typo
Yu Watanabe [Fri, 6 Feb 2026 06:17:21 +0000 (15:17 +0900)] 
udev: fix typo

Follow-up for b7363d33302fa86fe46e03b500e729fea3277ed7.

10 days agojournal-remote test: add -Z for mkdir in general
Cathy Hu [Fri, 23 Jan 2026 09:52:36 +0000 (10:52 +0100)] 
journal-remote test: add -Z for mkdir in general

Otherwise on SELinux enabled systems with the "targeted" policy
the type is not set correctly when run via unconfined user and
the test fails.

10 days agohwdb: several fixes for sensor (#40576)
Yu Watanabe [Fri, 6 Feb 2026 06:13:54 +0000 (15:13 +0900)] 
hwdb: several fixes for sensor (#40576)

Let's respect for some devices that the accelerometer values must follow
the normal orientation of the panel and not the device one.

10 days agopcrextend: fix varlink API to match what we actually take
Lennart Poettering [Thu, 5 Feb 2026 15:01:08 +0000 (16:01 +0100)] 
pcrextend: fix varlink API to match what we actually take

(Change test case slightly, to ensure we don't regress on this)

10 days agoportablectl: Strip .v or .raw.v when extracting prefix
Louis Stagg [Tue, 3 Feb 2026 18:48:59 +0000 (18:48 +0000)] 
portablectl: Strip .v or .raw.v when extracting prefix

This allows a plain "portablectl attach foobar.raw.v" without needing to
specify a prefix.

11 days agohwdb: sensor: remove Asus T101HA and T101HAF 40576/head
David Santamaría Rogado [Thu, 5 Feb 2026 17:06:39 +0000 (18:06 +0100)] 
hwdb: sensor: remove Asus T101HA and T101HAF

T101HA reports corect values in monitor-sensor when no mount matrix is
defined and was added to correct KDE display output.

T101HAF original bug report stated that it corrects the display in KDE
so indeed this is wrong.

11 days agohwdb: sensor: recover Duet 3 10IGL5 normal and LTE
David Santamaría Rogado [Thu, 5 Feb 2026 16:59:54 +0000 (17:59 +0100)] 
hwdb: sensor: recover Duet 3 10IGL5 normal and LTE

The mount matrix was as intended, normal is when the device is in panel
orientation, not in device orientation.

11 days agohwdb: sensor: correct D330 respecting panel mount
David Santamaría Rogado [Thu, 5 Feb 2026 15:08:22 +0000 (16:08 +0100)] 
hwdb: sensor: correct D330 respecting panel mount

The matrix before was setting accel values to follow normal device
orientation, but the accel values must match the panel orientation that
in these devices is 90 degrees CCW.

Indicate how the panel is mounted in the comment. Could be interesting
to do it also for other devices because when desktop enviroments do it
right the user could be unaware of the panel mounting and could think
monitor-sensor output is bogus.

11 days agostat-util: introduce xstatx() (#40507)
Mike Yuan [Thu, 5 Feb 2026 15:51:57 +0000 (16:51 +0100)] 
stat-util: introduce xstatx() (#40507)

11 days agoupdate TODO
Lennart Poettering [Thu, 29 Jan 2026 11:11:40 +0000 (12:11 +0100)] 
update TODO

11 days agoVarious fixes related to mountfsd (#40564)
Daan De Meyer [Thu, 5 Feb 2026 15:39:28 +0000 (16:39 +0100)] 
Various fixes related to mountfsd (#40564)

11 days agopidfd-util: Remove unused include
Daan De Meyer [Thu, 5 Feb 2026 14:32:40 +0000 (15:32 +0100)] 
pidfd-util: Remove unused include

This snuck in when CI was broken.

11 days agonsresourced: Ensure that all user namespaces are cleaned-up
Christian Brauner [Wed, 4 Feb 2026 22:24:31 +0000 (23:24 +0100)] 
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>
11 days agonsresourced: Add comment about mknod() hook covering regular files 40564/head
Daan De Meyer [Mon, 26 Jan 2026 20:39:34 +0000 (21:39 +0100)] 
nsresourced: Add comment about mknod() hook covering regular files

11 days agonsresourced: Fix typo
Daan De Meyer [Sun, 25 Jan 2026 20:21:22 +0000 (21:21 +0100)] 
nsresourced: Fix typo

11 days agomountfsd: Always open_tree() in mount namespace of peer
Daan De Meyer [Sat, 24 Jan 2026 19:52:14 +0000 (20:52 +0100)] 
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.

11 days agoudev: fix performance regression in resolving event dependencies (#40364)
Daan De Meyer [Thu, 5 Feb 2026 13:14:47 +0000 (14:14 +0100)] 
udev: fix performance regression in resolving event dependencies (#40364)

Fixes #39583.
Fixes #39817.

11 days agostat-util: drop now unused statx_warn_mount_{id,root}() 40507/head
Mike Yuan [Thu, 29 Jan 2026 09:59:42 +0000 (10:59 +0100)] 
stat-util: drop now unused statx_warn_mount_{id,root}()

11 days agovarious: use xstatx()
Mike Yuan [Thu, 29 Jan 2026 09:48:43 +0000 (10:48 +0100)] 
various: use xstatx()

11 days agoREADME: list STATX_MNT_ID_UNIQUE and AT_HANDLE_MNT_ID_UNIQUE
Mike Yuan [Thu, 5 Feb 2026 04:37:29 +0000 (05:37 +0100)] 
README: list STATX_MNT_ID_UNIQUE and AT_HANDLE_MNT_ID_UNIQUE

11 days agomountpoint-util: rework name_to_handle_at() unique mount id handling
Mike Yuan [Thu, 5 Feb 2026 00:32:59 +0000 (01:32 +0100)] 
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...

11 days agomountpoint-util: port to xstatx(), support XAT_FDROOT
Mike Yuan [Thu, 29 Jan 2026 09:20:00 +0000 (10:20 +0100)] 
mountpoint-util: port to xstatx(), support XAT_FDROOT

11 days agostat-util: introduce xstatx()
Mike Yuan [Thu, 29 Jan 2026 08:23:35 +0000 (09:23 +0100)] 
stat-util: introduce xstatx()

11 days agobasic: add generated statx_mask_one_to_name()/statx_attribute_to_name()
Mike Yuan [Wed, 4 Feb 2026 22:30:42 +0000 (23:30 +0100)] 
basic: add generated statx_mask_one_to_name()/statx_attribute_to_name()

11 days agofd-util: add generic resolve_xat_fdroot()
Mike Yuan [Thu, 29 Jan 2026 10:27:40 +0000 (11:27 +0100)] 
fd-util: add generic resolve_xat_fdroot()

As suggested in
https://github.com/systemd/systemd/pull/40500#discussion_r2740921215

11 days agoshared/find-esp: STATX_MNT_ID is no longer needed as we rely on _ATTR_MOUNT_ROOT
Mike Yuan [Thu, 29 Jan 2026 09:49:56 +0000 (10:49 +0100)] 
shared/find-esp: STATX_MNT_ID is no longer needed as we rely on _ATTR_MOUNT_ROOT

Follow-up for a98a6eb95cc980edab4b0f9c59e6573edc7ffe0c

11 days agoportable-util: drop spurious -ENXIO check for xdg_user_config_dir()
Mike Yuan [Mon, 2 Feb 2026 09:50:40 +0000 (10:50 +0100)] 
portable-util: drop spurious -ENXIO check for xdg_user_config_dir()

Unlike $XDG_RUNTIME_DIR the user config dir has a default
value, hence -ENXIO is not really expected.

11 days agoboot/efi-string: use QUOTES macro, shorten the code a bit
Mike Yuan [Wed, 4 Feb 2026 18:32:51 +0000 (19:32 +0100)] 
boot/efi-string: use QUOTES macro, shorten the code a bit

Follow-up for a8f2f5d71786c2cf36e32f856cc329413a76cd93

11 days agotest-uid-range: Migrate to new assertion macros
Daan De Meyer [Sun, 25 Jan 2026 08:33:00 +0000 (09:33 +0100)] 
test-uid-range: Migrate to new assertion macros

11 days agonamespace-util: Fix logging in userns_enter_and_pin()
Daan De Meyer [Fri, 23 Jan 2026 18:15:15 +0000 (19:15 +0100)] 
namespace-util: Fix logging in userns_enter_and_pin()

11 days agomkosi: update mkosi ref to 215a9497ccc089ba030da39e15e9e2371efad3cb (#40573)
Daan De Meyer [Thu, 5 Feb 2026 13:06:45 +0000 (14:06 +0100)] 
mkosi: update mkosi ref to 215a9497ccc089ba030da39e15e9e2371efad3cb (#40573)

215a9497cc fedora: Use N-1 key as well when querying rawhide GPG key
842a37ed6c Add MakeScriptsExecutable= setting to optionally try to
make scripts executable before bailing out
814f2004bb build(deps): bump github/codeql-action from 4.31.9 to
4.32.0
d8f4f628bf build(deps): bump actions/checkout from 6.0.1 to 6.0.2
3e55361142 docs: remove superfluous definition colon
5901524c48 mkosi-tools: add libarchive-tools package.
968392f1b9 docs: Add information about gui mkosi-tools profile
0e2960c245 Add missing call to run_locale_gen()
41cd2067bc rpm: Set pkgverify_level to digest
86fe0f448a dnf: Give advanced users some control over plugins
50a1feee52 run: Improve sandbox command logging
b1dffe1c3c Fix environment variable name for systemd-repart
07726068d9 Allow specifying "default" value for Initrds=
704f163ec0 Allow setting PORTABLE_PREFIXES= via Environment=
e6588afb45 opensuse: More GPG key handling fixes
c367f993dd opensuse: Fetch remote keys as well if RepositoryKeyFetch=
is enabled
31852c9314 ci: Use mkosi box for unit test CI as well
e4229f5bf5 Make sure we pass the right context to
finalize_default_initrd()
9b431b783a tools: don't pull in virtiofsd in bookworm tools trees
ae2d88d463 build(deps): bump github/codeql-action from 4.31.6 to
4.31.9
933401a8b6 build(deps): bump actions/checkout from 6.0.0 to 6.0.1
6bfeb4ac86 opensuse: Import GPG keys for all repositories
9829b9136f Add support for locale-gen
63ae86ec04 nixos: Use repository key fetching by default on nixos
f01ca9904b docs: Reword dependencies vs tools tree requirement a bit
ab47ba25ef docs: Minor correction on enabling unprivileged namespaces
7bd46a417e docs: Update unprivileged user namespace docs

11 days agomkosi: update mkosi ref to 14d2d37a1923c03062f55454b2b61d0c64db6238 40573/head
Daan De Meyer [Thu, 5 Feb 2026 12:10:35 +0000 (13:10 +0100)] 
mkosi: update mkosi ref to 14d2d37a1923c03062f55454b2b61d0c64db6238

14d2d37a19 sandbox: Make sure we're dumpable before writing uidmap files
215a9497cc fedora: Use N-1 key as well when querying rawhide GPG key
842a37ed6c Add MakeScriptsExecutable= setting to optionally try to make scripts executable before bailing out
814f2004bb build(deps): bump github/codeql-action from 4.31.9 to 4.32.0
d8f4f628bf build(deps): bump actions/checkout from 6.0.1 to 6.0.2
3e55361142 docs: remove superfluous definition colon
5901524c48 mkosi-tools: add libarchive-tools package.
968392f1b9 docs: Add information about gui mkosi-tools profile
0e2960c245 Add missing call to run_locale_gen()
41cd2067bc rpm: Set pkgverify_level to digest
86fe0f448a dnf: Give advanced users some control over plugins
50a1feee52 run: Improve sandbox command logging
b1dffe1c3c Fix environment variable name for systemd-repart
07726068d9 Allow specifying "default" value for Initrds=
704f163ec0 Allow setting PORTABLE_PREFIXES= via Environment=
e6588afb45 opensuse: More GPG key handling fixes
c367f993dd opensuse: Fetch remote keys as well if RepositoryKeyFetch= is enabled
31852c9314 ci: Use mkosi box for unit test CI as well
e4229f5bf5 Make sure we pass the right context to finalize_default_initrd()
9b431b783a tools: don't pull in virtiofsd in bookworm tools trees
ae2d88d463 build(deps): bump github/codeql-action from 4.31.6 to 4.31.9
933401a8b6 build(deps): bump actions/checkout from 6.0.0 to 6.0.1
6bfeb4ac86 opensuse: Import GPG keys for all repositories
9829b9136f Add support for locale-gen
63ae86ec04 nixos: Use repository key fetching by default on nixos
f01ca9904b docs: Reword dependencies vs tools tree requirement a bit
ab47ba25ef docs: Minor correction on enabling unprivileged namespaces
7bd46a417e docs: Update unprivileged user namespace docs

11 days agofetch-mkosi: Shorten commit message title
Daan De Meyer [Thu, 5 Feb 2026 09:53:09 +0000 (10:53 +0100)] 
fetch-mkosi: Shorten commit message title

Currently github truncates the message so let's make it a little shorter
so it's not truncated.

11 days agosleep: allow HibernateDelaySec and low-battery hibernation to work together
gvenugo3 [Tue, 3 Feb 2026 03:57:30 +0000 (20:57 -0700)] 
sleep: allow HibernateDelaySec and low-battery hibernation to work together

Previously, setting HibernateDelaySec= would disable ACPI battery trip
point (_BTP) alarms, forcing the system to rely solely on software
polling for battery checks. This could result in the battery draining
to 0% between polling intervals, causing data loss.

Now, when ACPI _BTP is available AND HibernateDelaySec= is set, both
mechanisms work together. The system will hibernate on whichever comes
first: low battery (instant hardware alarm) or the configured timeout.

This also properly respects HibernateOnACPower=no by resetting the
timer while on AC power, matching the documented behavior.

Fixes: https://github.com/systemd/systemd/issues/26498
11 days agoInitial tweaks for the report tool (#40568)
Zbigniew Jędrzejewski-Szmek [Thu, 5 Feb 2026 09:15:39 +0000 (10:15 +0100)] 
Initial tweaks for the report tool (#40568)

12 days agometrics/report: add log messages, do not hang if no metrics are found 40568/head
Zbigniew Jędrzejewski-Szmek [Wed, 4 Feb 2026 17:20:11 +0000 (18:20 +0100)] 
metrics/report: add log messages, do not hang if no metrics are found

If the directory existed but was empty, we'd hang in the event loop.

12 days agometrics/report: use _cleanup_, avoid goto
Zbigniew Jędrzejewski-Szmek [Wed, 4 Feb 2026 16:57:24 +0000 (17:57 +0100)] 
metrics/report: use _cleanup_, avoid goto

12 days agopid1: shorten message about jobs skipped after failed condition checks
Zbigniew Jędrzejewski-Szmek [Wed, 4 Feb 2026 09:21:43 +0000 (10:21 +0100)] 
pid1: shorten message about jobs skipped after failed condition checks

I was looking at some logs on a console, and because of the lengthy message,
the actually interesting part, i.e. what condition failed, didn't even fit
on the screen. Let's make the sentence legible but brief.

12 days ago[metrics] Introduce metrics API (#39202)
Zbigniew Jędrzejewski-Szmek [Wed, 4 Feb 2026 15:31:55 +0000 (16:31 +0100)] 
[metrics] Introduce metrics API (#39202)

See the [design
doc](https://github.com/systemd/systemd/issues/38023#issue-3192567450)
by @ikruglov

This PR introduces the metrics API framework, adds some basic system
wide/per unit/service metrics, and a basic CLI. The PR is broken into
two commits as described below.

### Deviations from the original design
- Introduced top level field "object" for ease of filtering. Instead of
having `fields: { unit: "foo", unit_type: "service" }`, we now have
`object: foo.service` as the top level field.

### First commit

The first commit includes:
- Metrics API definitions
- Code to set up the varlink server
- The describe method which shows all the metrics families
- The list method which lists all the metrics
- Type definitions related to MetricFamily
- Common code to build json objects

### Second commit
The second commit adds some basic metrics, a basic CLI (systemd-report)
which
lists the metrics, and integration tests.

**System wide metrics:**
- units_by_type_total
- units_by_state_total

**Two per unit metrics:**
- unit_active_state
- unit_load_state

**A service state metric:**
- nrestarts

### Sample outputs

**units_by_type_total**:

```
{
        "name" : "io.systemd.Manager.units_by_type_total",
        "value" : 52,
        "fields" : {
                "type" : "target"
        }
}
{
        "name" : "io.systemd.Manager.units_by_type_total",
        "value" : 82,
        "fields" : {
                "type" : "device"
        }
}
{
        "name" : "io.systemd.Manager.units_by_type_total",
        "value" : 2,
        "fields" : {
                "type" : "automount"
        }
}
```
**units_by_state_total**:
```
{
        "name" : "io.systemd.Manager.units_by_state_total",
        "value" : 216,
        "fields" : {
                "state" : "active"
        }
}
{
        "name" : "io.systemd.Manager.units_by_state_total",
        "value" : 0,
        "fields" : {
                "state" : "reloading"
        }
}
{
        "name" : "io.systemd.Manager.units_by_state_total",
        "value" : 120,
        "fields" : {
                "state" : "inactive"
        }
}
```
**unit_active_state**:
```
{
        "name" : "io.systemd.Manager.unit_active_state",
        "object" : "multi-user.target",
        "value" : "active"
}
{
        "name" : "io.systemd.Manager.unit_active_state",
        "object" : "systemd-sysusers.service",
        "value" : "inactive"
}
```
**unit_load_state**:
```
{
        "name" : "io.systemd.Manager.unit_load_state",
        "object" : "multi-user.target",
        "value" : "loaded"
}

```
**nrestarts**:
```
{
        "name" : "io.systemd.Manager.nrestarts",
        "object" : "user@0.service",
        "value" : 0
}
{
        "name" : "io.systemd.Manager.nrestarts",
        "object" : "user-runtime-dir@0.service",
        "value" : 0
}
```

12 days agoefi-string: Unquote single-quoted strings as well as double
James Le Cuirot [Tue, 27 Jan 2026 17:12:34 +0000 (17:12 +0000)] 
efi-string: Unquote single-quoted strings as well as double

This code is used to read data copied from /etc/os-release. According to
the spec[1], values can be enclosed in single quotes or double quotes.
Not handling single quotes results in the quotes appearing in the
systemd-boot menu, e.g. 'Gentoo Linux'.

[1] https://www.freedesktop.org/software/systemd/man/latest/os-release.html

Signed-off-by: James Le Cuirot <jlecuirot@microsoft.com>