Plug a memory leak with ptrace-based intercept.
This commit is contained in:
@@ -533,7 +533,7 @@ free_exec_closure(struct exec_closure *ec)
|
|||||||
debug_decl(free_exec_closure, SUDO_DEBUG_EXEC);
|
debug_decl(free_exec_closure, SUDO_DEBUG_EXEC);
|
||||||
|
|
||||||
/* Free any remaining intercept resources. */
|
/* Free any remaining intercept resources. */
|
||||||
intercept_cleanup();
|
intercept_cleanup(ec);
|
||||||
|
|
||||||
sudo_ev_base_free(ec->evbase);
|
sudo_ev_base_free(ec->evbase);
|
||||||
sudo_ev_free(ec->backchannel_event);
|
sudo_ev_free(ec->backchannel_event);
|
||||||
|
@@ -199,13 +199,19 @@ intercept_connection_close(struct intercept_closure *closure)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
intercept_cleanup(void)
|
intercept_cleanup(struct exec_closure *ec)
|
||||||
{
|
{
|
||||||
debug_decl(intercept_cleanup, SUDO_DEBUG_EXEC);
|
debug_decl(intercept_cleanup, SUDO_DEBUG_EXEC);
|
||||||
|
|
||||||
if (accept_closure != NULL) {
|
if (accept_closure != NULL) {
|
||||||
|
/* DSO-based intercept. */
|
||||||
intercept_connection_close(accept_closure);
|
intercept_connection_close(accept_closure);
|
||||||
accept_closure = NULL;
|
accept_closure = NULL;
|
||||||
|
} else if (ec->intercept != NULL) {
|
||||||
|
/* ptrace-based intercept. */
|
||||||
|
intercept_closure_reset(ec->intercept);
|
||||||
|
free(ec->intercept);
|
||||||
|
ec->intercept = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_return;
|
debug_return;
|
||||||
|
@@ -186,7 +186,7 @@ char **enable_monitor(char *envp[], const char *dso);
|
|||||||
|
|
||||||
/* exec_intercept.c */
|
/* exec_intercept.c */
|
||||||
void *intercept_setup(int fd, struct sudo_event_base *evbase, struct command_details *details);
|
void *intercept_setup(int fd, struct sudo_event_base *evbase, struct command_details *details);
|
||||||
void intercept_cleanup(void);
|
void intercept_cleanup(struct exec_closure *ec);
|
||||||
|
|
||||||
/* exec_iolog.c */
|
/* exec_iolog.c */
|
||||||
bool log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob);
|
bool log_ttyin(const char *buf, unsigned int n, struct io_buffer *iob);
|
||||||
|
Reference in New Issue
Block a user