[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