|
|
89645e |
diff -up sudo-1.8.19p2/src/exec.c.iolog-zombie sudo-1.8.19p2/src/exec.c
|
|
|
89645e |
--- sudo-1.8.19p2/src/exec.c.iolog-zombie 2018-05-28 09:01:13.488647060 +0200
|
|
|
89645e |
+++ sudo-1.8.19p2/src/exec.c 2018-05-28 09:01:13.526646940 +0200
|
|
|
89645e |
@@ -534,7 +534,7 @@ sudo_execute(struct command_details *det
|
|
|
89645e |
|
|
|
89645e |
if (log_io) {
|
|
|
89645e |
/* Flush any remaining output and free pty-related memory. */
|
|
|
89645e |
- pty_close(cstat);
|
|
|
89645e |
+ pty_close(ec.evbase,cstat);
|
|
|
89645e |
}
|
|
|
89645e |
|
|
|
89645e |
#ifdef HAVE_SELINUX
|
|
|
89645e |
diff -up sudo-1.8.19p2/src/exec_pty.c.iolog-zombie sudo-1.8.19p2/src/exec_pty.c
|
|
|
89645e |
--- sudo-1.8.19p2/src/exec_pty.c.iolog-zombie 2018-05-28 09:01:13.518646965 +0200
|
|
|
89645e |
+++ sudo-1.8.19p2/src/exec_pty.c 2018-05-28 09:01:13.527646937 +0200
|
|
|
89645e |
@@ -919,12 +919,19 @@ fork_pty(struct command_details *details
|
|
|
89645e |
}
|
|
|
89645e |
|
|
|
89645e |
void
|
|
|
89645e |
-pty_close(struct command_status *cstat)
|
|
|
89645e |
+pty_close(struct sudo_event_base *evbase, struct command_status *cstat)
|
|
|
89645e |
{
|
|
|
89645e |
struct io_buffer *iob;
|
|
|
89645e |
int n;
|
|
|
89645e |
debug_decl(pty_close, SUDO_DEBUG_EXEC);
|
|
|
89645e |
|
|
|
89645e |
+ /* Close the pty slave first so reads from the master don't block. */
|
|
|
89645e |
+ if (io_fds[SFD_SLAVE] != -1) {
|
|
|
89645e |
+ ev_free_by_fd(evbase, io_fds[SFD_SLAVE]);
|
|
|
89645e |
+ close(io_fds[SFD_SLAVE]);
|
|
|
89645e |
+ io_fds[SFD_SLAVE] = -1;
|
|
|
89645e |
+ }
|
|
|
89645e |
+
|
|
|
89645e |
/* Flush any remaining output (the plugin already got it). */
|
|
|
89645e |
if (io_fds[SFD_USERTTY] != -1) {
|
|
|
89645e |
n = fcntl(io_fds[SFD_USERTTY], F_GETFL, 0);
|
|
|
89645e |
@@ -965,6 +972,11 @@ pty_close(struct command_status *cstat)
|
|
|
89645e |
}
|
|
|
89645e |
}
|
|
|
89645e |
utmp_logout(slavename, cstat->type == CMD_WSTATUS ? cstat->val : 0); /* XXX - only if CD_SET_UTMP */
|
|
|
89645e |
+
|
|
|
89645e |
+ /* Close pty master. */
|
|
|
89645e |
+ if (io_fds[SFD_MASTER] != -1)
|
|
|
89645e |
+ close(io_fds[SFD_MASTER]);
|
|
|
89645e |
+
|
|
|
89645e |
debug_return;
|
|
|
89645e |
}
|
|
|
89645e |
|
|
|
89645e |
diff -up sudo-1.8.19p2/src/sudo_exec.h.iolog-zombie sudo-1.8.19p2/src/sudo_exec.h
|
|
|
89645e |
--- sudo-1.8.19p2/src/sudo_exec.h.iolog-zombie 2017-01-14 05:30:15.000000000 +0100
|
|
|
89645e |
+++ sudo-1.8.19p2/src/sudo_exec.h 2018-05-28 09:01:13.527646937 +0200
|
|
|
89645e |
@@ -93,7 +93,7 @@ void handler(int s, siginfo_t *info, voi
|
|
|
89645e |
#else
|
|
|
89645e |
void handler(int s);
|
|
|
89645e |
#endif
|
|
|
89645e |
-void pty_close(struct command_status *cstat);
|
|
|
89645e |
+void pty_close(struct sudo_event_base *evbase, struct command_status *cstat);
|
|
|
89645e |
void pty_setup(uid_t uid, const char *tty, const char *utmp_user);
|
|
|
89645e |
void terminate_command(pid_t pid, bool use_pgrp);
|
|
|
89645e |
|