diff --git a/conn/bind_std.go b/conn/bind_std.go index f5c88160e..2a1dd7fac 100644 --- a/conn/bind_std.go +++ b/conn/bind_std.go @@ -132,6 +132,7 @@ func listenNet(network string, port int) (*net.UDPConn, int, error) { laddr.String(), ) if err != nil { + conn.Close() return nil, 0, err } return conn.(*net.UDPConn), uaddr.Port, nil diff --git a/ipc/uapi_linux.go b/ipc/uapi_linux.go index fddded0c9..b8cd40690 100644 --- a/ipc/uapi_linux.go +++ b/ipc/uapi_linux.go @@ -74,6 +74,7 @@ func UAPIListen(name string, file *os.File) (net.Listener, error) { uapi.inotifyFd, err = unix.InotifyInit() if err != nil { + listener.Close() return nil, err } @@ -86,11 +87,14 @@ func UAPIListen(name string, file *os.File) (net.Listener, error) { ) if err != nil { + listener.Close() + unix.Close(uapi.inotifyFd) return nil, err } uapi.inotifyRWCancel, err = rwcancel.NewRWCancel(uapi.inotifyFd) if err != nil { + listener.Close() unix.Close(uapi.inotifyFd) return nil, err } diff --git a/ipc/uapi_unix.go b/ipc/uapi_unix.go index dcce1671a..12bb08bfc 100644 --- a/ipc/uapi_unix.go +++ b/ipc/uapi_unix.go @@ -48,11 +48,17 @@ func UAPIOpen(name string) (*os.File, error) { listener, err := net.ListenUnix("unix", addr) if err == nil { - return listener.File() + file, err := listener.File() + if err != nil { + listener.Close() + return nil, err + } + return file, nil } // Test socket, if not in use cleanup and try again. - if _, err := net.Dial("unix", socketPath); err == nil { + if conn, err := net.Dial("unix", socketPath); err == nil { + conn.Close() return nil, errors.New("unix socket in use") } if err := os.Remove(socketPath); err != nil { @@ -62,5 +68,10 @@ func UAPIOpen(name string) (*os.File, error) { if err != nil { return nil, err } - return listener.File() + file, err := listener.File() + if err != nil { + listener.Close() + return nil, err + } + return file, nil }