tools: Fix use of fcntl(F_SETFD) during socket activation
commit474a6e64f2c3c17718b853b9d70e054ee8d26f37
authorEric Blake <eblake@redhat.com>
Mon, 20 Apr 2020 17:53:08 +0000 (20 12:53 -0500)
committerEric Blake <eblake@redhat.com>
Mon, 4 May 2020 19:54:35 +0000 (4 14:54 -0500)
tree2cf2b2a0a8e525a7a82a7d2e8c329ef8f0c67672
parent5375af3cd7b8adcc10c18d8083b7be63976c9645
tools: Fix use of fcntl(F_SETFD) during socket activation

Blindly setting FD_CLOEXEC without a read-modify-write will
inadvertently clear any other intentionally-set bits, such as a
proposed new bit for designating a fd that must behave in 32-bit mode.
However, we cannot use our wrapper qemu_set_cloexec(), because that
wrapper intentionally abort()s on failure, whereas the probe here
intentionally tolerates failure to deal with incorrect socket
activation gracefully.  Instead, fix the code to do the proper
read-modify-write.

Signed-off-by: Eric Blake <eblake@redhat.com>
Message-Id: <20200420175309.75894-3-eblake@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
util/systemd.c