Some Linux kernels have a ptrace security feature that prevents a ptracer from
attaching to the inferior if the ptracer is not an ancestor in the process
hierarchy. In the gdb-remote attach tests, the llgs is not a parent of the
inferior, so kernels that protect against this are failing on the attach tests.
This change to the inferior test program checks if the inferior is running on
Linux and has the relevant ptrace flags, and if so, first thing enables a
ptracer that is not part of the parent hierarchy.
http://reviews.llvm.org/D5846
Files:
test/tools/lldb-gdbserver/main.cpp
Index: test/tools/lldb-gdbserver/main.cpp
===================================================================
--- test/tools/lldb-gdbserver/main.cpp
+++ test/tools/lldb-gdbserver/main.cpp
@@ -20,6 +20,10 @@
#include <sys/syscall.h>
#endif
+#if defined(__linux__)
+#include <sys/prctl.h>
+#endif
+
static const char *const RETVAL_PREFIX = "retval:";
static const char *const SLEEP_PREFIX = "sleep:";
static const char *const STDERR_PREFIX = "stderr:";
@@ -206,6 +210,17 @@
int main (int argc, char **argv)
{
+#if defined(__linux__)
+ // Immediately enable any ptracer so that we can allow the stub attach
+ // operation to succeed. Some Linux kernels are locked down so that
+ // only an ancestor can be a ptracer of a process. This disables that
+ // restriction. Without it, attach-related stub tests will fail.
+#if defined(PR_SET_PTRACER) && defined(PR_SET_PTRACER_ANY)
+ const int prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
+ static_cast<void> (prctl_result);
+#endif
+#endif
+
std::vector<pthread_t> threads;
std::unique_ptr<uint8_t[]> heap_array_up;
int return_value = 0;
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits