]> git.ipfire.org Git - thirdparty/systemd.git/log
thirdparty/systemd.git
40 hours agojournal-authenticate: initialize hmac when necessary 42772/head
Yu Watanabe [Fri, 26 Jun 2026 19:59:08 +0000 (04:59 +0900)] 
journal-authenticate: initialize hmac when necessary

40 hours agojournal-authenticate: several trivial cleanups
Yu Watanabe [Thu, 25 Jun 2026 15:31:22 +0000 (00:31 +0900)] 
journal-authenticate: several trivial cleanups

- adds several overflow check,
- adds missing assertion,
- drop unnecessary conditions,
- declare variables when necessary.

40 hours agojournal-authenticate: check overflow
Yu Watanabe [Thu, 25 Jun 2026 16:23:46 +0000 (01:23 +0900)] 
journal-authenticate: check overflow

40 hours agojournal-authenticate: merge several functions into journal_file_maybe_append_tag()
Yu Watanabe [Thu, 25 Jun 2026 16:08:10 +0000 (01:08 +0900)] 
journal-authenticate: merge several functions into journal_file_maybe_append_tag()

40 hours agojournal-authenticate: move several more functions
Yu Watanabe [Thu, 25 Jun 2026 15:53:35 +0000 (00:53 +0900)] 
journal-authenticate: move several more functions

40 hours agojournal-authenticate: move one more function
Yu Watanabe [Thu, 25 Jun 2026 15:47:33 +0000 (00:47 +0900)] 
journal-authenticate: move one more function

40 hours agojournal-authenticate: move functions
Yu Watanabe [Thu, 25 Jun 2026 15:30:37 +0000 (00:30 +0900)] 
journal-authenticate: move functions

41 hours agomkosi: update debian commit ref and install new split-out packages (#42769)
Luca Boccassi [Sat, 27 Jun 2026 14:33:38 +0000 (15:33 +0100)] 
mkosi: update debian commit ref and install new split-out packages (#42769)

41 hours agojournal: several cleanups for journal sealing feature (#42770)
Yu Watanabe [Sat, 27 Jun 2026 14:01:09 +0000 (23:01 +0900)] 
journal: several cleanups for journal sealing feature (#42770)

44 hours agojournal: drop journal_file_tag_seqnum() and embed into journal_file_append_tag() 42770/head
Yu Watanabe [Thu, 25 Jun 2026 15:13:58 +0000 (00:13 +0900)] 
journal: drop journal_file_tag_seqnum() and embed into journal_file_append_tag()

44 hours agojournal: use FSS_HEADER_SIGNATURE at one more place
Yu Watanabe [Thu, 25 Jun 2026 15:08:41 +0000 (00:08 +0900)] 
journal: use FSS_HEADER_SIGNATURE at one more place

44 hours agojournalctl-misc: several cleanups
Yu Watanabe [Thu, 25 Jun 2026 07:56:56 +0000 (16:56 +0900)] 
journalctl-misc: several cleanups

- honor -ENOKEY from journal_file_verify(),
- use RET_GATHER(),
- use usec_sub_unsigned(),
- reduce indentation,
- tighten variable scope.

44 hours agojournal-verify: coding style fixlets
Yu Watanabe [Thu, 25 Jun 2026 07:51:14 +0000 (16:51 +0900)] 
journal-verify: coding style fixlets

44 hours agojournal-authenticate: refuse invalid start and interval parameters
Yu Watanabe [Sat, 27 Jun 2026 05:08:03 +0000 (14:08 +0900)] 
journal-authenticate: refuse invalid start and interval parameters

We have already checked that in journal_file_fss_load().
Let's also check the same in loading user provided key.

46 hours agomkosi: pull new split-out packages for deb/ubuntu 42769/head
Luca Boccassi [Sat, 27 Jun 2026 09:16:24 +0000 (10:16 +0100)] 
mkosi: pull new split-out packages for deb/ubuntu

46 hours agomkosi: update debian commit reference to 0b390d268323a49191a9a3bcc07a46b573c1e464
Luca Boccassi [Sat, 27 Jun 2026 09:12:58 +0000 (10:12 +0100)] 
mkosi: update debian commit reference to 0b390d268323a49191a9a3bcc07a46b573c1e464

0b390d2683 One more fixup for d/copyright
91d3dadcb5 Update changelog for 261.1-1 release
3c287e1f86 d/copyright: update to add new licenses
a82117f9a3 Install new files for upstream build
020caeb149 Override new Lintian false positive
d55b67b66e d/control: demote libnss-{myhostname,resolve} to Suggests for systemd-resolved
1c537705ec Update changelog for 261-2 release
6235897bbc Note new package split in NEWS
a440cb2c4a Install new files for upstream build
7eaa21ad05 Split tpm tools into new systemd-tpm package
52b28b74f3 Split metrics reporting tools into new systemd-report package
de2f367f22 Split imds tools into new systemd-imds package
2d0a07f5ae d/t/control: do not install xserver-xorg-video-dummy on loong64
c886c3efc8 Install new files for upstream build
0efa66b4af Update changelog for 261-1 release
e36cf82a1d lintian-overrides: override error about derivative.ubuntu build profile
fbd38c36ea d/control: do not build systemd-boot-efi-*-signed-template on ubuntu

2 days agojournal: use recognizable error code
Yu Watanabe [Thu, 25 Jun 2026 07:43:13 +0000 (16:43 +0900)] 
journal: use recognizable error code

EINVAL is too generic and widely used. Let's use more specific error code.

2 days agosd-journal: use iovec for fsprg state and friends
Yu Watanabe [Tue, 23 Jun 2026 13:15:17 +0000 (22:15 +0900)] 
sd-journal: use iovec for fsprg state and friends

This also makes them erased before freed.

2 days agojournalctl: use iovec for fsprg state and friends
Yu Watanabe [Tue, 23 Jun 2026 12:57:24 +0000 (21:57 +0900)] 
journalctl: use iovec for fsprg state and friends

This also makes them erased on exit.

2 days agoiovec-util: introduce several helper functions
Yu Watanabe [Tue, 23 Jun 2026 13:37:37 +0000 (22:37 +0900)] 
iovec-util: introduce several helper functions

2 days agojournal-importer: avoid false maybe-uninitialized warning
Yu Watanabe [Tue, 23 Jun 2026 15:32:16 +0000 (00:32 +0900)] 
journal-importer: avoid false maybe-uninitialized warning

Observerd on Ubuntu 24.04 with GCC 13 on arm64 architecture.
```
../src/shared/journal-importer.c: In function ‘journal_importer_process_data’:
../src/shared/journal-importer.c:344:30: error: ‘line’ may be used uninitialized [-Werror=maybe-uninitialized]
  344 |                         if (!journal_field_valid(line, n - 1, true)) {
      |                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/shared/journal-importer.c:295:23: note: ‘line’ was declared here
  295 |                 char *line, *sep;
      |                       ^~~~
cc1: all warnings being treated as errors
```

2 days agoresolvectl: use more varlink (#41840)
Yu Watanabe [Sat, 27 Jun 2026 03:21:19 +0000 (12:21 +0900)] 
resolvectl: use more varlink (#41840)

There are already varlink methods for `ResolveHostname`,
`ResolveAddress`, and `ResolveRecord`. Use those in `resolvectl` instead
of the dbus equivalents.

2 days agosysupdate: Address review feedback on CheckNew varlink scaffolding
Lennart Poettering [Fri, 26 Jun 2026 15:40:20 +0000 (17:40 +0200)] 
sysupdate: Address review feedback on CheckNew varlink scaffolding

Follow-up to #42422:

 - Rename process_image() to context_process_image(), since it now
   operates on a Context object.
 - Use IN_SET() in image_type_can_sysupdate() instead of a switch.
 - Name the return parameters of context_list_components() ret_xyz, per
   our coding style.
 - Drop a redundant "else" after a return in vl_method_check_new().

2 days agoresolvectl: use varlink instead of dbus for ResolveService 41840/head
Nick Rosbrook [Fri, 19 Jun 2026 19:01:03 +0000 (15:01 -0400)] 
resolvectl: use varlink instead of dbus for ResolveService

2 days agonss-resolve: use resolve-varlink-util.h helpers
Nick Rosbrook [Fri, 19 Jun 2026 19:01:02 +0000 (15:01 -0400)] 
nss-resolve: use resolve-varlink-util.h helpers

Re-factor using the shared code introduced for resolvectl.

2 days agotest: relax grep for DNS query refusal
Nick Rosbrook [Fri, 19 Jun 2026 19:01:02 +0000 (15:01 -0400)] 
test: relax grep for DNS query refusal

The punctuation is not strictly important for the error.

2 days agoresolvectl: use varlink instead of dbus for ResolveRecord
Nick Rosbrook [Fri, 19 Jun 2026 19:01:01 +0000 (15:01 -0400)] 
resolvectl: use varlink instead of dbus for ResolveRecord

2 days agoresolvectl: use varlink instead of dbus for ResolveAddress
Nick Rosbrook [Fri, 19 Jun 2026 19:01:01 +0000 (15:01 -0400)] 
resolvectl: use varlink instead of dbus for ResolveAddress

2 days agoresolvectl: use varlink instead of dbus for ResolveHostname
Nick Rosbrook [Fri, 19 Jun 2026 19:01:00 +0000 (15:01 -0400)] 
resolvectl: use varlink instead of dbus for ResolveHostname

2 days agomkosi: add postmarketOS (#39823)
Yu Watanabe [Fri, 26 Jun 2026 18:54:39 +0000 (03:54 +0900)] 
mkosi: add postmarketOS (#39823)

2 days agosysupdate: Add a stub varlink interface and implement CheckNew (#42422)
Lennart Poettering [Fri, 26 Jun 2026 15:31:30 +0000 (17:31 +0200)] 
sysupdate: Add a stub varlink interface and implement CheckNew (#42422)

This puts the scaffolding in place for a varlink interface, but so far
it only adds a `io.systemd.Sysupdate.CheckNew()` method. Varlinkifying
the other verbs on `systemd-sysupdate` will happen in follow-up PRs, but
I thought I’d try and land this one early to:
 * Get review of the overall varlinkification scaffolding
* Lower the chance of big merge conflicts with others’ work by getting
the more invasive changes out of the way
* Get the scaffolding in place so others can start to build on it if
they wish (although I am currently working on porting the other existing
verbs)

It rearranges how the `Context` struct is allocated so that it’ll be
easier to add per-method/verb context structs which contain it in
future. It also changes all the `sysupdate.c` code to use arguments from
`Context` rather than `arg_*` globals, allowing them to be specified as
varlink parameters in future.

It also moves the existing `systemd-sysupdate.{timer,service}` units
(which periodically run `systemd-sysupdate update`) to
`systemd-sysupdate-update.{timer,service}` to clear space for a
`systemd-sysupdate@.service` and `systemd-sysupdate.socket` to act as a
varlink entry point.

/cc @AdrianVovk

2 days agohwdb: add touchpad toggle mapping for MSI Katana GF66 12UD
dirhamtriyadi [Fri, 26 Jun 2026 14:20:20 +0000 (21:20 +0700)] 
hwdb: add touchpad toggle mapping for MSI Katana GF66 12UD

2 days agoci/mkosi: add postmarketos job 39823/head
Yu Watanabe [Sun, 28 Sep 2025 08:02:19 +0000 (17:02 +0900)] 
ci/mkosi: add postmarketos job

Currently, TEST-92-TPM2-SWTPM is skipped as it requires the following:
https://github.com/systemd/systemd/pull/42760
https://gitlab.alpinelinux.org/alpine/aports/-/work_items/18293

2 days agomkosi: add postmarketos support
Yu Watanabe [Sun, 14 Sep 2025 03:16:03 +0000 (12:16 +0900)] 
mkosi: add postmarketos support

postmarketOS image can be built with for example the following mkosi.local.conf:
```
[Distribution]
Distribution=postmarketos

[Output]
Format=disk

[Build]
UseSubvolumes=yes

[Runtime]
Firmware=uefi
```

2 days agoresolve: add query string field to io.systemd.Resolve.DNSError
Nick Rosbrook [Fri, 19 Jun 2026 19:01:00 +0000 (15:01 -0400)] 
resolve: add query string field to io.systemd.Resolve.DNSError

This is preparation for using varlink methods more in resolvectl. In
particular, this is helpful for proving more accurate error messages,
and maintaining compatibility with existing error messages from the
DBus API.

2 days agojson-util: introduce json_dispatch_in_addr_data
Nick Rosbrook [Tue, 23 Jun 2026 16:02:19 +0000 (12:02 -0400)] 
json-util: introduce json_dispatch_in_addr_data

Generalize json_dispatch_address from nss-resolve, and add support for
strings to be compatible with the existing json_dispatch_{in,in6}_addr
helpers. This will be used in a later commit.

2 days agojson-util: generalize json_dispatch_address_family
Nick Rosbrook [Fri, 19 Jun 2026 19:00:59 +0000 (15:00 -0400)] 
json-util: generalize json_dispatch_address_family

There are several places where address family is dispatched from JSON,
so take json_dispatch_address_family from networkd and put it in
json-util.c.

Update the all instances in the tree to use this new function, adding
SD_JSON_RELAX to the dispatch flags if AF_UNSPEC should be allowed
in that case.

2 days agosysupdate: Fix some clang-tidy lint warnings for argument names 42422/head
Philip Withnall [Fri, 26 Jun 2026 11:07:15 +0000 (12:07 +0100)] 
sysupdate: Fix some clang-tidy lint warnings for argument names

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2 days agotest: Test error handling for non-existent targets in sysupdate
Philip Withnall [Thu, 18 Jun 2026 12:57:35 +0000 (13:57 +0100)] 
test: Test error handling for non-existent targets in sysupdate

Primarily I want to test the new varlink error, but this will also test
the `systemd-sysupdate` CLI behaviour too.

2 days agosysupdate: Add varlink CheckNew() method
Philip Withnall [Fri, 29 May 2026 14:34:56 +0000 (15:34 +0100)] 
sysupdate: Add varlink CheckNew() method

This is the first varlink method added to sysupdate. The D-Bus interface
(via sysupdated) will remain for now; the varlink interface will exist
in parallel.

This method can be called via:
```
varlinkctl call ./path/to/systemd-sysupdate \
  io.systemd.SysUpdate.CheckNew \
  '{"target":{"class":"host"}}'
SYSTEMD_SYSUPDATE_NO_VERIFY=1 \
varlinkctl call ./path/to/systemd-sysupdate \
  io.systemd.SysUpdate.CheckNew \
  '{"target":{"class":"component","name":"some-component"}}'
```

This includes some changes to run the integration tests again using the
varlink interface rather than running `systemd-sysupdate` directly, to
test the new interface.

2 days agosysupdate: Add basic varlink interface scaffolding
Philip Withnall [Fri, 29 May 2026 12:37:16 +0000 (13:37 +0100)] 
sysupdate: Add basic varlink interface scaffolding

This adds the scaffolding for being able to call sysupdate via varlink,
but it doesn’t yet define or implement any methods. Those will come in
following commits.

The existing `systemd-sysupdate.service` and `systemd-sysupdate.timer`
(which periodically ran `systemd-sysupdate update`) have been renamed
to `systemd-sysupdate-update.{service,timer}` to make way for a new
`systemd-sysupdate@.service` and `systemd-sysupdate.socket` file to
handle varlink activation.

Compatibility symlinks have been added for them.

2 days agotest: Factor out check-new calls in sysupdate integration tests
Philip Withnall [Mon, 1 Jun 2026 12:14:29 +0000 (13:14 +0100)] 
test: Factor out check-new calls in sysupdate integration tests

This introduces no functional changes. In a following commit we’ll use
this to check for updates via varlink as well.

2 days agosd-json: Fix validation of optional fields within a mandatory struct
Philip Withnall [Thu, 4 Jun 2026 15:47:37 +0000 (16:47 +0100)] 
sd-json: Fix validation of optional fields within a mandatory struct

If a varlink method takes a struct/object as a parameter, and it’s
marked as `SD_JSON_MANDATORY`, and it has an optional field inside it
which is *not* marked as `SD_JSON_MANDATORY`, we want to not require
that field to be set.

Previously, due to using the `merged_flags` from both the mandatory
struct and the optional field, `SD_JSON_MANDATORY` was effectively
always set on the optional field even if we didn’t want it. This
resulted in an error being emitted if the mandatory struct was provided
in a varlink call, but without the optional field.

Fix that by validating the field’s presence only against its own flags
and not also the flags of its parent.

Adds a unit test to prevent regressions.

2 days agosysupdate: Factor some Target handling code out of sysupdated
Philip Withnall [Thu, 4 Jun 2026 15:06:15 +0000 (16:06 +0100)] 
sysupdate: Factor some Target handling code out of sysupdated

This will be used in upcoming commits to varlinkify `systemd-sysupdate`;
it will need a way to identify targets over varlink, and the existing
way with a `Target` over D-Bus seems to work quite well.

2 days agosysupdate: Factor out core of `components` verb
Philip Withnall [Tue, 2 Jun 2026 14:54:47 +0000 (15:54 +0100)] 
sysupdate: Factor out core of `components` verb

This will be used in the following commit to add a varlink method for
it.

This introduces no functional changes.

2 days agosysupdate: Minor fix to a cleanup function on an error path
Philip Withnall [Tue, 2 Jun 2026 11:59:04 +0000 (12:59 +0100)] 
sysupdate: Minor fix to a cleanup function on an error path

`process_image()` has historically used `umount_and_freep` to clean up
the mounted directory locally, but callers to it have used
`umount_and_rmdir_and_freep`.

No directory is created after any of the error return paths in
`process_image()`, so it should probably be using
`umount_and_rmdir_and_freep` too.

2 days agosysupdate: Move global arg_* variables into Context
Philip Withnall [Fri, 29 May 2026 13:40:08 +0000 (14:40 +0100)] 
sysupdate: Move global arg_* variables into Context

This is another step towards varlinkifying the program, as it means the
various verb implementations are no longer relying on global state from
the command line.

As part of this, move init of the `Context` struct into a new
`context_from_cmdline()` function.

Additionally pass some context into config parsing `userdata` arguments,
as various config parsers were using `arg_root` via a sneaky `extern`.

This introduces no functional changes.

2 days agoshared: Add a image_policy_copy() helper method
Philip Withnall [Fri, 29 May 2026 12:29:07 +0000 (13:29 +0100)] 
shared: Add a image_policy_copy() helper method

This will be used in an upcoming commit to move global command line
argument variables in sysupdate into its `Context` struct.

2 days agosysupdate: Change Context to be stack allocated
Philip Withnall [Fri, 29 May 2026 12:26:47 +0000 (13:26 +0100)] 
sysupdate: Change Context to be stack allocated

There’s no need for it to be heap allocated — there’s only ever one
instance of it, and it’s allocated for the lifetime of a `verb_*()`
function.

Simplify things a bit by making it stack allocated. This will also help
with upcoming commits where we introduce derived context structs to help
with varlinkifying sysupdate. By allowing `Context` to be stack
allocated we can include it in the derived context structs.

As part of this, rename `context_make_{offline,online}()` to
`context_load_{offline,online}()` for clarity (since they no longer init
the struct).

This introduces no functional changes.

2 days agosysupdate: Factor process_image() into context_make_{offline,online}()
Philip Withnall [Fri, 29 May 2026 11:59:54 +0000 (12:59 +0100)] 
sysupdate: Factor process_image() into context_make_{offline,online}()

`process_image()` is always called immediately before (almost) every
`context_make_online()` or `context_make_offline()`, and the structures
it allocates have the same lifetime as `Context`, so we might as well
factor them all together to reduce duplication.

This will also simplify the following commit, which changes heap
allocation of `Context`s, and simplify upcoming changes to factor out
`arg_*` handling.

The call in `verb_pending_or_reboot()` is safe because it already
validates that `arg_image` is `NULL`, hence `process_image()` will bail
out early.

This introduces no functional changes.

2 days agosysupdate: Factor context creation out of installdb_cleanup_component()
Philip Withnall [Tue, 23 Jun 2026 15:23:54 +0000 (16:23 +0100)] 
sysupdate: Factor context creation out of installdb_cleanup_component()

This makes it like all the other verbs and therefore easier to refactor.

At the same time, remove the separate `component` argument and instead
use the `component` set on the `Context`. This guards against bugs, as
various parts of the `Context` state depend on the component (for
example, `installdb_fd`) and overriding the component without also
overriding its dependent variables will lead to bugs.

2 days agosysupdate: Fix an early return path return value
Philip Withnall [Wed, 24 Jun 2026 12:10:35 +0000 (13:10 +0100)] 
sysupdate: Fix an early return path return value

If the FD has already been opened, return 1 as if opening was
successful, rather than returning 0 as if it gave `ENOENT`.

This fixes doing multiple installdb operations on a single `Context`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2 days agoman: fix first argument in Environment= expansion example
Wang Yu [Fri, 26 Jun 2026 04:07:12 +0000 (12:07 +0800)] 
man: fix first argument in Environment= expansion example

The example states that the first /bin/echo invocation (using ${ONE})
receives the argument 'one' (with literal single quotes). However,
Environment=ONE='one' strips the syntactic single quotes during
unquoting — see systemd.syntax(7), "Quotes themselves are removed" —
so ONE holds the value one, and ${ONE} (exact-value substitution,
always a single argument) yields the argument one without quotes.

Fixes #42442

Signed-off-by: Wang Yu <wangyu@uniontech.com>
2 days agohwbd: correctly map Bluetooth Key on MSI Modern 15 H AI C1MG laptop
Fede2782 [Fri, 26 Jun 2026 08:06:26 +0000 (10:06 +0200)] 
hwbd: correctly map Bluetooth Key on MSI Modern 15 H AI C1MG laptop

Previously the key was unknown so add the correct mapping as it does not follow the general
case for MSI Laptops.

  [  192.562000] atkbd serio0: Unknown key released (translated set 2, code 0xd7 on isa0060/serio0).
  [  192.562011] atkbd serio0: Use 'setkeycodes e057 <keycode>' to make it known.

Add it currently as a definition specific for this model but can be generalized to other MSI
Laptops if this issue is present also elsewhere.

2 days agotmpfiles: do not fail when trying to apply ACL during mkosi build
Luca Boccassi [Mon, 22 Jun 2026 21:26:17 +0000 (22:26 +0100)] 
tmpfiles: do not fail when trying to apply ACL during mkosi build

When running in a mkosi namespaced env tmpfiles fails to set ACLs:

Running create action for entry a /buildroot/var/log/journal
Setting access ACL u::rwx,g::r-x,g:adm:r-x,m::r-x,o::r-x on /buildroot/var/log/journal
Setting access ACL "u::rwx,g::r-x,g:adm:r-x,m::r-x,o::r-x" on /buildroot/var/log/journal failed: Invalid argument

If EINVAL is returned and we are in a chroot, skip gracefully via
EOPNOTSUPP. The ACLs will be set on first boot.

3 days agopcrlock: reject device path node shorter than its header
Syed Mohammed Nayyar [Thu, 25 Jun 2026 16:46:03 +0000 (22:16 +0530)] 
pcrlock: reject device path node shorter than its header

event_log_record_extract_firmware_description() walks the device path
of a UEFI_IMAGE_LOAD_EVENT taken from the firmware TPM2 measurement log.
The per-node loop checks the remaining bytes against the node and its
declared length, but never that dp->length covers the 4-byte node header
offsetof(packed_EFI_DEVICE_PATH, path).

For a Media/File-Path node with length 3, the file-name extraction
computes dp->length - offsetof(packed_EFI_DEVICE_PATH, path) == 3 - 4,
which wraps to SIZE_MAX. utf16_to_utf8() treats SIZE_MAX as unbounded
and runs char16_strlen() over dp->path, reading past the log buffer; a
length of 0 also leaves dp non-advancing.

efi_get_boot_option() in src/shared/efi-api.c already rejects such nodes
with "if (dpath->length < 4) break;"; do the same here.

3 days agojournald-remote/gateway hardening fixes flagged by kres (#42733)
Lennart Poettering [Thu, 25 Jun 2026 20:09:58 +0000 (22:09 +0200)] 
journald-remote/gateway hardening fixes flagged by kres (#42733)

3 days agovmspawn: deliver credentials via initrd cpio under SEV-SNP (#42272)
Lennart Poettering [Thu, 25 Jun 2026 20:08:08 +0000 (22:08 +0200)] 
vmspawn: deliver credentials via initrd cpio under SEV-SNP (#42272)

Re-enables `--set-credential=` / `--load-credential=` under
`--coco=sev-snp` by packaging credentials into a cpio appended to the
initrd, mirroring what `systemd-stub` does for ESP-sourced credentials.
The initrd is covered by the launch measurement via `kernel-hashes=on`,
so the credentials are too.

Tested end-to-end on an SNP-capable host: credentials passed via
`--set-credential=` land in `/run/credentials/@encrypted/` inside the
guest.

3 days agonss-resolve: fix blank array checks and improve NSS status codes
dongshengyuan [Tue, 16 Jun 2026 01:19:15 +0000 (09:19 +0800)] 
nss-resolve: fix blank array checks and improve NSS status codes

Use sd_json_variant_is_blank_array() instead of is_blank_object() for
p.addresses and p.names, which are declared as JSON arrays. The wrong
predicate never triggered, allowing empty arrays to bypass the guards:
for p.names this caused a size_t underflow leading to an out-of-bounds
heap write; for p.addresses it returned success with no addresses.

Add explicit n_addresses == 0 guards after the family-filter loops so
entries with unsupported families also return NOTFOUND rather than
crashing on a NULL dereference.

In gethostbyname3_r (family-specific entry point), return NO_DATA for
all zero-address results — both blank array and all-filtered — since
both mean "name resolved, no record of the requested family". Keep
HOST_NOT_FOUND in gethostbyname4_r (both-families) where a blank or
all-unsupported result genuinely means the name was not found.

Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com>
Co-developed-by: Claude Opus 4.8 <noreply@anthropic.com>
3 days agojournal: Prevent total log loss on unclean shutdown at high write rates (#42639)
Yu Watanabe [Thu, 25 Jun 2026 17:49:59 +0000 (02:49 +0900)] 
journal: Prevent total log loss on unclean shutdown at high write rates (#42639)

In Meta production we have been considering using journald more widely
for some time. One of the blockers to doing that which I have noticed is
that often journald seems to have vastly less data after lockups/power
failures compared to plain files, which is not great when debugging
outages.

On small write rates this tends to be hard to reproduce, but when
writing thousands of messages a second, an unclean shutdown can result
in the end result being an active journal file with a header that
records an arena larger than the data that actually reached disk. What
happens is then that journalctl then discards the entire file(!),
completely ignoring that there is a huge amount of data which is
actually perfectly readable.

The reason for that is that the journal header is updated on every
append, while the file size and newly written arena contents are only
made durable on the filesystem's own schedule. After a crash, the header
can therefore describe writes which were logically completed by journald
but whose backing data or file metadata never reached disk.

Take the following example of how this can happen at high log rates:

1. journald appends objects into an mmap()ed arena, periodically growing
the file with fallocate() in FILE_SIZE_INCREASE (8M) steps and advancing
the header's arena_size tail pointers as it goes along.
2. The header is dirtied on every append, and its arena_size is advanced
at each fallocate(). It is, from the kernel's perspective, an ordinary
data page and is only made durable by the kernel's periodic page cache
writeback on its own schedule. The file's length, by contrast, is
metadata, made durable only when the filesystem commits a transaction
(or on an fsync(), which journald does not issue between sync
intervals).
3. journald marks journals NOCOW, so the header's data block is
overwritten in place and is decoupled from the size metadata. Nothing
orders the two with respect to each other. Writeback therefore can
routinely persist a header whose arena_size has run ahead of the file
length recorded on disk.
4. Power is lost. On the next boot the persisted header reflects an
arena_size and tail pointers which have been advanced for appends.
However their payload and the file metadata were never committed, so
header_size + arena_size now points well past the end of the file as it
exists on disk.
5. journal_file_verify_header() then rejects this with -ENODATA:

if (... || header_size + arena_size > (uint64_t) f->last_stat.st_size)
            return -ENODATA;

That is correct when opening for writing, because we must not append to
a file whose recorded state we cannot trust, and the caller must rotate
it away. But the same check also runs on read only opens, where it is
actively harmful. In the case of journalctl, the entire file is skipped,
even though the data hash table, the field hash table, and the head of
the array all are present and fully intact, and the great majority of
entries are physically present. In fact, only a very small part of the
most recently written tail is missing, but everything before is
readable. This results in mistakenly rejecting the entire file as
corrupt.

This happens extremely frequently on machines with high write rates
during power cuts or lockups. In testing writing ~7500 msg/s through
journald and then cutting power, I reproduced it in ten out of ten
attempts across different machines.

In each case, the header was left claiming ~296M of arena while only
~192-208M had reached disk. In this case, journalctl reports that it has
recovered 0 of ~335000 messages. Whether a given crash trips the
condition depends on where it falls relative to the header's writeback,
but when it does, the loss today is total. After this patch the vast
majority of messages can be retrieved.

Let's fix this by keeping the rejection for writing, but for read-only
opens, let's just clamp the arena to the real file size and skip the
consistency checks on the now unreliable tail pointers. The reader will
walk the entry array chain from its intact head and stop at the
truncation point by the bounds check that already exists, so there's no
need to do any more than that there.

3 days agoanalyze: don't treat user-scope services as running as root in `security`
Shihao Ren [Thu, 25 Jun 2026 07:15:29 +0000 (15:15 +0800)] 
analyze: don't treat user-scope services as running as root in `security`

`systemd-analyze security --user foo.service` currently flags units
without `User=` as running as root. For user manager instances this is
impossible: per systemd.exec(5), switching user identity is not
permitted there, so the service always runs under the calling user's
UID.

Track the runtime scope inside SecurityInfo and short-circuit
security_info_runs_privileged() and assess_user() for
RUNTIME_SCOPE_USER, so that User=/DynamicUser=, SupplementaryGroups=
and RemoveIPC= are no longer marked as if the service ran as root in
both the bus-backed and --offline paths.

Fixes #40292

Signed-off-by: Shihao Ren <renshihao.rsh@bytedance.com>
3 days agounit-name: introduce "strict" mode for unit name mangling (#42638)
Lennart Poettering [Thu, 25 Jun 2026 15:18:55 +0000 (17:18 +0200)] 
unit-name: introduce "strict" mode for unit name mangling (#42638)

unit_name_mangle_with_suffix() is quite benevolent by default and allows
the unit to "transition" into a different unit type than what's
requested via its suffix argument. For example, calling
unit_name_mangle_with_suffix() with "/foo/bar" as a unit name and
".service" as a suffix would give you "foo-bar.mount", without any
warning or error.

This could then lead to a quite confusing errors in certain situations:
```
~# systemd-run --remain-after-exit --unit /foo/bar true
Failed to start transient service unit: Cannot set property RemainAfterExit, or unknown property.
```
Given we can't change the default behaviour of
unit_name_mangle_with_suffix() as some parts of systemd already depend
on its "benevolence" (like systemctl), let's introduce a new flag -
UNIT_NAME_MANGLE_STRICT - that checks if the mangled/resolved unit
name's suffix matches the requested one and errors out if not.

With the flag used throughout systemd-run's code, the error in the above
case is now a bit more clear:
```
~# build/systemd-run --remain-after-exit --unit /foo/bar true
Path "/foo/bar" resolves to unit type "mount", but "service" is expected as unit.
Failed to mangle unit name: Invalid argument
```
Resolves: #39996

3 days agoFix: network sysupdate (#42745)
Lennart Poettering [Thu, 25 Jun 2026 15:14:59 +0000 (17:14 +0200)] 
Fix: network sysupdate (#42745)

And also some simple and defensive wives

3 days agohomed: fix home_unlocking_finish reporting success as failure
dongshengyuan [Thu, 25 Jun 2026 03:30:25 +0000 (11:30 +0800)] 
homed: fix home_unlocking_finish reporting success as failure

In home_unlocking_finish(), the success path calls operation_result_unref()
with the local variable r and the uninitialized error object. If either
user_record_good_authentication() or home_save_record() fails (both are
logged as "ignoring"), r is left negative and the D-Bus caller receives
an error reply despite the home having been unlocked successfully.

This causes PAM to reject the session even though the home directory is
mounted and accessible.

Fix by passing 0 and NULL — consistent with every other success path in
the file (home_locking_finish(), home_activation_finish(), etc.).

Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com>
3 days agonetworkd/resolved hardening fixes flagged by kres (#42736)
Lennart Poettering [Thu, 25 Jun 2026 15:13:58 +0000 (17:13 +0200)] 
networkd/resolved hardening fixes flagged by kres (#42736)

3 days agotpm2: add SWTPM fallback test, fixes and hardening (#42722)
Lennart Poettering [Thu, 25 Jun 2026 15:13:03 +0000 (17:13 +0200)] 
tpm2: add SWTPM fallback test, fixes and hardening (#42722)

3 days agotest-journal: Test hash chain lookups when the tail is lost 42639/head
Chris Down [Thu, 18 Jun 2026 07:07:13 +0000 (16:07 +0900)] 
test-journal: Test hash chain lookups when the tail is lost

3 days agotest-journal: Test bisecting reads when missing per-data entry array
Chris Down [Wed, 17 Jun 2026 13:12:28 +0000 (21:12 +0800)] 
test-journal: Test bisecting reads when missing per-data entry array

3 days agotest-journal: Test recovery with header more recent than data
Chris Down [Wed, 17 Jun 2026 12:33:04 +0000 (20:33 +0800)] 
test-journal: Test recovery with header more recent than data

3 days agojournal: Tolerate lost tail hash chain nodes
Chris Down [Thu, 18 Jun 2026 07:07:04 +0000 (16:07 +0900)] 
journal: Tolerate lost tail hash chain nodes

The data and field hash table chains have the same problem the previous
commit fixed for entry array chains. New data and field objects are
linked at the tail of their hash bucket by patching the previous tail
object's next_hash_offset in place, so after a crash a persisted
predecessor (or the bucket head) can point at an object whose body never
reached disk.

journal_file_find_data_object_with_hash() and
journal_file_find_field_object_with_hash() walk those chains while
resolving matches, and on -EADDRNOTAVAIL/-EBADMSG from
journal_file_move_to_object() they simply return the error directly.
That propagates up to real_journal_next(), which discards the whole file
from the query.

Give those two lookups the same tolerance: on a read-only file, treat an
unreadable chain node as the end of the bucket chain.

3 days agojournal: Recover filtered journal queries after crash truncated writes
Chris Down [Wed, 17 Jun 2026 11:45:11 +0000 (19:45 +0800)] 
journal: Recover filtered journal queries after crash truncated writes

generic_array_get() which is used for the unfiltered iteration path in
the previous commit treats a chain pointer that resolves past the end of
the file as the end of the chain. In that case, moving to the missing
array object returns -EADDRNOTAVAIL (or -EBADMSG), and it either stops
(going downwards) or steps back to the previous array (going upwards).

However, generic_array_bisect(), which is used for filtered or seeking
reads does not. On -EADDRNOTAVAIL/-EBADMSG from
journal_file_move_to_object(), it instead returns the error directly to
the caller, which propagates out through
sd_journal_next()/sd_journal_previous() and aborts the query.

The per-data entry array chain has the same issue as the global one,
since n_entries and entry_array_offset are (re)written in place as
entries are linked, and thus after a crash they can reference more
arrays than actually reached the disk. That is to say in practical
terms, a journal recovered for reading by the previous commit could
nevertheless still drop matching entries from `journalctl FIELD=value`,
and a seqnum or time seek into the lost region could fail outright.

Let's give generic_array_bisect() the same tolerance generic_array_get()
already has. That is, when moving to an entry array object fails, treat
the chain as ending at the previous array. This means that the result
matches what generic_array_get() would yield for the same file.

3 days agojournal-remote: fix hostname double-free on request_meta() error paths 42733/head
Luca Boccassi [Wed, 24 Jun 2026 12:41:06 +0000 (13:41 +0100)] 
journal-remote: fix hostname double-free on request_meta() error paths

request_handler() owns the hostname var and passes it by value to
request_meta(), which hands it to source_new(), which stores it in
source->importer.name without copying. If build_accept_encoding()
then fails, the hostname var is freed, and then the caller's
_cleanup_free_ frees it a second time.

Follow-up for 9ff48d0982fcb97923955685fe9fa4e0e67cb238

3 days agojournal-gatewayd: fix signed overflow in n_skip handling
Luca Boccassi [Wed, 24 Jun 2026 12:39:33 +0000 (13:39 +0100)] 
journal-gatewayd: fix signed overflow in n_skip handling

request_reader_entries() negated m->n_skip in signed context before
casting to uint64_t, which is undefined behaviour for
n_skip == INT64_MIN.

Follow-up for 77ad3b93de65c27cc82dbccc7d336c3aff768c77
Follow-up for a7bfb9f76b96888d60b4f287f29dcbf758ba34c0

3 days agomkosi: update mkosi ref to f7762b71437227922a367bb89597843c77494ef9
Luca Boccassi [Thu, 25 Jun 2026 08:26:23 +0000 (09:26 +0100)] 
mkosi: update mkosi ref to f7762b71437227922a367bb89597843c77494ef9

f7762b7143 sandbox: Preserve net caps across user namespace before unsharing net
582eadee34 Revert "Put build history into the output directory"
5ef262bc53 action: don't fail if apk cannot be downloaded
bdd341ff9b Lock the package cache during package manager invocations
da49fe976c Put build history into the output directory
1c392f1918 tests: Use unique machine names
e4f4026e30 tests: Reduce VM RAM size
de41a5e03e Don't leak gpg-agent when signing with gpg
1bc5d61e1d ci: Pin openSUSE to second-to-last Tumbleweed snapshot
c4d565a009 test: Use the main build's snapshot for extension builds
718b06c866 tests: ignore masked units in check-and-shutdown
0dc5ecbc02 ci: enable postmarketOS in integration testing
d4c6761ad3 action: install apk to /usr/bin
9980f31309 mkosi-vm: add systemd-efistub to postmarketOS config
5640ace38f mkosi.conf: add grub to postmarketOS
6741b440c0 mkosi-initrd: add sulogin, device-mapper to postmarketOS initrd
c3575c035c mkosi-tools: add missing packages to postmarketOS tools tree
0774bc2498 mkosi-tools: add apk-tools to tools trees for Arch and OpenSuSE
| * bb87e48401 curl: Retry on failures
|/
41fea1dd8d dnf: Work around librepo rejecting valid repomd signatures cross-distro
647e3b610b dnf: Proper repository metadata signature requirement
46d907cce2 dnf: Don't skip unavailable repositories during makecache
a91e89c3b7 run_locale_gen: noop if output_format is confext
30329e401b tests: Make integration tests runnable locally
be549f04db config: Don't propagate $MKOSI_DNF when using a tools tree
42ed648981 build(deps): bump actions/upload-artifact from 7.0.0 to 7.0.1
fd5eedd62b build(deps): bump aws-actions/configure-aws-credentials
86733c703d tree: check for root when copying SELinux attributes as well
de2256f8fe Skip security.ima xattrs when copying tree as non-root
| * 08ebf6d678 vmspawn: Exclude secure-boot unless requested
|/
1d3c51e36d obs workflow: do not build aarch64/i586

3 days agohomectl: retry DeactivateHome on transient busy errors
Luca Boccassi [Fri, 8 May 2026 13:21:33 +0000 (14:21 +0100)] 
homectl: retry DeactivateHome on transient busy errors

When 'homectl deactivate' is called immediately after a preceding
operation, the umount inside systemd-homework can fail with EBUSY
because something briefly holds a reference to the home mount (e.g. a
concurrent inspect). systemd-homed already handles this gracefully
by moving the home into the 'lingering' state and retrying deactivation
after 15 seconds, but the bus reply for the original DeactivateHome
call returns the org.freedesktop.home1.HomeBusy error immediately,
which makes TEST-46-HOMED flaky.

Fix homectl to follow homed and retry for up to 30 seconds on HomeBusy
and add a test case trying to make the issue more reproducible.

3 days agoshared/tpm2-util: use a define instead of a const static variable
Zbigniew Jędrzejewski-Szmek [Thu, 25 Jun 2026 08:59:28 +0000 (10:59 +0200)] 
shared/tpm2-util: use a define instead of a const static variable

Let's do the standard thing. The 'static const' variable requires space
and less efficient code (moving from memory instead of a const insertion).
This doesn't matter much, but let's follow the standard pattern.

Follow-up for 93e9c2c974f13a189524bf12d0e3a921431090fa.

3 days agoFix: core fixes (#42744)
Zbigniew Jędrzejewski-Szmek [Thu, 25 Jun 2026 12:39:53 +0000 (14:39 +0200)] 
Fix: core fixes (#42744)

Some simple code fixes

3 days agoCouple of hardening changes for utils flagged by kres (#42732)
Zbigniew Jędrzejewski-Szmek [Thu, 25 Jun 2026 12:31:35 +0000 (14:31 +0200)] 
Couple of hardening changes for utils flagged by kres (#42732)

3 days agotpm2: re-manufacture software TPM when state dir is incomplete 42722/head
Paul Meyer [Tue, 23 Jun 2026 14:07:34 +0000 (16:07 +0200)] 
tpm2: re-manufacture software TPM when state dir is incomplete

setup_swtpm() decided whether a software TPM had already been
manufactured by checking whether the state directory was empty. But
manufacture_swtpm() writes swtpm's config files before forking
swtpm_setup, so an interrupted manufacture leaves the directory
non-empty yet without a usable TPM. The next boot then mistook it for a
complete TPM and started swtpm against a broken state directory.

Keying off a swtpm state file like tpm2-00.permall is no better, as
swtpm_setup gives no guarantee any single one is written atomically or
last. Instead, have manufacture_swtpm() write a marker (.manufactured)
as its very last step, once swtpm_setup has exited successfully, and
gate on it: re-manufacture when it is missing in the initrd, and refuse
rather than start a broken TPM outside it.

Signed-off-by: Paul Meyer <katexochen0@gmail.com>
3 days agotpm2: write swtpm config files atomically via the state directory fd
Paul Meyer [Wed, 24 Jun 2026 06:58:10 +0000 (08:58 +0200)] 
tpm2: write swtpm config files atomically via the state directory fd

Open the swtpm state directory once and write the three config files
relative to that fd with WRITE_STRING_FILE_ATOMIC, rather than by path
with a plain truncating write. Writing atomically ensures a crash or a
concurrent reader never observes a half-written config file, and
operating through a single directory fd lets later steps reuse it.

Signed-off-by: Paul Meyer <katexochen0@gmail.com>
3 days agofileio: add write_string_filef_at()
Paul Meyer [Thu, 25 Jun 2026 11:27:21 +0000 (13:27 +0200)] 
fileio: add write_string_filef_at()

Signed-off-by: Paul Meyer <katexochen0@gmail.com>
3 days agoTranslations update from Fedora Weblate (#42749)
Luca Boccassi [Thu, 25 Jun 2026 11:16:52 +0000 (12:16 +0100)] 
Translations update from Fedora Weblate (#42749)

Translations update from [Fedora
Weblate](https://translate.fedoraproject.org) for
[systemd/main](https://translate.fedoraproject.org/projects/systemd/main/).

Current translation status:

![Weblate translation
status](https://translate.fedoraproject.org/widget/systemd/main/horizontal-auto.svg)

3 days agounit-name: introduce "strict" mode for unit name mangling 42638/head
Frantisek Sumsal [Wed, 17 Jun 2026 12:09:43 +0000 (14:09 +0200)] 
unit-name: introduce "strict" mode for unit name mangling

unit_name_mangle_with_suffix() is quite benevolent by default and allows
the unit to "transition" into a different unit type than what's
requested via its suffix argument. For example, calling
unit_name_mangle_with_suffix() with "/foo/bar" as a unit name and
".service" as a suffix would give you "foo-bar.mount", without any
warning or error.

This could then lead to a quite confusing errors in certain situations:

~# systemd-run --remain-after-exit --unit /foo/bar true
Failed to start transient service unit: Cannot set property RemainAfterExit, or unknown property.

Given we can't change the default behaviour of
unit_name_mangle_with_suffix() as some parts of systemd already depend
on its "benevolence" (like systemctl), let's introduce a new flag -
UNIT_NAME_MANGLE_STRICT - that checks if the mangled/resolved unit
name's suffix matches the requested one and errors out if not.

With the flag used throughout systemd-run's code, the error in the above
case is now a bit more clear:

~# build/systemd-run --remain-after-exit --unit /foo/bar true
Path "/foo/bar" resolves to unit type "mount", but "service" is expected as unit.
Failed to mangle unit name: Invalid argument

Resolves: #39996

3 days agopo: Translated using Weblate (Spanish) 42749/head
Fco. Javier F. Serrador [Thu, 25 Jun 2026 10:17:55 +0000 (10:17 +0000)] 
po: Translated using Weblate (Spanish)

Currently translated at 100.0% (286 of 286 strings)

Co-authored-by: Fco. Javier F. Serrador <fserrador@gmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/es/
Translation: systemd/main

3 days agopo: Translated using Weblate (Romanian)
Weblate Translation Memory [Thu, 25 Jun 2026 10:17:55 +0000 (10:17 +0000)] 
po: Translated using Weblate (Romanian)

Currently translated at 89.5% (256 of 286 strings)

Co-authored-by: Weblate Translation Memory <noreply-mt-weblate-translation-memory@weblate.org>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/ro/
Translation: systemd/main

3 days agopo: Translated using Weblate (Romanian)
Petru Rebeja [Thu, 25 Jun 2026 10:17:54 +0000 (10:17 +0000)] 
po: Translated using Weblate (Romanian)

Currently translated at 89.5% (256 of 286 strings)

Co-authored-by: Petru Rebeja <petru@rebeja.eu>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/ro/
Translation: systemd/main

3 days agomachined: allow privileged users to register other users machines (#39042)
Luca Boccassi [Thu, 25 Jun 2026 09:53:04 +0000 (10:53 +0100)] 
machined: allow privileged users to register other users machines (#39042)

Requires https://github.com/polkit-org/polkit/pull/591

3 days agomachined: allow privileged users to register other users machines 39042/head
Luca Boccassi [Fri, 19 Sep 2025 23:49:42 +0000 (00:49 +0100)] 
machined: allow privileged users to register other users machines

If a user is authenticated by polkit as admin then it should be
able to manage any resource on the system.

Follow-up for 119d332d9c2cf1974b235c8d9e4e3ad821cf436a

3 days agopolkit: check if user authenticated as admin
Luca Boccassi [Fri, 19 Sep 2025 23:49:00 +0000 (00:49 +0100)] 
polkit: check if user authenticated as admin

The new polkit will return a new detail regarding a successful
authentication: the actual result type, which we can use to
see whether the user authenticated as admin. This can be used
to grant additional privileges.

3 days agounits: harden systemd-report-sign-plain@.service
Paul Meyer [Wed, 24 Jun 2026 10:43:40 +0000 (12:43 +0200)] 
units: harden systemd-report-sign-plain@.service

Apply sandboxing. The plain backend's needs writable StateDirectory and
/dev/urandom for key generation. The service must stay root (the
private key is root-only), but everything else is locked down.

Signed-off-by: Paul Meyer <katexochen0@gmail.com>
3 days agojournald: bound field length in extra-fields reader
Syed Mohammed Nayyar [Wed, 24 Jun 2026 12:59:35 +0000 (18:29 +0530)] 
journald: bound field length in extra-fields reader

client_context_read_extra_fields() reads a 64-bit field length v from
the per-unit log-extra-fields file. n = sizeof(uint64_t) + v overflows
when v is near UINT64_MAX, so the "left < n" check is bypassed and the
following memchr() scans v bytes past the buffer. Bound v against the
remaining bytes instead, which cannot overflow.

3 days agounit-name: use FLAGS_SET() more
Frantisek Sumsal [Wed, 17 Jun 2026 12:09:19 +0000 (14:09 +0200)] 
unit-name: use FLAGS_SET() more

3 days agouid-range: fix out-of-bounds write in uid_range_partition() 42732/head
Luca Boccassi [Wed, 24 Jun 2026 12:56:37 +0000 (13:56 +0100)] 
uid-range: fix out-of-bounds write in uid_range_partition()

uid_range_partition() filled the grown entries[] buffer backwards in
place. The backward-fill invariant (the write cursor stays above the
read index) only holds when every source entry contributes at least
one partition; an entry with nr < size contributes zero, so the cursor
stalls while the read index keeps descending. A later multi-part
entry's writes then overwrite the still-live zero-part slot, the
corrupted slot is re-read as a one-part entry, and the next
range->entries[--t] underflows.

Add a forward compaction first pass that drops the zero-part entries
before the backward fill.

Follow-up for 025439faaa8c053fab9fd01fb5f45fb819408bc5

Co-Authored-by: Paul Meyer <katexochen0@gmail.com>
3 days agocore: derive restrict-fsaccess initramfs_s_dev offset from skeleton (#42705)
Zbigniew Jędrzejewski-Szmek [Thu, 25 Jun 2026 09:24:28 +0000 (11:24 +0200)] 
core: derive restrict-fsaccess initramfs_s_dev offset from skeleton (#42705)

Fixes #42689.

3 days agodhcp6: reject IA_PD_PREFIX with invalid prefix length 42736/head
Luca Boccassi [Wed, 24 Jun 2026 12:20:56 +0000 (13:20 +0100)] 
dhcp6: reject IA_PD_PREFIX with invalid prefix length

dhcp6_option_parse_ia_pdprefix() validates the lifetimes but never the
prefixlen byte, so a delegated prefix with prefixlen == 0 or > 128 is
stored in the lease and handed over.

RFC 8415 defines the prefix length as 1 to 128, and the send-side
option_append_pd_prefix() already rejects 0, so reject the out-of-range
values on the receive path too.

Follow-up for f8ad4dd45d761d839de49ddff9d7fbf46892c148

3 days agosd-lldp-rx: keep object ref around event callbacks
Luca Boccassi [Wed, 24 Jun 2026 12:53:07 +0000 (13:53 +0100)] 
sd-lldp-rx: keep object ref around event callbacks

If the user callback set via sd_lldp_rx_set_callback() drops the last
reference to the sd_lldp_rx object, trying to use it later does not go
well. Take a ref to keep the objects alive as long as they are needed.

3 days agosystemctl: fix continue placement in clean-or-freeze error handling 42744/head
dongshengyuan [Thu, 25 Jun 2026 08:40:28 +0000 (16:40 +0800)] 
systemctl: fix continue placement in clean-or-freeze error handling

When sd_bus_call() fails, the continue was inside the
'if (ret == EXIT_SUCCESS)' guard, so only the first failure skipped
adding the unit to the job waiter. On the second and subsequent
failures, the unit was still passed to bus_wait_for_units_add_unit()
despite no job being started, causing bus_wait_for_units_run() to
hang indefinitely.

Move continue outside the guard so any failure skips the waiter
registration. The guard still prevents ret from being overwritten by
a later error code.

Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com>
3 days agobasic: add assert() when doing pointer deref
Michael Vogt [Tue, 23 Jun 2026 15:34:18 +0000 (17:34 +0200)] 
basic: add assert() when doing pointer deref

Lennart reminded me in [1] that we need to add assert() in functions
that do pointer access. For the simple `*p` pointer dereferences
we even have an automatic coccinelle script that ensures that as
part of the automatic code checks.

However for deref in the `p->` style this is not supported right
now and adding it to coccinelle is hard because its too slow for
this kind of check. So I created a (slightly messy) tree-sitter
python script to see how many asserts we are currently missing.

This commit is the result of running it over the `src/basic`
dir and fixing the flagged issues. I plan to tidy it up and
add it to the checks too but this is orthogonal to this commit.

[1] https://github.com/systemd/systemd/pull/42360#discussion_r3426964562

3 days agocore: fix fd leak in exec_shared_runtime_deserialize_one
dongshengyuan [Thu, 25 Jun 2026 08:40:05 +0000 (16:40 +0800)] 
core: fix fd leak in exec_shared_runtime_deserialize_one

The userns/netns/ipcns fdpairs were declared as plain int arrays without
_cleanup_close_pair_. If exec_shared_runtime_add() fails (e.g. OOM on
hashmap_ensure_put), the already-opened fds are leaked.

Since exec_shared_runtime_add() uses TAKE_FD on success, the array
entries are reset to -1 after ownership transfer, so adding
_cleanup_close_pair_ is safe and closes the fds only when they were
never consumed.

Signed-off-by: dongshengyuan <dongshengyuan@uniontech.com>
3 days agoAssorted coverity fixes (#42738)
Lennart Poettering [Thu, 25 Jun 2026 08:29:57 +0000 (10:29 +0200)] 
Assorted coverity fixes (#42738)

Coverity is back online, and it's not happy