[llvm] [Support] Error if SocketPath is too long (PR #148903)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 15 10:20:30 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-support
Author: Marina Taylor (citymarina)
<details>
<summary>Changes</summary>
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
---
Full diff: https://github.com/llvm/llvm-project/pull/148903.diff
1 Files Affected:
- (modified) llvm/lib/Support/raw_socket_stream.cpp (+8)
``````````diff
diff --git a/llvm/lib/Support/raw_socket_stream.cpp b/llvm/lib/Support/raw_socket_stream.cpp
index fd1c681672138..2296bdba77c87 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((struct sockaddr_un *)NULL)->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
// differentiate between a preexisting file with and without a bound socket
//
``````````
</details>
https://github.com/llvm/llvm-project/pull/148903
More information about the llvm-commits
mailing list