[llvm] 73630d5 - [Support] Error if SocketPath is too long (#148903)

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 16 04:15:26 PDT 2025


Author: Marina Taylor
Date: 2025-07-16T12:15:23+01:00
New Revision: 73630d5e20c8f29aec426954f448079665caf3ab

URL: https://github.com/llvm/llvm-project/commit/73630d5e20c8f29aec426954f448079665caf3ab
DIFF: https://github.com/llvm/llvm-project/commit/73630d5e20c8f29aec426954f448079665caf3ab.diff

LOG: [Support] Error if SocketPath is too long (#148903)

If the path is longer than sockaddr_un's buffer, it will be truncated,
at which point it may become indistinguishable from similar truncated
paths. This will cause `bind` to fail with an "Address already in use"
error. There is some existing code that checks `fs::exists` to catch
these errors, but since `fs::exists` compares the full un-truncated
paths, a too-long path will prevent those checks from working.

rdar://154397133

Added: 
    

Modified: 
    llvm/lib/Support/raw_socket_stream.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Support/raw_socket_stream.cpp b/llvm/lib/Support/raw_socket_stream.cpp
index fd1c681672138..cf51de889deaf 100644
--- a/llvm/lib/Support/raw_socket_stream.cpp
+++ b/llvm/lib/Support/raw_socket_stream.cpp
@@ -119,6 +119,14 @@ ListeningSocket::ListeningSocket(ListeningSocket &&LS)
 Expected<ListeningSocket> ListeningSocket::createUnix(StringRef SocketPath,
                                                       int MaxBacklog) {
 
+  // If SocketPath is too long, the path will be truncated, and there may be
+  // collisions with other truncated addresses that the fs::exists check below
+  // will be unable to detect.
+  if (SocketPath.size() >= sizeof(sockaddr_un::sun_path))
+    return llvm::make_error<StringError>(
+        std::make_error_code(std::errc::filename_too_long),
+        "SocketPath too long");
+
   // Handle instances where the target socket address already exists and
   // 
diff erentiate between a preexisting file with and without a bound socket
   //


        


More information about the llvm-commits mailing list