diff --git a/execute.c b/execute.c index a82d016cbca..73d82d5a762 100644 --- a/execute.c +++ b/execute.c @@ -342,8 +342,7 @@ static int chown_terminal(int fd, uid_t uid) { if (fstat(fd, &st) < 0) return -errno; - if (st.st_uid != uid || - st.st_mode != TTY_MODE) + if (st.st_uid != uid || (st.st_mode & 0777) != TTY_MODE) return -EPERM; return 0; @@ -834,6 +833,12 @@ int exec_spawn(ExecCommand *command, r = EXIT_USER; goto fail; } + + if (is_terminal_input(context->std_input)) + if (chown_terminal(STDIN_FILENO, uid) < 0) { + r = EXIT_STDIN; + goto fail; + } } if (apply_permissions) @@ -842,12 +847,6 @@ int exec_spawn(ExecCommand *command, goto fail; } - if (is_terminal_input(context->std_input)) - if (chown_terminal(STDIN_FILENO, uid) < 0) { - r = EXIT_STDIN; - goto fail; - } - if (apply_chroot) { if (context->root_directory) if (chroot(context->root_directory) < 0) {