mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-11-07 15:36:20 -05:00
gnu: elfutils: Work around PTRACE_ATTACH-induced test failures.
* gnu/packages/patches/elfutils-tests-ptrace.patch: New file. * gnu-system.am (dist_patch_DATA): Add it. * gnu/packages/elf.scm (elfutils)[source]: Use it.
This commit is contained in:
parent
9bf3ced06c
commit
cc1e1b38c9
3 changed files with 69 additions and 2 deletions
|
@ -408,6 +408,7 @@ dist_patch_DATA = \
|
|||
gnu/packages/patches/doxygen-tmake.patch \
|
||||
gnu/packages/patches/duplicity-piped-password.patch \
|
||||
gnu/packages/patches/duplicity-test_selection-tmp.patch \
|
||||
gnu/packages/patches/elfutils-tests-ptrace.patch \
|
||||
gnu/packages/patches/eudev-rules-directory.patch \
|
||||
gnu/packages/patches/findutils-absolute-paths.patch \
|
||||
gnu/packages/patches/flashrom-use-libftdi1.patch \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
;;; GNU Guix --- Functional package management for GNU
|
||||
;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2013, 2014, 2015 Ludovic Courtès <ludo@gnu.org>
|
||||
;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
|
||||
;;; Copyright © 2015 Andreas Enge <andreas@enge.fr>
|
||||
;;;
|
||||
|
@ -38,7 +38,9 @@ (define-public elfutils
|
|||
version "/elfutils-" version ".tar.bz2"))
|
||||
(sha256
|
||||
(base32
|
||||
"0w50szymyqvx8g0vkwrvnv17grqxva6x1z9dm9m3i99zg2hr232p"))))
|
||||
"0w50szymyqvx8g0vkwrvnv17grqxva6x1z9dm9m3i99zg2hr232p"))
|
||||
(patches
|
||||
(list (search-patch "elfutils-tests-ptrace.patch")))))
|
||||
(build-system gnu-build-system)
|
||||
|
||||
;; Separate programs because that's usually not what elfutils users want,
|
||||
|
|
64
gnu/packages/patches/elfutils-tests-ptrace.patch
Normal file
64
gnu/packages/patches/elfutils-tests-ptrace.patch
Normal file
|
@ -0,0 +1,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));
|
Loading…
Reference in a new issue