From 808b84d02d9e58543ac8cde2701dec91a8c237f0 Mon Sep 17 00:00:00 2001 From: Serghei Samsi Date: Thu, 12 Nov 2015 14:00:29 -0500 Subject: 4749 ilbd_run_probe() has several problems with resource releasing Reviewed by: Jason King Reviewed by: Dan McDonald --- usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_hc.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'usr/src') diff --git a/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_hc.c b/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_hc.c index b7d7152a41..83c833738c 100644 --- a/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_hc.c +++ b/usr/src/cmd/cmd-inet/usr.lib/ilbd/ilbd_hc.c @@ -1264,7 +1264,9 @@ static boolean_t ilbd_run_probe(ilbd_hc_srv_t *srv) { posix_spawn_file_actions_t fd_actions; + boolean_t init_fd_actions = B_FALSE; posix_spawnattr_t attr; + boolean_t init_attr = B_FALSE; sigset_t child_sigset; int fds[2]; int fdflags; @@ -1299,10 +1301,12 @@ ilbd_run_probe(ilbd_hc_srv_t *srv) logdebug("ilbd_run_probe: posix_spawn_file_actions_init"); goto cleanup; } + init_fd_actions = B_TRUE; if (posix_spawnattr_init(&attr) != 0) { logdebug("ilbd_run_probe: posix_spawnattr_init"); goto cleanup; } + init_attr = B_TRUE; if (posix_spawn_file_actions_addclose(&fd_actions, fds[0]) != 0) { logdebug("ilbd_run_probe: posix_spawn_file_actions_addclose"); goto cleanup; @@ -1356,7 +1360,6 @@ ilbd_run_probe(ilbd_hc_srv_t *srv) } (void) close(fds[1]); - destroy_argv(child_argv); srv->shc_child_pid = pid; srv->shc_child_fd = fds[0]; srv->shc_ev = probe_ev; @@ -1375,12 +1378,19 @@ ilbd_run_probe(ilbd_hc_srv_t *srv) goto cleanup; } + destroy_argv(child_argv); + (void) posix_spawn_file_actions_destroy(&fd_actions); + (void) posix_spawnattr_destroy(&attr); return (B_TRUE); cleanup: + destroy_argv(child_argv); + if (init_fd_actions == B_TRUE) + (void) posix_spawn_file_actions_destroy(&fd_actions); + if (init_attr == B_TRUE) + (void) posix_spawnattr_destroy(&attr); (void) close(fds[0]); (void) close(fds[1]); - destroy_argv(child_argv); if (probe_ev != NULL) free(probe_ev); return (B_FALSE); -- cgit v1.2.3