From: Andre Noll Date: Sun, 2 Sep 2007 14:57:15 +0000 (+0200) Subject: net.c: Fix a fd leak in create_local_socket(). X-Git-Tag: v0.2.17~18 X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=commitdiff_plain;h=9503f937af157874ef1ac598a5b6dfe41326a171;hp=007d547044e1d93ca56fd8a61506578e26ccdcb0 net.c: Fix a fd leak in create_local_socket(). The old code leaked the open socket fd in case of errors. --- 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