From 9503f937af157874ef1ac598a5b6dfe41326a171 Mon Sep 17 00:00:00 2001 From: Andre Noll Date: Sun, 2 Sep 2007 16:57:15 +0200 Subject: [PATCH 1/1] net.c: Fix a fd leak in create_local_socket(). The old code leaked the open socket fd in case of errors. --- net.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/net.c b/net.c index cb504f3c..a9708fcb 100644 --- a/net.c +++ b/net.c @@ -394,18 +394,22 @@ int create_local_socket(const char *name, struct sockaddr_un *unix_addr, { int fd, ret; - fd = socket(PF_UNIX, SOCK_STREAM, 0); - if (fd < 0) - return -E_SOCKET; -// unlink(name); ret = init_unix_addr(unix_addr, name); if (ret < 0) return ret; + fd = socket(PF_UNIX, SOCK_STREAM, 0); + if (fd < 0) + return -E_SOCKET; + ret = -E_BIND; if (bind(fd, (struct sockaddr *) unix_addr, UNIX_PATH_MAX) < 0) - return -E_BIND; + goto err; + ret = -E_CHMOD; if (chmod(name, mode) < 0) - return -E_CHMOD; + goto err; return fd; +err: + close(fd); + return ret; } #ifndef HAVE_UCRED -- 2.39.2