diff options
author | Mark Wielaard <mjw@redhat.com> | 2015-01-15 13:39:06 +0100 |
---|---|---|
committer | Mark Wielaard <mjw@redhat.com> | 2015-01-16 16:59:46 +0100 |
commit | cc74c21c0de87cc3c7b293234808b3118c4d85db (patch) | |
tree | 1f6e3053e2d38a13d1316a9bd8cf14f864658a78 /tests | |
parent | ddbf23a4594b5a6f1b387b15d42312a203075d80 (diff) | |
download | elfutils-cc74c21c0de87cc3c7b293234808b3118c4d85db.tar.gz |
tests: Make deleted and vdsosyms testcases work with "restricted ptrace".
Some systems might have "restricted ptrace" that doesn't allow process
inspection of arbitrary processes. Change the deleted testcase to
explicitly allow any other process to inspect it using the PR_SET_PTRACER
prctl set to PR_SET_PTRACER_ANY. Change the vdsosyms testcase to inspect
the process itself which should always be allowed.
Reported-by: Anatol Pomozov <anatol.pomozov@gmail.com>
Signed-off-by: Mark Wielaard <mjw@redhat.com>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/ChangeLog | 5 | ||||
-rw-r--r-- | tests/deleted.c | 6 | ||||
-rw-r--r-- | tests/vdsosyms.c | 5 |
3 files changed, 14 insertions, 2 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog index b81e83c1..87a7ce76 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2015-01-15 Mark Wielaard <mjw@redhat.com> + + * deleted.c (main): Call prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY). + * vdsosyms.c (main): Use getpid () instead of getppid (). + 2014-12-27 Mark Wielaard <mjw@redhat.com> * addrscopes.c (handle_address): Last address in scope is highpc - 1. diff --git a/tests/deleted.c b/tests/deleted.c index 32a310b6..d071bf79 100644 --- a/tests/deleted.c +++ b/tests/deleted.c @@ -23,6 +23,7 @@ #include <stdio.h> #include <error.h> #include <errno.h> +#include <sys/prctl.h> extern void libfunc (void); @@ -42,6 +43,11 @@ main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) assert (!err); err = close (2); assert (!err); + /* Make sure eu-stack -p works on this process even with + "restricted ptrace". */ +#ifdef PR_SET_PTRACER_ANY + prctl(PR_SET_PTRACER, PR_SET_PTRACER_ANY, 0, 0, 0); +#endif libfunc (); abort (); } diff --git a/tests/vdsosyms.c b/tests/vdsosyms.c index c1f8d89f..4f12b9a6 100644 --- a/tests/vdsosyms.c +++ b/tests/vdsosyms.c @@ -80,8 +80,9 @@ main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused))) if (dwfl == NULL) error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1)); - /* Take our parent as "arbitrary" process to inspect. */ - pid_t pid = getppid(); + /* Take ourself as "arbitrary" process to inspect. This should work + even with "restricted ptrace". */ + pid_t pid = getpid(); int result = dwfl_linux_proc_report (dwfl, pid); if (result < 0) |