From 07dca3c4b013bf9de440436142986408b4a3537d Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 8 Jan 2024 18:49:12 +0100 Subject: [PATCH] varlink: turn off O_NONBLOCK in exec: transport If we invoke our own varlink implementation we'll turn on O_NONBLOCK right-away again, hence there is little point in turning it off, however, I generally think we probably should always path this fd as blocking, since that is the default after all, and invoked processes might want to use it like that. Or to see this differently: I think the varlink fd passed for activation in many ways is similar to and as fundamental as stdin/stderr/stdout, hence should probably be synchronous by default. --- src/shared/varlink.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/shared/varlink.c b/src/shared/varlink.c index 2b40c7f3bd..e24da3f893 100644 --- a/src/shared/varlink.c +++ b/src/shared/varlink.c @@ -450,6 +450,10 @@ int varlink_connect_exec(Varlink **ret, const char *_command, char **_argv) { if (socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0, pair) < 0) return log_debug_errno(errno, "Failed to allocate AF_UNIX socket pair: %m"); + r = fd_nonblock(pair[1], false); + if (r < 0) + return log_debug_errno(r, "Failed to disable O_NONBLOCK for varlink socket: %m"); + r = safe_fork_full( "(sd-vlexec)", /* stdio_fds= */ NULL, -- 2.25.1