fixathon created this revision.
fixathon added reviewers: clayborg, JDevlieghere, DavidSpickett.
Herald added a project: All.
fixathon requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.
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
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D131294
Files:
lldb/source/Host/common/TCPSocket.cpp
Index: lldb/source/Host/common/TCPSocket.cpp
===================================================================
--- lldb/source/Host/common/TCPSocket.cpp
+++ lldb/source/Host/common/TCPSocket.cpp
@@ -174,7 +174,10 @@
continue;
}
- SetOptionNoDelay();
+ if (-1 == SetOptionNoDelay()) {
+ Close();
+ continue;
+ }
error.Clear();
return error;
@@ -200,15 +203,18 @@
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 @@
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 @@
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());
Index: lldb/source/Host/common/TCPSocket.cpp
===================================================================
--- lldb/source/Host/common/TCPSocket.cpp
+++ lldb/source/Host/common/TCPSocket.cpp
@@ -174,7 +174,10 @@
continue;
}
- SetOptionNoDelay();
+ if (-1 == SetOptionNoDelay()) {
+ Close();
+ continue;
+ }
error.Clear();
return error;
@@ -200,15 +203,18 @@
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 @@
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 @@
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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits