[Lldb-commits] [lldb] aa4977f - [LLDB][NFC] Reliability fixes to TCPSocket code

Slava Gurevich via lldb-commits lldb-commits at lists.llvm.org
Sat Aug 6 23:07:22 PDT 2022


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());


        


More information about the lldb-commits mailing list