Commit Graph
91805 Commits
Author SHA1 Message Date
zouge666 07cf0376a8 dissect-image: prevent start+size LBA overflow 2026-09-21 10:10:22 +02:00
Jan Kuparinen e96ff3b5b9 po: Translated using Weblate (Finnish)
Currently translated at 100.0% (286 of 286 strings)

Co-authored-by: Jan Kuparinen <copper_fin@hotmail.com>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/fi/
Translation: systemd/main
2026-09-19 05:16:58 +09:00
Weblate Translation Memory 96347f83cc po: Translated using Weblate (Finnish)
Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 of 286 strings)

po: Translated using Weblate (Finnish)

Currently translated at 100.0% (286 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/fi/
Translation: systemd/main
2026-09-19 05:16:58 +09:00
Anders Jonsson a269dda363 po: Translated using Weblate (Swedish)
Currently translated at 100.0% (286 of 286 strings)

Co-authored-by: Anders Jonsson <anders.jonsson@norsjovallen.se>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/sv/
Translation: systemd/main
2026-09-19 05:16:58 +09:00
Daan De Meyer 477a4c97e0 ci: shorten Claude review comments and raise the bar on re-reviews
The Claude review workflow posted long, padded inline comments, and every
force push produced a fresh batch of new findings on code that had not
changed. Both make authors stop reading the reviews.

Add a comment style section to the prompt that limits each comment to the
problem and the obvious fix, and truncate anything over 1000 characters in
the post job. Track the number of completed reviews and the last reviewed
head in a hidden state line in the tracking comment. Each successful review
narrows the severities that may be posted: everything on the first review,
no nits on the second, and only must-fix findings from the third on. The
post job enforces the policy so it holds even if the model ignores the
prompt, and reviewers are told to range-diff against the previous head and
skip non-must-fix findings on unchanged code. Commenting "@claude review
full" resets the count for that run.
2026-09-18 20:28:35 +02:00
Lennart Poettering 41bf07afe1 man: add missing = 2026-09-18 20:23:00 +02:00
Zbigniew Jędrzejewski-Szmek 4fb9fbd68a man,doc: fix typos (#43766) 2026-09-17 20:41:37 +02:00
Zbigniew Jędrzejewski-Szmek a2b81310af test: give the D-Bus reconnect checks their own integration test (#43776)
`TEST-23-UNIT-FILE.dbus-reconnect.sh` SIGKILLs `dbus.service` three
times. Nothing reconnects to the new broker, so logind keeps running
with `org.freedesktop.login1` unowned for the rest of the boot —
activation can't fix it either, as `dbus-org.freedesktop.login1.service`
is already active, so the job finishes at once and the name never
returns.

That leaks into the subtests after it. `statedir.sh`, the first to start
`user@0.service`, spends 2 × 25 s in user-runtime-dir on logind
properties, and where pam_systemd can't use Varlink (memory-max= & co.
in the PAM stack) it blocks in `CreateSession()` for 2 min, past
user@.service's 90 s TimeoutStartSec — failing, and pointing at a
subtest that has nothing to do with the bus.

Hit this in hyperscale v261.3 release test for centos9:

https://artifacts.dev.testing-farm.io/01c1c68b-da64-4b9e-b163-eb3459aabe79/work-upstreamjejyd7ep/log.txt
2026-09-17 15:38:16 +02:00
Ivan Kruglov d4d31c1859 test: exempt the broker from its start rate limit in TEST-95 2026-09-17 04:51:36 -07:00
Ivan Kruglov 621df84009 test: give the D-Bus reconnect checks their own integration test
Killing the broker is destructive well beyond the units under test: nothing
reconnects to the new one, so logind for instance keeps running with
org.freedesktop.login1 unowned for the rest of the boot. As a subtest of
TEST-23-UNIT-FILE that leaked into everything running after it, and
statedir.sh, the first one to start user@0.service, then spent 25s per logind
property in user-runtime-dir and, where pam_systemd can't use Varlink, blocked
in CreateSession() past user@.service's 90s TimeoutStartSec and failed — with
the failure pointing at a subtest that has nothing to do with the bus.

In its own test the damage dies with the machine.
2026-09-17 04:51:29 -07:00
Daniel Wagenknecht d8b9dacaf9 timedate: use SymlinkFlags enum members for flags
The flags to pass to symlinkat_atomic_full are defined in the
SymlinkFlags enum type. The previous code passed the result of a boolean
check operation directly instead of using flags.

Be explicit about the value to pass instead of relying on true
corresponding to the enum value for the SYMLINK_MAKE_RELATIVE flag.

Signed-off-by: Daniel Wagenknecht <dwagenknecht@emlix.com>
2026-09-17 13:00:17 +02:00
Yu Watanabe b36cf41a89 README.md: fix invalid </br> tags in badge list 2026-09-17 11:49:45 +09:00
Yu Watanabe 24de80f596 docs: fix typos and grammar in NEWS, README and TODO 2026-09-17 11:49:45 +09:00
Yu Watanabe 496712eddc docs: fix typos and grammar in various documents 2026-09-17 11:49:45 +09:00
Yu Watanabe 194c72b37f man: fix parameter controlling activatable names query for sd_bus_list_names()
The second conditional checked "acquired", but the ListActivatableNames
call is governed by the "activatable" argument.
2026-09-17 11:49:45 +09:00
Yu Watanabe 83c4191e25 man: fix inverted -ENODATA description for sd_bus_message_get_reply_cookie()
-ENODATA is returned when the message carries no (reply) cookie, but the
text stated the message "carries a reply cookie field". Say it does not
carry one.
2026-09-17 11:49:45 +09:00
Yu Watanabe 8787df83fe man: several fixlets for documentation of sd_bus_message_read_array()
- It does not accept NUL for type.
- ret_size is zero and ret_ptr is non-NULL when it returns positive.
- Fixed argument names: ptr -> ret_ptr, size -> ret_size.
2026-09-17 11:49:45 +09:00
Yu Watanabe 15bd45d113 man: fix typos and grammar in various man pages 2026-09-17 02:25:12 +09:00
Lennart Poettering b1cb951a6f update TODO 2026-09-16 17:50:03 +02:00
Arian van Putten bb2c842b1f imds: actually default to the build-time IMDS network mode
The imds-network= meson option has never had an effect on the generated
network configuration. It arrived in 168a7f7770 together with the IMDS
generator, which wired IMDS_NETWORK_LOCKED_DEFAULT (turned into
IMDS_NETWORK_DEFAULT by c3e4e8a527) into the generator's
arg_network_mode. But the generator only ever compares that variable
against IMDS_NETWORK_OFF, to decide whether to pull
systemd-imds-early-network.service into the initial transaction, and
"off" is not one of the option's choices. It also never forwards the
mode on to systemd-imds-early-network.service, neither as a command
line switch nor via a drop-in.

85-imds-early.network is written by systemd-imds-early-network.service,
which runs "systemd-imdsd --setup-network", and that code path's
arg_network_mode was left at _IMDS_NETWORK_MODE_INVALID. As
setup_network() requires "!= IMDS_NETWORK_UNLOCKED" before emitting the
"prohibit" routes, the unset sentinel behaves exactly like "locked".

At first that went unnoticed, because the option defaulted to "locked"
as well: the documented default matched the implemented behaviour by
accident, and only "-Dimds-network=unlocked" was quietly ignored.
6240d420d6 ("meson: unlock imds network by default") then flipped the
default by reordering the option's choices, i.e. moved a macro that
nothing consumed. From that point on the default was wrong for
everybody: unless systemd.imds.network= is passed on the kernel command
line, every generated network file locks the IMDS endpoint down, no
matter how the build is configured. ac64b2dfa3 later documented the new
default in man:systemd-imdsd@.service(8) (#42687), which meant the
documentation now described behaviour that does not exist.

In practice this rarely became visible until the previous commit, since
systemd-imdsd --setup-network mostly lost its race against udev and
wrote no network file at all.

Initialize arg_network_mode from IMDS_NETWORK_DEFAULT, the same way
imds-generator.c does. No other code distinguishes the INVALID sentinel
from a real mode; the remaining users compare against IMDS_NETWORK_OFF
and IMDS_NETWORK_UNLOCKED only. The kernel command line still overrides
the build-time default, and the only difference in the generated network
file are the two "prohibit" routes: the fwmark routing table and the
matching routing policy rule are written in either mode, as before.
2026-09-16 12:45:11 +02:00
Arian van Putten 7bd5496bef imds: make DMI device ordering of early network unit effective
systemd-imds-early-network.service carries
After=sys-devices-virtual-dmi-id.device, so that systemd-imdsd
--setup-network sees the IMDS_* properties that udev applies to the DMI
device from hwdb data. Ordering dependencies only take effect if both
units are part of the same transaction though, and nothing ever pulled
the device unit in: the generator hooks the service into
sysinit.target.wants/ only, and the unit sets DefaultDependencies=no.
The ordering was therefore a nop, and the service raced udev's
coldplugging.

When it lost that race the failure was silent: smbios_server_info()
found no IMDS_VENDOR= property, so no endpoint got configured,
cmdline_run() returned EXIT_NOTCONFIGURED, the unit's
SuccessExitStatus=NOTCONFIGURED reported that as success, and no
85-imds-early.network was written at all.

Give the unit the same drop-in we already write for
systemd-imdsd@.service, which adds Wants= in addition to After= for the
device unit, and factor it out into a helper. We only get here once the
DMI device has been found in the hwdb, hence pulling the device unit
into the transaction is safe.

Note that with the race fixed I have yet to see systemd-imdsd actually
work in locked mode: it appears to end up locked out by the "prohibit"
route itself, despite the fwmark bypass. That is a separate issue, and
left for somebody else to look into.
2026-09-16 12:45:11 +02:00
Luca Boccassi f3880debd7 meson: bump version to v262~rc3 2026-09-15 12:25:09 +01:00
Luca Boccassi 745b63fbb0 NEWS: finalize time and place 2026-09-15 12:25:09 +01:00
Luca Boccassi 0bf0584123 NEWS: update contributors list 2026-09-15 12:25:09 +01:00
Luca Boccassi a491517a09 hwdb: update rules 2026-09-15 12:25:09 +01:00
Lennart Poettering e2c84823ed mountpoint-util: improve logging when kernel lacks support for a certain fs type
Inspired by #43752
2026-09-14 16:28:23 +02:00
Lennart Poettering f74b848a17 sysupdate: undo some accidental field renaming (#43707)
This undoes some of the work in #43603 which was a follow-up to #42900
which – unintentionally I'd claim – renamed some JSON fields. Instead of
setting those changes in stone we should undo them.

Not just to not needlessly break compat, but more importantly because
the old names made more sense given the underlying .feature file knobs.
2026-09-14 16:27:49 +02:00
Lennart Poettering f0baee29b3 sysupdate: change "appstream" json prop back to "appStream"
Similar as the previous commit: the field was renamed by accident, and
we should revert to the old name to not break compat needlessly, and
because the old name actually made sense, given the underlying .transfer
file knob is AppStream=
2026-09-14 15:15:58 +02:00
Lennart Poettering f05a0cef9f sysupdate: rename isEnabled to enabled
The "isEnabled" name was changed from "enabled" post v261 by accident
(because a6f7ded859 replaced json
formatting via table formatter to a native json generator which was
introduced for varlink, which changed the names). THis was later made
official in #43603, but it should rather have changed things back to the
original name, in particular as the underling .feature file field
actually is called "Enabled=" and not "IsEnabled=".

We really should take care to generate the same names for Varlink JSON
data as for the data returned by the systemd-sysupdate cli.
a6f7ded859 ensured that, so that's great.
But at the same time I think the varlink names should be adjusted to the
old names, since varlink support for this was just added in this cycle.

Given that v262 is not tagged yet, let's now revert to the old name.
2026-09-14 14:33:33 +02:00
Chris Down 17d46d0442 test: drop unused include from test-parse-util.c (#43757)
Fix clang-tidy regression:

```
../src/test/test-parse-util.c:11:1: error: included header string-util.h is not used directly [misc-include-cleaner,-warnings-as-errors]
   11 | #include "string-util.h"
      | ^~~~~~~~~~~~~~~~~~~~~~~~
   12 | #include "tests.h"
```

Follow-up for efdc4b0cc7
2026-09-14 17:55:21 +08:00
Luca Boccassi 5c1561452f test: drop unused include from test-parse-util.c
Fix clang-tidy regression:

../src/test/test-parse-util.c:11:1: error: included header string-util.h is not used directly [misc-include-cleaner,-warnings-as-errors]
   11 | #include "string-util.h"
      | ^~~~~~~~~~~~~~~~~~~~~~~~
   12 | #include "tests.h"

Follow-up for efdc4b0cc7
2026-09-14 10:31:36 +01:00
Daan De Meyer 15e79c52b7 Fix gpt-auto-generator on usr-only root in presence of sysexts (#43591)
This adds a fallback to `blockdev_get_root`, to handle the case where
`/usr` is a sysext overlay. Additinal changes are:

- move `extension_overlay_block` to `extension-util.h`, and make it
generic to work in both confext and sysext cases (though only sysext is
actually used currently)
- add a usr-only integration test to exercise the failure

Closes #43565.
2026-09-14 09:51:37 +02:00
Cathal Mullan 1f66b52452 nspawn: align config PrivateUsersOwnership default with CLI
The `systemd-nspawn` manpage says:

    The `--private-users-ownership=auto` option is implied if
    `--private-users=pick` is used.

This is true for the CLI, but not when set in a `.nspawn` file.
Assuming these defaults should be the same across both.

This default was also not updated when `managed` was added by #35685.

As a result, this is a change in behavior for users who didn't set an
explicit `PrivateUsersOwnership=` value in their `.nspawn` file.
2026-09-14 08:10:27 +01:00
Chris Down d04aa853bc parse-util: fix ineffective overflow guards in store_loadavg_fixed_point() (#43753)
`store_loadavg_fixed_point()` guarded both of its `<<
LOADAVG_PRECISION_BITS` shifts against overflow, but neither guard was
effective:

- The integer part was rejected with `i >= (~0UL <<
LOADAVG_PRECISION_BITS)`. The shift direction is inverted: that bound is
`0xFFFFFFFFFFFFF800`, so it only rejects the topmost 2048 values of the
range, while the smallest value that actually overflows `i << 11` is
`2^53`. Everything from `2^53` up shifted out of the word and was
accepted.

- The fractional part was shifted first and range-checked afterwards, so
a large `f` wrapped to a small value and then passed the `f >=
LOADAVG_FIXED_POINT_1_0` test.

Concretely, on 64 bit:

```
parse_loadavg_fixed_point("9007199254740992.00", &fp)  ->  0, fp == 0     (load reported as 0.00)
parse_loadavg_fixed_point("1.9007199254740992",  &fp)  ->  0, fp == 1.00
```

Both should be `-ERANGE`. The existing
`ASSERT_ERROR(..."18446744073709551615.5"..., ERANGE)` passes only
because `~0UL` happens to fall inside the narrow band the broken guard
does catch.

Validate both parts before shifting instead. Rejecting `f >= 100` is
exactly equivalent to the old post-shift comparison for every input that
previously succeeded, since `DIV_ROUND_UP(99 << 11, 100) == 2028` and
`DIV_ROUND_UP(100 << 11, 100) == 2048`, so there is no behaviour change
for valid input; only the values that used to wrap are now rejected.

Note this is a latent bug rather than a live one: the only caller of
`parse_loadavg_fixed_point()` is `read_resource_pressure()`, which
parses kernel-generated `/proc/pressure/*` and cgroup `memory.pressure`
files where values are capped at `100.00`, and every direct
`store_loadavg_fixed_point()` caller passes permyriad-derived values
already clamped to 0...10000. Fixing the guards keeps the helper correct
for future callers.

Covered by new cases in `test-parse-util`, including the largest integer
part that must still be accepted (`2^53-1`).
2026-09-14 13:12:39 +08:00
Armaan Sandhu efdc4b0cc7 parse-util: fix ineffective overflow guards in store_loadavg_fixed_point() 2026-09-13 20:27:13 -04:00
Lokesh Patel 5698092294 hwdb: add fuzz override for ASUS ROG Strix SCAR 16 touchpad 2026-09-13 19:11:46 +01:00
Ettore Atalan 0ea1bcb7a9 po: Translated using Weblate (German)
Currently translated at 99.3% (284 of 286 strings)

Co-authored-by: Ettore Atalan <atalanttore@googlemail.com>
Translate-URL: https://translate.fedoraproject.org/projects/systemd/main/de/
Translation: systemd/main
2026-09-13 12:35:54 +01:00
Edvard Jaegtnes 9efeb4b1d4 hwdb: add fuzz override for Dell Precision 7510 ALPS DualPoint TouchPad (#43747)
Recently switched to Linux on my Dell Precision 7510 and noticed a
jittery/shaking effect when scrolling slowly with the touchpad, across
multiple applications.

libinput measure fuzz reported no fuzz value set for the touchpad's
axes, which explains the jitter (sensor noise being read as real
motion). Used libinput measure fuzz --fuzz=28 to generate and apply a
hwdb override, then confirmed scrolling was smooth afterward.

Added a new entry to hwdb/60-evdev.hwdb for this device:

evdev:name:AlpsPS/2 ALPS DualPoint
TouchPad:dmi:*:svnDellInc.*:pnPrecision7510*:

This is the same touchpad family as #34133 (Dell Latitude E7440), which
hit the same symptom and fix — this PR extends the coverage to the
Precision 7510.
2026-09-13 12:32:33 +01:00
Kevin Charpentier b504aa05fd hwdb: ignore duplicate mic mute key on Lenovo ThinkBook 14 G7 ARP
On the ThinkBook 14 G7 ARP (21MV), ideapad-laptop is bound to both the ACPI
device (VPC2004:00) and the WMI device
(8FC0DE0C-B4E4-43FD-B0F3-8871711C1294) at the same time, and both report the
mic mute key into the same input device ("Ideapad extra buttons") a few
milliseconds apart, with different scan codes: 0x8 from the ACPI path and
0x13e from the WMI path.

Userspace applies the toggle twice, so the microphone returns to its previous
state and the key appears not to work at all. Unmapping the WMI scan code
leaves a single event per keypress, and the key then toggles the microphone
reliably, mic mute LED included.

Note this differs from the ThinkBook 16p G5 IRX entry above, where the
duplicate comes from the AT keyboard; here both events originate from
"Ideapad extra buttons" itself.

This was discussed on platform-driver-x86, where the hwdb approach was
suggested in preference to unbinding the WMI driver.
2026-09-12 04:24:53 +09:00
Méven Car ba50cd0583 hwdb: mark Logitech PRO X 2 LIGHTSPEED as headset
The PRO X 2 LIGHTSPEED wireless dongle (046d:0af7) exposes a sound card
that is not detected as a headset, since the model name provides no
usable hint and the device has no usb.ids entry either. UPower then
reports its battery as an audio-device rather than a headset. Add a
quirk so the form factor is reported correctly.
2026-09-12 00:27:08 +09:00
Daan De Meyer 4e4532dd2d core/automount: tear down autofs when the unit vanished across reload (#43705) 2026-09-11 13:36:10 +02:00
Kai Wohlfahrt e8807add48 Fall back to checking sysext backing device
Add a unit test for gpt-auto-generator, that mimics a sysext setup.
2026-09-11 12:24:50 +02:00
KingPointer 52a7574625 docs: clarify ConditionPathExists= semantics (#43724)
## Summary

Clarify `ConditionPathExists=` in `systemd.unit(5)`:

- It checks for any filesystem object (regular file, directory, device
node, FIFO, socket), not only regular files.
- Symbolic links are followed, so a broken symbolic link is not
considered to exist.

Fixes #41900
2026-09-11 12:15:59 +02:00
Martin Pitt bdb302ffe6 core/automount: fail unread queued requests when giving up
When an automount goes away, the tokens we answer are only those we have
read from the pipe. Requests the kernel queued after our last read stayed
blocked: closing the pipe does not wake them, the kernel only notices the
closed pipe and turns the autofs catatonic when yet another request fails
to reach us, and after the lazy unmount no request reaches it anymore. In
the normal stop path that window is one event loop iteration; for an
automount torn down at coldplug it spans the whole reload.

Set the autofs to catatonic state before letting go of it, which fails
everything still queued with ENOENT. Answer the known tokens first:
closing our end of the pipe before that made a racing request flip the
kernel into catatonic mode on its own, which discards the queue and
turns our answers into "token not found" errors.

Signed-off-by: Martin Pitt <martin@amutable.com>
2026-09-11 08:18:43 +02:00
Martin Pitt f65e67ff0f core/automount: tear down autofs when the unit vanished across reload
When an automount unit ceases to exist across daemon-reload (observed:
because a generator no longer emits it), its deserialized state still
makes `automount_coldplug()` pick up the autofs pipe and resume the unit
as waiting/running. But nothing can serve that mount point anymore. The
kernel keeps blocking every process that touches the mount point until
PID 1 answers (which it won't), forever.

To fix this, fail pending requests and unmount the autofs when
coldplugging an automount unit that is not loaded anymore.

Fixes #43700

Signed-off-by: Martin Pitt <martin@amutable.com>
2026-09-11 08:18:43 +02:00
Martin Pitt 4558062cad core/automount: log when pending requests cannot be released
When an automount goes away, answering the requests the kernel already
queued is the only thing that unblocks the processes waiting on them, and
nothing retries it later. If the `EHOSTDOWN` calls fail, it leaves the
requesting processes hung with no trace in the journal.

Log the failures to make this easier to debug. Also move that teardown into
a helper function, the next commit needs it as well.

Signed-off-by: Martin Pitt <martin@amutable.com>
2026-09-11 08:18:43 +02:00
Martin Pitt e2e536224d core/automount: do not abort when there is no autofs to talk to
Releasing the requests the kernel queued goes through `open_ioctl_fd()`, which
asserts on the manager fd for /dev/autofs. That fd stays unset when
`open_dev_autofs()` fails while coldplugging an automount, while the
deserialized pipe and its tokens outlive it.

Report the failure to the caller instead of asserting/crashing PID 1.

Signed-off-by: Martin Pitt <martin@amutable.com>
2026-09-11 08:18:20 +02:00
Kai Wohlfahrt 31584c62d3 get_sysext_overlay_block -> extension_overlay_block
For re-use in systemd-gpt-auto-generator. This also makes it generic
across sysext/confext - no planned use for this, but to avoid confusion
later when someone tries to use it on a confext.
2026-09-10 13:47:22 +02:00
Lennart Poettering aaab1f107c tree-wide: reference UAPI.20 spec that has been published for Varlink now
This updates a couple of links talking about Varlink:

1. anything that refers to specific Varlink concepts now point to the
   UAPI.20 spec

2. More general references to Varlink as a whole point to both the
   varlink.org domain and the spec.
2026-09-10 12:07:06 +01:00
quanyeyang 5199e9618d sd-ndisc: stop solicitations only after an RS and non-zero-lifetime RA
RFC 4861 section 6.3.7 states that a host should send at least one Router
Solicitation even if it receives an unsolicited Router Advertisement
before sending its first solicitation, and should stop soliciting only
after receiving a valid Router Advertisement with a non-zero Router Lifetime.

Keep the RS timer active until both conditions are met, and add a
regression test for a zero-lifetime RA arriving before the initial RS.

Fixes #43205.
2026-09-10 11:53:44 +09:00