1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
| | This patch allows us to skip tests that require PTRACE_ATTACH in situations
where PTRACE_ATTACH is only allowed when CAP_SYS_PTRACE is held (i.e., for
root, by default.)
Reported at <https://bugzilla.redhat.com/show_bug.cgi?id=1210966>.
--- elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:38:33.028556235 +0200
+++ elfutils-0.161/tests/run-deleted.sh 2015-04-11 16:46:15.012442185 +0200
@@ -17,6 +17,15 @@
. $srcdir/backtrace-subr.sh
+# Check whether the Yama policy allows us to use PTRACE_ATTACH.
+if [ -f /proc/sys/kernel/yama/ptrace_scope ]
+then
+ if [ `cat /proc/sys/kernel/yama/ptrace_scope` -ne 0 ]
+ then
+ exit 77
+ fi
+fi
+
tempfiles deleted deleted-lib.so
cp -p ${abs_builddir}/deleted ${abs_builddir}/deleted-lib.so .
--- elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:40:20.633461110 +0200
+++ elfutils-0.161/tests/vdsosyms.c 2015-04-11 16:45:06.611866677 +0200
@@ -23,6 +23,8 @@
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
#include <unistd.h>
#include ELFUTILS_HEADER(dwfl)
@@ -68,6 +70,7 @@ module_callback (Dwfl_Module *mod, void
int
main (int argc __attribute__ ((unused)), char **argv __attribute__ ((unused)))
{
+ static const char ptrace_scope_file[] = "/proc/sys/kernel/yama/ptrace_scope";
static char *debuginfo_path;
static const Dwfl_Callbacks proc_callbacks =
{
@@ -76,6 +79,20 @@ main (int argc __attribute__ ((unused)),
.find_elf = dwfl_linux_proc_find_elf,
};
+
+ /* Check whether the Yama policy allows us to use PTRACE_ATTACH. */
+ int ptrace_scope = open (ptrace_scope_file, O_RDONLY);
+ if (ptrace_scope >= 0)
+ {
+ char buf[10];
+ int count = read (ptrace_scope, buf, sizeof buf);
+ assert (count > 0);
+ if (buf[0] != '0')
+ /* We're not allowed, so skip this test. */
+ return 77;
+ close (ptrace_scope);
+ }
+
Dwfl *dwfl = dwfl_begin (&proc_callbacks);
if (dwfl == NULL)
error (2, 0, "dwfl_begin: %s", dwfl_errmsg (-1));
|