Author: Slava Gurevich Date: 2022-08-06T23:06:55-07:00 New Revision: aa4977f2e1354bb5e1937235dd12199839ab0801
URL: https://github.com/llvm/llvm-project/commit/aa4977f2e1354bb5e1937235dd12199839ab0801 DIFF: https://github.com/llvm/llvm-project/commit/aa4977f2e1354bb5e1937235dd12199839ab0801.diff LOG: [LLDB][NFC] Reliability fixes to TCPSocket code Patch the following issues found by static code inspection: - Unchecked return values from lib calls - Passing potentially negative arg into a function that requires non-negative input - Possible socket double-close Differential Revision: https://reviews.llvm.org/D131294 Added: Modified: lldb/source/Host/common/TCPSocket.cpp Removed: ################################################################################ diff --git a/lldb/source/Host/common/TCPSocket.cpp b/lldb/source/Host/common/TCPSocket.cpp index eabc9fef8a661..f424b42db7b64 100644 --- a/lldb/source/Host/common/TCPSocket.cpp +++ b/lldb/source/Host/common/TCPSocket.cpp @@ -174,7 +174,10 @@ Status TCPSocket::Connect(llvm::StringRef name) { continue; } - SetOptionNoDelay(); + if (-1 == SetOptionNoDelay()) { + Close(); + continue; + } error.Clear(); return error; @@ -200,15 +203,18 @@ Status TCPSocket::Listen(llvm::StringRef name, int backlog) { for (SocketAddress &address : addresses) { int fd = Socket::CreateSocket(address.GetFamily(), kType, IPPROTO_TCP, m_child_processes_inherit, error); - if (error.Fail()) + if (error.Fail() || fd < 0) continue; // enable local address reuse int option_value = 1; set_socket_option_arg_type option_value_p = reinterpret_cast<set_socket_option_arg_type>(&option_value); - ::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, option_value_p, - sizeof(option_value)); + if (-1 == ::setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, option_value_p, + sizeof(option_value))) { + CLOSE_SOCKET(fd); + continue; + } SocketAddress listen_address = address; if(!listen_address.IsLocalhost()) @@ -255,8 +261,8 @@ Status TCPSocket::Accept(Socket *&conn_socket) { return error; } - int sock = -1; - int listen_sock = -1; + int sock = kInvalidSocketValue; + int listen_sock = kInvalidSocketValue; lldb_private::SocketAddress AcceptAddr; MainLoop accept_loop; std::vector<MainLoopBase::ReadHandleUP> handles; @@ -288,7 +294,10 @@ Status TCPSocket::Accept(Socket *&conn_socket) { lldb_private::SocketAddress &AddrIn = m_listen_sockets[listen_sock]; if (!AddrIn.IsAnyAddr() && AcceptAddr != AddrIn) { - CLOSE_SOCKET(sock); + if (kInvalidSocketValue != sock) { + CLOSE_SOCKET(sock); + sock = kInvalidSocketValue; + } llvm::errs() << llvm::formatv( "error: rejecting incoming connection from {0} (expecting {1})", AcceptAddr.GetIPAddress(), AddrIn.GetIPAddress()); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits