From 72bbc27b0fc57136364259a0eaf8cf1a67b5f44c Mon Sep 17 00:00:00 2001 From: Xiang Xiao Date: Mon, 3 Feb 2020 17:16:49 +0800 Subject: [PATCH] Free daemon struct in all telnetd_daemon error path Change-Id: I7f014dc5f327a6ae6adf9cdbea8089ffab2efe37 Signed-off-by: Xiang Xiao --- netutils/telnetd/telnetd_daemon.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/netutils/telnetd/telnetd_daemon.c b/netutils/telnetd/telnetd_daemon.c index 8dd5675fe..3be5b513b 100644 --- a/netutils/telnetd/telnetd_daemon.c +++ b/netutils/telnetd/telnetd_daemon.c @@ -151,9 +151,8 @@ static int telnetd_daemon(int argc, FAR char *argv[]) sa.sa_flags = SA_NOCLDWAIT; if (sigaction(SIGCHLD, &sa, NULL) < 0) { - int errval = errno; - nerr("ERROR: sigaction failed: %d\n", errval); - return -errval; + nerr("ERROR: sigaction failed: %d\n", errno); + goto errout_with_daemon; } /* Block receipt of the SIGCHLD signal */ @@ -162,9 +161,8 @@ static int telnetd_daemon(int argc, FAR char *argv[]) sigaddset(&blockset, SIGCHLD); if (sigprocmask(SIG_BLOCK, &blockset, NULL) < 0) { - int errval = errno; - nerr("ERROR: sigprocmask failed: %d\n", errval); - return -errval; + nerr("ERROR: sigprocmask failed: %d\n", errno); + goto errout_with_daemon; } #endif /* CONFIG_SCHED_HAVE_PARENT */ @@ -173,10 +171,9 @@ static int telnetd_daemon(int argc, FAR char *argv[]) listensd = socket(daemon->family, SOCK_STREAM, 0); if (listensd < 0) { - int errval = errno; nerr("ERROR: socket() failed for family %u: %d\n", - daemon->family, errval); - return -errval; + daemon->family, errno); + goto errout_with_daemon; } /* Set socket to reuse address */ @@ -348,6 +345,7 @@ errout_with_acceptsd: errout_with_socket: close(listensd); +errout_with_daemon: free(daemon); return 1; }