summaryrefslogtreecommitdiffstats
path: root/lldb/tools/debugserver
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2013-03-23 00:44:22 +0000
committerJason Molenda <jmolenda@apple.com>2013-03-23 00:44:22 +0000
commit45461571e77e7dd9c476dd4e40e24fdcfc63918b (patch)
treecdb5b1221beb74441dad7535454645304c16c4a0 /lldb/tools/debugserver
parent130df4b0a42524854388520d9aa2cc210c1f0e7f (diff)
downloadbcm5719-llvm-45461571e77e7dd9c476dd4e40e24fdcfc63918b.tar.gz
bcm5719-llvm-45461571e77e7dd9c476dd4e40e24fdcfc63918b.zip
Change debugserver to open the socket it listens
to in INADDR_LOOPBACK mode by default ("localhost only") instead of INADDR_ANY ("accept connections from any system"). Add a new command line argument to debugserver, --open-connection or -H which will enable the previous behavior. It would be used if you were doing two-system debugging, with lldb running on one system and debugserver running on the other. But it is a less common workflow and should not be the default. <rdar://problem/12583284> llvm-svn: 177790
Diffstat (limited to 'lldb/tools/debugserver')
-rw-r--r--lldb/tools/debugserver/source/RNBSocket.cpp11
-rw-r--r--lldb/tools/debugserver/source/RNBSocket.h2
-rw-r--r--lldb/tools/debugserver/source/debugserver.cpp19
3 files changed, 22 insertions, 10 deletions
diff --git a/lldb/tools/debugserver/source/RNBSocket.cpp b/lldb/tools/debugserver/source/RNBSocket.cpp
index e6c669c0ab1..495c890ed27 100644
--- a/lldb/tools/debugserver/source/RNBSocket.cpp
+++ b/lldb/tools/debugserver/source/RNBSocket.cpp
@@ -31,7 +31,7 @@
This function blocks while waiting for that connection. */
rnb_err_t
-RNBSocket::Listen (in_port_t port, PortBoundCallback callback, const void *callback_baton)
+RNBSocket::Listen (in_port_t port, PortBoundCallback callback, const void *callback_baton, bool localhost_only)
{
//DNBLogThreadedIf(LOG_RNB_COMM, "%8u RNBSocket::%s called", (uint32_t)m_timer.ElapsedMicroSeconds(true), __FUNCTION__);
// Disconnect without saving errno
@@ -56,7 +56,14 @@ RNBSocket::Listen (in_port_t port, PortBoundCallback callback, const void *callb
sa.sin_len = sizeof sa;
sa.sin_family = AF_INET;
sa.sin_port = htons (port);
- sa.sin_addr.s_addr = htonl (INADDR_ANY);
+ if (localhost_only)
+ {
+ sa.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
+ }
+ else
+ {
+ sa.sin_addr.s_addr = htonl (INADDR_ANY);
+ }
int error = ::bind (listen_fd, (struct sockaddr *) &sa, sizeof(sa));
if (error == -1)
diff --git a/lldb/tools/debugserver/source/RNBSocket.h b/lldb/tools/debugserver/source/RNBSocket.h
index be2199d5316..2417d574f2c 100644
--- a/lldb/tools/debugserver/source/RNBSocket.h
+++ b/lldb/tools/debugserver/source/RNBSocket.h
@@ -43,7 +43,7 @@ public:
Disconnect (false);
}
- rnb_err_t Listen (in_port_t port, PortBoundCallback callback, const void *callback_baton);
+ rnb_err_t Listen (in_port_t port, PortBoundCallback callback, const void *callback_baton, bool localhost_only);
rnb_err_t Connect (const char *host, uint16_t port);
rnb_err_t useFD(int fd);
diff --git a/lldb/tools/debugserver/source/debugserver.cpp b/lldb/tools/debugserver/source/debugserver.cpp
index 35918a3aee1..ecafaaf6796 100644
--- a/lldb/tools/debugserver/source/debugserver.cpp
+++ b/lldb/tools/debugserver/source/debugserver.cpp
@@ -684,13 +684,13 @@ PortWasBoundCallback (const void *baton, in_port_t port)
}
static int
-StartListening (RNBRemote *remote, int listen_port, const char *unix_socket_name)
+StartListening (RNBRemote *remote, int listen_port, const char *unix_socket_name, bool localhost_only)
{
if (!remote->Comm().IsConnected())
{
if (listen_port != 0)
RNBLogSTDOUT ("Listening to port %i...\n", listen_port);
- if (remote->Comm().Listen(listen_port, PortWasBoundCallback, unix_socket_name) != rnb_success)
+ if (remote->Comm().Listen(listen_port, PortWasBoundCallback, unix_socket_name, localhost_only) != rnb_success)
{
RNBLogSTDERR ("Failed to get connection from a remote gdb process.\n");
return 0;
@@ -786,6 +786,7 @@ static struct option g_long_options[] =
{ "working-dir", required_argument, NULL, 'W' }, // The working directory that the inferior process should have (only if debugserver launches the process)
{ "platform", required_argument, NULL, 'p' }, // Put this executable into a remote platform mode
{ "unix-socket", required_argument, NULL, 'u' }, // If we need to handshake with our parent process, an option will be passed down that specifies a unix socket name to use
+ { "open-connection", no_argument, NULL, 'H' }, // If debugserver is listening to a TCP port, allow connections from any host (as opposed to just "localhost" connections)
{ NULL, 0, NULL, 0 }
};
@@ -841,6 +842,7 @@ main (int argc, char *argv[])
useconds_t waitfor_interval = 1000; // Time in usecs between process lists polls when waiting for a process by name, default 1 msec.
useconds_t waitfor_duration = 0; // Time in seconds to wait for a process by name, 0 means wait forever.
bool no_stdio = false;
+ bool localhost_only = true;
#if !defined (DNBLOG_ENABLED)
compile_options += "(no-logging) ";
@@ -1080,7 +1082,10 @@ main (int argc, char *argv[])
case 'u':
unix_socket_name.assign (optarg);
break;
-
+
+ case 'H':
+ localhost_only = false;
+ break;
}
}
@@ -1286,7 +1291,7 @@ main (int argc, char *argv[])
#endif
if (listen_port != INT32_MAX)
{
- if (!StartListening (remote, listen_port, unix_socket_name.c_str()))
+ if (!StartListening (remote, listen_port, unix_socket_name.c_str(), localhost_only))
mode = eRNBRunLoopModeExit;
}
else if (str[0] == '/')
@@ -1399,7 +1404,7 @@ main (int argc, char *argv[])
{
if (listen_port != INT32_MAX)
{
- if (!StartListening (remote, listen_port, unix_socket_name.c_str()))
+ if (!StartListening (remote, listen_port, unix_socket_name.c_str(), localhost_only))
mode = eRNBRunLoopModeExit;
}
else if (str[0] == '/')
@@ -1424,7 +1429,7 @@ main (int argc, char *argv[])
{
if (listen_port != INT32_MAX)
{
- if (!StartListening (remote, listen_port, unix_socket_name.c_str()))
+ if (!StartListening (remote, listen_port, unix_socket_name.c_str(), localhost_only))
mode = eRNBRunLoopModeExit;
}
else if (str[0] == '/')
@@ -1451,7 +1456,7 @@ main (int argc, char *argv[])
case eRNBRunLoopModePlatformMode:
if (listen_port != INT32_MAX)
{
- if (!StartListening (remote, listen_port, unix_socket_name.c_str()))
+ if (!StartListening (remote, listen_port, unix_socket_name.c_str(), localhost_only))
mode = eRNBRunLoopModeExit;
}
else if (str[0] == '/')
OpenPOWER on IntegriCloud