executor: don't duplicate FD array to avoid double closing

Just use ExecParam directly, as these are all internal to sd-exec now
anyway. Avoids double close when execution fails after FDs are set up
for inheritance and were already re-arranged.

Fixes https://github.com/systemd/systemd/issues/30412
This commit is contained in:
Luca Boccassi
2023-12-11 15:55:50 +00:00
committed by Luca Boccassi
parent a9235a9488
commit 1eeaa93de3
3 changed files with 45 additions and 37 deletions
+31
View File
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail
# Check that socket FDs are not double closed on error: https://github.com/systemd/systemd/issues/30412
mkdir -p /run/systemd/system
rm -f /tmp/badbin
touch /tmp/badbin
chmod 744 /tmp/badbin
cat >/run/systemd/system/badbin_assert.service <<EOF
[Service]
ExecStart=/tmp/badbin
Restart=never
EOF
cat >/run/systemd/system/badbin_assert.socket <<EOF
[Socket]
ListenStream=@badbin_assert.socket
EOF
systemctl daemon-reload
systemctl start badbin_assert.socket
socat - ABSTRACT-CONNECT:badbin_assert.socket
timeout 10 sh -c 'while systemctl is-active badbin_assert.service; do sleep .5; done'
[[ "$(systemctl show -P ExecMainStatus badbin_assert.service)" == 203 ]]