core/exec-invoke: socket_fd must be set if any of stdio requests it

This is checked as one of the very first things in exec_invoke(),
hence remove the condition in fixup_input() and the whole
fixup_output().
This commit is contained in:
Mike Yuan
2025-12-17 23:23:22 +00:00
committed by Luca Boccassi
parent c8a6c42e53
commit b34aee0440
+10 -22
View File
@@ -308,7 +308,6 @@ static int acquire_path(const char *path, int flags, mode_t mode) {
static int fixup_input(
const ExecContext *context,
int socket_fd,
bool apply_tty_stdin) {
ExecInput std_input;
@@ -320,23 +319,12 @@ static int fixup_input(
if (exec_input_is_terminal(std_input) && !apply_tty_stdin)
return EXEC_INPUT_NULL;
if (std_input == EXEC_INPUT_SOCKET && socket_fd < 0)
return EXEC_INPUT_NULL;
if (std_input == EXEC_INPUT_DATA && context->stdin_data_size == 0)
return EXEC_INPUT_NULL;
return std_input;
}
static int fixup_output(ExecOutput output, int socket_fd) {
if (output == EXEC_OUTPUT_SOCKET && socket_fd < 0)
return EXEC_OUTPUT_INHERIT;
return output;
}
static int setup_input(
const ExecContext *context,
const ExecParameters *params,
@@ -361,7 +349,7 @@ static int setup_input(
return STDIN_FILENO;
}
i = fixup_input(context, socket_fd, params->flags & EXEC_APPLY_TTY_STDIN);
i = fixup_input(context, params->flags & EXEC_APPLY_TTY_STDIN);
switch (i) {
@@ -445,16 +433,17 @@ static int setup_input(
}
}
static bool can_inherit_stderr_from_stdout(
const ExecContext *context,
ExecOutput o,
ExecOutput e) {
static bool can_inherit_stderr_from_stdout(const ExecContext *context) {
ExecOutput o, e;
assert(context);
/* Returns true, if given the specified STDERR and STDOUT output we can directly dup() the stdout fd to the
* stderr fd */
o = context->std_output;
e = context->std_error;
if (e == EXEC_OUTPUT_INHERIT)
return true;
if (e != o)
@@ -508,12 +497,11 @@ static int setup_output(
return STDERR_FILENO;
}
i = fixup_input(context, socket_fd, params->flags & EXEC_APPLY_TTY_STDIN);
o = fixup_output(context->std_output, socket_fd);
i = fixup_input(context, params->flags & EXEC_APPLY_TTY_STDIN);
o = context->std_output;
if (fileno == STDERR_FILENO) {
ExecOutput e;
e = fixup_output(context->std_error, socket_fd);
ExecOutput e = context->std_error;
/* This expects the input and output are already set up */
@@ -527,7 +515,7 @@ static int setup_output(
return fileno;
/* Duplicate from stdout if possible */
if (can_inherit_stderr_from_stdout(context, o, e)) {
if (can_inherit_stderr_from_stdout(context)) {
r = fd_is_writable(STDOUT_FILENO);
if (r <= 0) {
if (r < 0)