Changed ProcessGDBRemote to avoid the reserved
port range. Also added a comment indicating that
more work is needed.
<rdar://problem/11580051>
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@160514 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
index 6e8b3c4..6e48482 100644
--- a/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ b/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -11,6 +11,7 @@
#include <errno.h>
#include <spawn.h>
#include <stdlib.h>
+#include <netinet/in.h>
#include <sys/mman.h> // for mmap
#include <sys/stat.h>
#include <sys/types.h>
@@ -80,6 +81,18 @@
static bool rand_initialized = false;
+// TODO Randomly assigning a port is unsafe. We should get an unused
+// ephemeral port from the kernel and make sure we reserve it before passing
+// it to debugserver.
+
+#if defined (__APPLE__)
+#define LOW_PORT (IPPORT_RESERVED)
+#define HIGH_PORT (IPPORT_HIFIRSTAUTO)
+#else
+#define LOW_PORT (1024u)
+#define HIGH_PORT (49151u)
+#endif
+
static inline uint16_t
get_random_port ()
{
@@ -90,7 +103,7 @@
rand_initialized = true;
srand(seed);
}
- return (rand() % (UINT16_MAX - 1000u)) + 1000u;
+ return (rand() % (HIGH_PORT - LOW_PORT)) + LOW_PORT;
}