In pty_close() there is no need to remove events associated with
the pty slave as there are none. We also don't need to check for the pty fds being -1 since they are not closed elsewhere and pty_close() is only called if pty_setup() succeeds.
This commit is contained in:
@@ -748,18 +748,14 @@ io_buf_new(int rfd, int wfd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
pty_close(struct sudo_event_base *evbase, struct command_status *cstat)
|
pty_close(struct command_status *cstat)
|
||||||
{
|
{
|
||||||
struct io_buffer *iob;
|
struct io_buffer *iob;
|
||||||
int n;
|
int n;
|
||||||
debug_decl(pty_close, SUDO_DEBUG_EXEC);
|
debug_decl(pty_close, SUDO_DEBUG_EXEC);
|
||||||
|
|
||||||
/* Close the pty slave first so reads from the master don't block. */
|
/* Close the pty slave first so reads from the master don't block. */
|
||||||
if (io_fds[SFD_SLAVE] != -1) {
|
close(io_fds[SFD_SLAVE]);
|
||||||
ev_free_by_fd(evbase, io_fds[SFD_SLAVE]);
|
|
||||||
close(io_fds[SFD_SLAVE]);
|
|
||||||
io_fds[SFD_SLAVE] = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Flush any remaining output (the plugin already got it). */
|
/* Flush any remaining output (the plugin already got it). */
|
||||||
if (io_fds[SFD_USERTTY] != -1) {
|
if (io_fds[SFD_USERTTY] != -1) {
|
||||||
@@ -790,8 +786,7 @@ pty_close(struct sudo_event_base *evbase, struct command_status *cstat)
|
|||||||
utmp_logout(slavename, cstat->type == CMD_WSTATUS ? cstat->val : 0);
|
utmp_logout(slavename, cstat->type == CMD_WSTATUS ? cstat->val : 0);
|
||||||
|
|
||||||
/* Close pty master. */
|
/* Close pty master. */
|
||||||
if (io_fds[SFD_MASTER] != -1)
|
close(io_fds[SFD_MASTER]);
|
||||||
close(io_fds[SFD_MASTER]);
|
|
||||||
|
|
||||||
debug_return;
|
debug_return;
|
||||||
}
|
}
|
||||||
@@ -1493,7 +1488,7 @@ exec_pty(struct command_details *details, struct command_status *cstat)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Flush any remaining output, free I/O bufs and events, do logout. */
|
/* Flush any remaining output, free I/O bufs and events, do logout. */
|
||||||
pty_close(ec.evbase, cstat);
|
pty_close(cstat);
|
||||||
|
|
||||||
/* Free things up. */
|
/* Free things up. */
|
||||||
free_exec_closure_pty(&ec);
|
free_exec_closure_pty(&ec);
|
||||||
|
Reference in New Issue
Block a user