[PATCH] spec: Provide default-yama-scope.
by Mark Wielaard
When yama is enabled in the kernel it might be used to filter any user
space access which requires PTRACE_MODE_ATTACH like ptrace attach, access
to /proc/PID/{mem,personality,stack,syscall}, and the syscalls
process_vm_readv and process_vm_writev which are used for interprocess
services, communication and introspection (like synchronisation, signaling,
debugging, tracing and profiling) of processes.
These are precisely the things that libdw dwfl and ebl backends rely on.
So make sure they don't mysteriously fail in such cases by
This is implemented as a separate subpackage that just provides this
functionality so other packages that don't immediately rely on elfutils-libs
can also just Require: default-yama-scope to function properly.
https://bugzilla.redhat.com/show_bug.cgi?id=1209492#c69
Signed-off-by: Mark Wielaard <mjw(a)redhat.com>
---
config/10-default-yama-scope.conf | 35 +++++++++++++++++++++++++++++++++++
config/ChangeLog | 7 +++++++
config/Makefile.am | 4 ++--
config/elfutils.spec.in | 25 +++++++++++++++++++++++++
4 files changed, 69 insertions(+), 2 deletions(-)
create mode 100644 config/10-default-yama-scope.conf
diff --git a/config/10-default-yama-scope.conf b/config/10-default-yama-scope.conf
new file mode 100644
index 0000000..ba78ebd
--- /dev/null
+++ b/config/10-default-yama-scope.conf
@@ -0,0 +1,35 @@
+# When yama is enabled in the kernel it might be used to filter any user
+# space access which requires PTRACE_MODE_ATTACH like ptrace attach, access
+# to /proc/PID/{mem,personality,stack,syscall}, and the syscalls
+# process_vm_readv and process_vm_writev which are used for interprocess
+# services, communication and introspection (like synchronisation, signaling,
+# debugging, tracing and profiling) of processes.
+#
+# Usage of ptrace attach is restricted by normal user permissions. Normal
+# unprivileged processes cannot interact through ptrace with processes
+# that they cannot send signals to or processes that are running set-uid
+# or set-gid.
+#
+# yama ptrace scope can be used to reduce these permissions even more.
+# This should normally not be done because it will break various programs
+# relying on the default ptrace security restrictions. But can be used
+# if you don't have any other way to separate processes in their own
+# domains. A different way to restrict ptrace is to set the selinux
+# deny_ptrace boolean. Both mechanisms will break some programs relying
+# on the ptrace system call and might force users to elevate their
+# priviliges to root to do their work.
+#
+# For more information see Documentation/security/Yama.txt in the kernel
+# sources. Which also describes the defaults when CONFIG_SECURITY_YAMA
+# is enabled in a kernel build (currently 1 for ptrace_scope).
+#
+# This runtime kernel parameter can be set to the following options:
+# (Note that setting this to anything except zero will break programs!)
+#
+# 0 - Default attach security permissions.
+# 1 - Restricted attach. Only child processes plus normal permissions.
+# 2 - Admin-only attach. Only executables with CAP_SYS_PTRACE.
+# 3 - No attach. No process may call ptrace at all. Irrevocable.
+#
+kernel.yama.ptrace_scope = 0
+
diff --git a/config/ChangeLog b/config/ChangeLog
index 00f3ddc..31eeca7 100644
--- a/config/ChangeLog
+++ b/config/ChangeLog
@@ -1,3 +1,10 @@
+2015-08-04 Mark Wielaard <mjw(a)redhat.com>
+
+ * 10-default-yama-scope.conf: New file.
+ * Makefile.am (EXTRA_DIST): Add 10-default-yama-scope.conf.
+ * elfutils.spec.in (Requires): default-yama-scope.
+ (default-yama-scope): New package.
+
2015-06-19 Mark Wielaard <mjw(a)redhat.com>
* elfutils.spec.in: Update for 0.163.
diff --git a/config/Makefile.am b/config/Makefile.am
index 6e61b77..23f7b65 100644
--- a/config/Makefile.am
+++ b/config/Makefile.am
@@ -1,7 +1,7 @@
## Process this file with automake to produce Makefile.in -*-Makefile-*-
## Configure input file for elfutils.
##
-## Copyright (C) 2004, 2005, 2008, 2009, 2011 Red Hat, Inc.
+## Copyright (C) 2004, 2005, 2008, 2009, 2011, 2015 Red Hat, Inc.
## This file is part of elfutils.
##
## This file is free software; you can redistribute it and/or modify
@@ -28,7 +28,7 @@
## the GNU Lesser General Public License along with this program. If
## not, see <http://www.gnu.org/licenses/>.
##
-EXTRA_DIST = elfutils.spec.in known-dwarf.awk
+EXTRA_DIST = elfutils.spec.in known-dwarf.awk 10-default-yama-scope.conf
if MAINTAINER_MODE
$(srcdir)/elfutils.spec.in: $(top_srcdir)/NEWS
diff --git a/config/elfutils.spec.in b/config/elfutils.spec.in
index 5407f1a..e5f6e29 100644
--- a/config/elfutils.spec.in
+++ b/config/elfutils.spec.in
@@ -10,6 +10,7 @@ Obsoletes: libelf libelf-devel
Requires: elfutils-libelf = %{version}-%{release}
Requires: glibc >= 2.7
Requires: libstdc++
+Requires: default-yama-scope
# ExcludeArch: xxx
@@ -97,6 +98,22 @@ Conflicts: libelf-devel
The elfutils-libelf-static package contains the static archive
for libelf.
+%package default-yama-scope
+Summary: Default yama attach scope sysctl setting
+Group: Development/Tools
+License: GPLv2+ or LGPLv3+
+Provides: default-yama-scope
+BuildArch: noarch
+
+%description default-yama-scope
+Yama sysctl setting to enable default attach scope settings
+enabling programs to use ptrace attach, access to
+/proc/PID/{mem,personality,stack,syscall}, and the syscalls
+process_vm_readv and process_vm_writev which are used for
+interprocess services, communication and introspection
+(like synchronisation, signaling, debugging, tracing and
+profiling) of processes.
+
%prep
%setup -q
@@ -121,6 +138,8 @@ chmod +x ${RPM_BUILD_ROOT}%{_prefix}/%{_lib}/elfutils/lib*.so*
rm -f .%{_libdir}/libasm.a
}
+install -Dm0644 config/10-default-yama-scope.conf ${RPM_BUILD_ROOT}%{_sysctldir}/10-default-yama-scope.conf
+
%check
make check
@@ -135,6 +154,9 @@ rm -rf ${RPM_BUILD_ROOT}
%postun libelf -p /sbin/ldconfig
+%post default-yama-scope
+%sysctl_apply 10-default-yama-scope.conf
+
%files
%defattr(-,root,root)
%doc COPYING COPYING-GPLV2 COPYING-LGPLV3 README TODO CONTRIBUTING
@@ -197,6 +219,9 @@ rm -rf ${RPM_BUILD_ROOT}
%files libelf-devel-static
%{_libdir}/libelf.a
+%files default-yama-scope
+%config(noreplace) %{_sysctldir}/10-default-yama-scope.conf
+
%changelog
* Fri Jun 19 2015 Mark Wielaard <mjw(a)redhat.com> 0.163-1
- Bug fixes only, no new features.
--
1.8.3.1
8 years, 8 months
[PATCH] unstrip: Handle debuginfo files with missing SHF_INFO_LINK section flags.
by Mark Wielaard
With GCC 5 there might be a .rela.plt section with SHF_INFO_LINK set.
Buggy binutils objdump might strip it from the section in the debug file.
Ignore such differences for relocation sections and put the flag back
if necessary.
Also improve the error message a little by only discarding the already
matched sections if there is an prelink undo section. Otherwise we will
report all sections as not matching if the file wasn't prelinked instead
of just the non-matching sections.
New testfiles generated by gcc5 and binutils objdump added.
Signed-off-by: Mark Wielaard <mjw(a)redhat.com>
---
src/ChangeLog | 9 +++++++++
src/unstrip.c | 34 ++++++++++++++++++++++++++++-----
tests/ChangeLog | 10 ++++++++++
tests/Makefile.am | 8 ++++++--
tests/run-unstrip-test3.sh | 17 +++++++++++++++++
tests/testfile-info-link.bz2 | Bin 0 -> 2768 bytes
tests/testfile-info-link.debuginfo.bz2 | Bin 0 -> 1844 bytes
tests/testfile-info-link.stripped.bz2 | Bin 0 -> 2422 bytes
8 files changed, 71 insertions(+), 7 deletions(-)
create mode 100755 tests/run-unstrip-test3.sh
create mode 100755 tests/testfile-info-link.bz2
create mode 100755 tests/testfile-info-link.debuginfo.bz2
create mode 100755 tests/testfile-info-link.stripped.bz2
diff --git a/src/ChangeLog b/src/ChangeLog
index 632330c..a0c32fa 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,12 @@
+2015-07-29 Mark Wielaard <mjw(a)redhat.com>
+
+ * unstrip.c (sections_flags_match): New function.
+ (sections_match): Use sections_flags_match.
+ (find_alloc_sections_prelink): Only clear matched sections if there
+ is an undo section.
+ (copy_elided_sections): Add SHF_INFO_LINK to shdr_mem.sh_flags if
+ necessary.
+
2015-06-27 Pino Toscano <toscano.pino(a)tiscali.it>
* src/strings.c: Define MAP_POPULATE if not defined already.
diff --git a/src/unstrip.c b/src/unstrip.c
index 4a8e5fa..8833094 100644
--- a/src/unstrip.c
+++ b/src/unstrip.c
@@ -867,12 +867,28 @@ compare_symbols_output (const void *a, const void *b)
#undef CMP
+/* Return true if the flags of the sections match, ignoring the SHF_INFO_LINK
+ flag if the section contains relocation information. */
+static bool
+sections_flags_match (Elf64_Xword sh_flags1, Elf64_Xword sh_flags2,
+ Elf64_Word sh_type)
+{
+ if (sh_type == SHT_REL || sh_type == SHT_RELA)
+ {
+ sh_flags1 &= ~SHF_INFO_LINK;
+ sh_flags2 &= ~SHF_INFO_LINK;
+ }
+
+ return sh_flags1 == sh_flags2;
+}
+
/* Return true iff the flags, size, and name match. */
static bool
sections_match (const struct section *sections, size_t i,
const GElf_Shdr *shdr, const char *name)
{
- return (sections[i].shdr.sh_flags == shdr->sh_flags
+ return (sections_flags_match (sections[i].shdr.sh_flags, shdr->sh_flags,
+ sections[i].shdr.sh_type)
&& (sections[i].shdr.sh_size == shdr->sh_size
|| (sections[i].shdr.sh_size < shdr->sh_size
&& section_can_shrink (§ions[i].shdr)))
@@ -930,10 +946,6 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab,
struct section *sections,
size_t nalloc, size_t nsections)
{
- /* Clear assignments that might have been bogus. */
- for (size_t i = 0; i < nalloc; ++i)
- sections[i].outscn = NULL;
-
Elf_Scn *undo = NULL;
for (size_t i = nalloc; i < nsections; ++i)
{
@@ -952,6 +964,10 @@ find_alloc_sections_prelink (Elf *debug, Elf_Data *debug_shstrtab,
size_t undo_nalloc = 0;
if (undo != NULL)
{
+ /* Clear assignments that might have been bogus. */
+ for (size_t i = 0; i < nalloc; ++i)
+ sections[i].outscn = NULL;
+
Elf_Data *undodata = elf_rawdata (undo, NULL);
ELF_CHECK (undodata != NULL,
_("cannot read '.gnu.prelink_undo' section: %s"));
@@ -1500,6 +1516,14 @@ more sections in stripped file than debug file -- arguments reversed?"));
shdr_mem.sh_size = sec->shdr.sh_size;
shdr_mem.sh_info = sec->shdr.sh_info;
shdr_mem.sh_link = sec->shdr.sh_link;
+
+ /* Buggy binutils objdump might have stripped the SHF_INFO_LINK
+ put it back if necessary. */
+ if ((sec->shdr.sh_type == SHT_REL || sec->shdr.sh_type == SHT_RELA)
+ && sec->shdr.sh_flags != shdr_mem.sh_flags
+ && (sec->shdr.sh_flags & SHF_INFO_LINK) != 0)
+ shdr_mem.sh_flags |= SHF_INFO_LINK;
+
if (sec->shdr.sh_link != SHN_UNDEF)
shdr_mem.sh_link = ndx_section[sec->shdr.sh_link - 1];
if (shdr_mem.sh_flags & SHF_INFO_LINK)
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 90b9a0a..109a305 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,13 @@
+2015-07-29 Mark Wielaard <mjw(a)redhat.com>
+
+ * run-unstrip-test3.sh: New test.
+ * testfile-info-link.bz2: New file.
+ * testfile-info-link.debuginfo.bz2: Likewise.
+ * testfile-info-link.stripped.bz2: Likewise.
+ * Makefile.am (TESTS): Add run-unstrip-test3.sh.
+ (EXTRA_DIST): Add run-unstrip-test3.sh, testfile-info-link.bz2,
+ testfile-info-link.debuginfo.bz2, testfile-info-link.stripped.bz2.
+
2015-06-27 Pino Toscano <toscano.pino(a)tiscali.it>
* tests/run-deleted.sh: Skip when detecting a not implemented
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 55241c7..62e7b7c 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -78,7 +78,8 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
run-strip-test6.sh run-strip-test7.sh run-strip-test8.sh \
run-strip-test9.sh run-strip-test10.sh \
run-strip-groups.sh run-strip-reloc.sh \
- run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-M.sh \
+ run-unstrip-test.sh run-unstrip-test2.sh \
+ run-unstrip-test3.sh run-unstrip-M.sh \
run-ecp-test.sh run-ecp-test2.sh run-alldts.sh \
run-elflint-test.sh run-elflint-self.sh run-ranlib-test.sh \
run-ranlib-test2.sh run-ranlib-test3.sh run-ranlib-test4.sh \
@@ -161,7 +162,10 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
run-strip-test9.sh run-strip-test10.sh \
run-strip-reloc.sh hello_i386.ko.bz2 hello_x86_64.ko.bz2 \
hello_ppc64.ko.bz2 hello_s390.ko.bz2 hello_aarch64.ko.bz2 \
- run-unstrip-test.sh run-unstrip-test2.sh run-unstrip-M.sh\
+ run-unstrip-test.sh run-unstrip-test2.sh \
+ testfile-info-link.bz2 testfile-info-link.debuginfo.bz2 \
+ testfile-info-link.stripped.bz2 run-unstrip-test3.sh \
+ run-unstrip-M.sh \
run-elflint-self.sh run-ranlib-test.sh run-ranlib-test2.sh \
run-ranlib-test3.sh run-ranlib-test4.sh \
run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
diff --git a/tests/run-unstrip-test3.sh b/tests/run-unstrip-test3.sh
new file mode 100755
index 0000000..5459e72
--- /dev/null
+++ b/tests/run-unstrip-test3.sh
@@ -0,0 +1,17 @@
+# Buggy binutils objdump might strip SHF_INFO_LINK from relocation sections.
+# With gcc5 we might have a .rela.plt section with that flag set.
+#
+# int main()
+# {
+# return 0;
+# }
+#
+# gcc -o testfile-info-link -g testprog.c
+# objcopy --only-keep-debug testfile-info-link testfile-info-link.debuginfo
+# eu-strip --strip-debug -o testfile-info-link.stripped testfile-info-link
+
+original=testfile-info-link
+stripped=testfile-info-link.stripped
+debugfile=testfile-info-link.debuginfo
+
+. $srcdir/run-unstrip-test.sh
diff --git a/tests/testfile-info-link.bz2 b/tests/testfile-info-link.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..073b761433550d72635dfd6462e23faf76e294d6
GIT binary patch
literal 2768
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
Wo7m#F-gF@U#oUoj6eI|5GTwmC!sK88
literal 0
HcmV?d00001
diff --git a/tests/testfile-info-link.debuginfo.bz2 b/tests/testfile-info-link.debuginfo.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..3225d19fef5123667089b509e1f91882bba852e2
GIT binary patch
literal 1844
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
literal 0
HcmV?d00001
diff --git a/tests/testfile-info-link.stripped.bz2 b/tests/testfile-info-link.stripped.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..dcbc9a2b6be7d017751c4234cf45346faaea9d16
GIT binary patch
literal 2422
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
literal 0
HcmV?d00001
--
2.4.3
8 years, 9 months