summaryrefslogtreecommitdiffstats
path: root/lldb/test/python_api
diff options
context:
space:
mode:
authorTodd Fiala <todd.fiala@gmail.com>2014-10-26 21:37:46 +0000
committerTodd Fiala <todd.fiala@gmail.com>2014-10-26 21:37:46 +0000
commitf183754779297d811e3820fad4daa9e6b641a7e4 (patch)
treea82e0d9590b8876668499c319716c3669e63d463 /lldb/test/python_api
parent37ea9315e652f7f6baeb0adcf76a903a75a7c77d (diff)
downloadbcm5719-llvm-f183754779297d811e3820fad4daa9e6b641a7e4.tar.gz
bcm5719-llvm-f183754779297d811e3820fad4daa9e6b641a7e4.zip
Fix HelloWorld attach test for Linux kernels with ptrace ancestor lockdown.
Similar to a recent test I fixed for gdb-remote attach scenarios, this fix is for Linux kernels, such as Ubuntu's stock setup on 11.04-ish and later, where ptrace starts requiring a ptracer to be an ancestor of the inferior to be ptraced. This change checks for Linux and the ptrace-related flags. If they're found, it tries to switch on the "allow any ptracer" mode for the inferior as the first statements in the program. It's a best-effort solution - if the prctl call fails, the failure is ignored, and probably will lead to the test failing. The ptrace security behavior can be modified system-wide, but is outside the scope of the test to address. Hence I went with this particular solution. llvm-svn: 220650
Diffstat (limited to 'lldb/test/python_api')
-rw-r--r--lldb/test/python_api/hello_world/main.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/lldb/test/python_api/hello_world/main.c b/lldb/test/python_api/hello_world/main.c
index dffc8c77b04..31a041ede74 100644
--- a/lldb/test/python_api/hello_world/main.c
+++ b/lldb/test/python_api/hello_world/main.c
@@ -1,6 +1,26 @@
#include <stdio.h>
+#if defined(__linux__)
+#include <sys/prctl.h>
+#endif
+
int main(int argc, char const *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 process 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)
+ int prctl_result;
+
+ // For now we execute on best effort basis. If this fails for
+ // some reason, so be it.
+ prctl_result = prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0);
+ (void) prctl_result;
+#endif
+#endif
+
printf("Hello world.\n"); // Set break point at this line.
if (argc == 1)
return 0;
OpenPOWER on IntegriCloud