If sources are already pending, sd_event_prepare() calls sd_event_wait(e, 0). Sincefd69f22475this returns 0 when a ratelimit expiry callback was invoked, so that sources re-enabled by the callback are evaluated in the next iteration. However, sd_event_prepare() then returned 0 ("nothing pending"), so sd_event_run() blocked in epoll_wait() forever, as the pending sources never make the epoll fd readable. PID 1 can hit this via the ratelimited mount event source, which hangs the boot, e.g. in the initrd after sysroot.mount. Fix this by remembering in the sd_event object that a ratelimit expiry callback was invoked in this iteration. In that case sd_event_wait() reports the loop as pending, and sd_event_dispatch() returns right away without dispatching anything, so that the caller goes directly for sd_event_prepare() again, and no other callback is dispatched in the same iteration. Add a test that reproduces the issue. Follow-up forfd69f22475. Fixes #44107 (cherry picked from commit 1a60b10de9e4a3fe59a2efa3c6a58fd72c305807)
System and Service Manager
Details
Most documentation is available on systemd's website.
Assorted, older, general information about systemd can be found in the systemd Wiki.
Information about build requirements is provided in the README file.
Consult our NEWS file for information about what's new in the most recent systemd versions.
Please see the Code Map for information about this repository's layout and content.
Please see the Hacking guide for information on how to hack on systemd and test your modifications.
Please see our Contribution Guidelines for more information about filing GitHub Issues and posting GitHub Pull Requests.
When preparing patches for systemd, please follow our Coding Style Guidelines.
If you are looking for support, please contact our mailing list, join our IRC channel #systemd on libera.chat or Matrix channel
Stable branches with backported patches are available in the stable repo.
We have a security bug bounty program sponsored by the Sovereign Tech Fund hosted on YesWeHack
Repositories with distribution packages built from git main are available on OBS, and also repositories with packages built from the latest stable release
