Author: tfiala Date: Sun Oct 26 16:37:46 2014 New Revision: 220650 URL: http://llvm.org/viewvc/llvm-project?rev=220650&view=rev Log: 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. Modified: lldb/trunk/test/python_api/hello_world/main.c Modified: lldb/trunk/test/python_api/hello_world/main.c URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/hello_world/main.c?rev=220650&r1=220649&r2=220650&view=diff ============================================================================== --- lldb/trunk/test/python_api/hello_world/main.c (original) +++ lldb/trunk/test/python_api/hello_world/main.c Sun Oct 26 16:37:46 2014 @@ -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; _______________________________________________ lldb-commits mailing list lldb-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits