]> git.ipfire.org Git - thirdparty/systemd.git/commit - src/core/service.c
pid1: set SYSTEMD_NSS_DYNAMIC_BYPASS=1 env var for dbus-daemon 22552/head
authorLennart Poettering <lennart@poettering.net>
Thu, 17 Feb 2022 13:49:54 +0000 (14:49 +0100)
committerLennart Poettering <lennart@poettering.net>
Fri, 18 Feb 2022 09:49:36 +0000 (10:49 +0100)
commitde90700f36f2126528f7ce92df0b5b5d5e277558
tree7a375df0427f335d1acaaa5da5a4fee065670388
parentcec16155e3dab4f123ba073223477a4ef2cf10f9
pid1: set SYSTEMD_NSS_DYNAMIC_BYPASS=1 env var for dbus-daemon

There's currently a deadlock between PID 1 and dbus-daemon: in some
cases dbus-daemon will do NSS lookups (which are blocking) at the same
time PID 1 synchronously blocks on some call to dbus-daemon. Let's break
that by setting SYSTEMD_NSS_DYNAMIC_BYPASS=1 env var for dbus-daemon,
which will disable synchronously blocking varlink calls from nss-systemd
to PID 1.

In the long run we should fix this differently: remove all synchronous
calls to dbus-daemon from PID 1. This is not trivial however: so far we
had the rule that synchronous calls from PID 1 to the dbus broker are OK
as long as they only go to interfaces implemented by the broke itself
rather than services reachable through it. Given that the relationship
between PID 1 and dbus is kinda special anyway, this was considered
acceptable for the sake of simplicity, since we quite often need
metadata about bus peers from the broker, and the asynchronous logic
would substantially complicate even the simplest method handlers.

This mostly reworks the existing code that sets SYSTEMD_NSS_BYPASS_BUS=
(which is a similar hack to deal with deadlocks between nss-systemd and
dbus-daemon itself) to set SYSTEMD_NSS_DYNAMIC_BYPASS=1 instead. No code
was checking SYSTEMD_NSS_BYPASS_BUS= anymore anyway, and it used to
solve a similar problem, hence it's an obvious piece of code to rework
like this.

Issue originally tracked down by Lukas Märdian. This patch is inspired
and closely based on his patch:

       https://github.com/systemd/systemd/pull/22038

Fixes: #15316
Co-authored-by: Lukas Märdian <slyon@ubuntu.com>
src/core/execute.c
src/core/execute.h
src/core/service.c