diff options
| author | Todd Fiala <todd.fiala@gmail.com> | 2014-10-26 21:37:46 +0000 |
|---|---|---|
| committer | Todd Fiala <todd.fiala@gmail.com> | 2014-10-26 21:37:46 +0000 |
| commit | f183754779297d811e3820fad4daa9e6b641a7e4 (patch) | |
| tree | a82e0d9590b8876668499c319716c3669e63d463 /lldb/test/python_api | |
| parent | 37ea9315e652f7f6baeb0adcf76a903a75a7c77d (diff) | |
| download | bcm5719-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.c | 20 |
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; |

