This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] libelf: elf_getdata should not adjust alignment for SHT_NOBITS sections.


In commit c0748e "libelf: More checking of valid sh_addralign values." we
adjusted bogus alignment of data buffers if they were greater than the
offset of the data in the file. This works OK, except when there is no
data in the file. So make sure to not adjust any NOBITS sections.

Also adds a test that shows the issue and makes sure elflint is called
with --gnu in run-strip-test.sh.

https://bugzilla.redhat.com/show_bug.cgi?id=1303845

Signed-off-by: Mark Wielaard <mjw@redhat.com>
---
 libelf/ChangeLog                     |   5 +++++
 libelf/elf_getdata.c                 |   4 ++--
 tests/ChangeLog                      |  10 ++++++++++
 tests/Makefile.am                    |   5 ++++-
 tests/run-strip-nobitsalign.sh       |  35 +++++++++++++++++++++++++++++++++++
 tests/run-strip-test.sh              |   4 ++--
 tests/testfile-nobitsalign.bz2       | Bin 0 -> 2921 bytes
 tests/testfile-nobitsalign.strip.bz2 | Bin 0 -> 1723 bytes
 8 files changed, 58 insertions(+), 5 deletions(-)
 create mode 100755 tests/run-strip-nobitsalign.sh
 create mode 100755 tests/testfile-nobitsalign.bz2
 create mode 100755 tests/testfile-nobitsalign.strip.bz2

diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index 9536ced..41eaa00 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,8 @@
+2016-02-04  Mark Wielaard  <mjw@redhat.com>
+
+	* elf_getdata.c (__libelf_set_rawdata_wrlock): Don't adjust align
+	for SHT_NOBITS sections.
+
 2016-01-28  Mark Wielaard  <mjw@redhat.com>
 
 	* elf.h: Update from glibc. Add new i386 and x86_64 relocations.
diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c
index 4ec94b9..d1fafbf 100644
--- a/libelf/elf_getdata.c
+++ b/libelf/elf_getdata.c
@@ -1,5 +1,5 @@
 /* Return the next data element from the section after possibly converting it.
-   Copyright (C) 1998-2005, 2006, 2007, 2015 Red Hat, Inc.
+   Copyright (C) 1998-2005, 2006, 2007, 2015, 2016 Red Hat, Inc.
    This file is part of elfutils.
    Written by Ulrich Drepper <drepper@redhat.com>, 1998.
 
@@ -363,7 +363,7 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn)
      at least an ehdr this will only trigger for alignment values > 64
      which should be uncommon.  */
   align = align ?: 1;
-  if (align > offset)
+  if (type != SHT_NOBITS && align > offset)
     align = offset;
   scn->rawdata.d.d_align = align;
   if (elf->class == ELFCLASS32
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 234ae56..defb8ae 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,13 @@
+2016-02-04  Mark Wielaard  <mjw@redhat.com>
+
+	* run-strip-nobitsalign.sh: New test.
+	* testfile-nobitsalign.bz2: New testfile.
+	* testfile-nobitsalign.strip.bz2: Likewise.
+	* Makefile.am (TESTS): Add run-strip-nobitsalign.sh.
+	(EXTRA_DIST): Add run-strip-nobitsalign.sh, testfile-nobitsalign.bz2
+	and testfile-nobitsalign.strip.bz2.
+	* run-strip-test.sh: Add --gnu to elflint calls.
+
 2016-01-13  Mark Wielaard  <mjw@redhat.com>
 
 	* system-elf-libelf-test.c: New test.
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 7b9e108..f3e7c01 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,6 +1,6 @@
 ## Process this file with automake to create Makefile.in
 ##
-## Copyright (C) 1996-2015 Red Hat, Inc.
+## Copyright (C) 1996-2016 Red Hat, Inc.
 ## This file is part of elfutils.
 ##
 ## This file is free software; you can redistribute it and/or modify
@@ -80,6 +80,7 @@ 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-strip-strmerge.sh \
+	run-strip-nobitsalign.sh \
 	run-unstrip-test.sh run-unstrip-test2.sh \
 	run-unstrip-test3.sh run-unstrip-M.sh run-elfstrmerge-test.sh \
 	run-ecp-test.sh run-ecp-test2.sh run-alldts.sh \
@@ -163,6 +164,8 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh \
 	     run-strip-test4.sh run-strip-test5.sh run-strip-test6.sh \
 	     run-strip-test7.sh run-strip-test8.sh run-strip-groups.sh \
 	     run-strip-test9.sh run-strip-test10.sh run-strip-strmerge.sh \
+	     run-strip-nobitsalign.sh \
+	     testfile-nobitsalign.bz2 testfile-nobitsalign.strip.bz2 \
 	     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 \
diff --git a/tests/run-strip-nobitsalign.sh b/tests/run-strip-nobitsalign.sh
new file mode 100755
index 0000000..db9b1d9
--- /dev/null
+++ b/tests/run-strip-nobitsalign.sh
@@ -0,0 +1,35 @@
+#! /bin/sh
+# Copyright (C) Red Hat, Inc., 2016.
+# This file is part of elfutils.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# elfutils is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# static unsigned char buffer[4096] __attribute((aligned (4096)));
+# 
+# char
+# f (int i)
+# {
+#   return buffer[i];
+# }
+# 
+# int
+# main (int argc, char **argv)
+# {
+#   return buffer[argc] == 0;
+# }
+
+original=testfile-nobitsalign
+stripped=testfile-nobitsalign.strip
+
+. $srcdir/run-strip-test.sh
diff --git a/tests/run-strip-test.sh b/tests/run-strip-test.sh
index 43d27e5..42aa988 100755
--- a/tests/run-strip-test.sh
+++ b/tests/run-strip-test.sh
@@ -34,13 +34,13 @@ status=0
 cmp $stripped testfile.temp || status=$?
 
 # Check elflint and the expected result.
-testrun ${abs_top_builddir}/src/elflint -q testfile.temp || status=$?
+testrun ${abs_top_builddir}/src/elflint --gnu -q testfile.temp || status=$?
 
 test -z "$debugfile" || {
 cmp $debugfile testfile.debug.temp || status=$?
 
 # Check elflint and the expected result.
-testrun ${abs_top_builddir}/src/elflint -q -d testfile.debug.temp || status=$?
+testrun ${abs_top_builddir}/src/elflint --gnu -q -d testfile.debug.temp || status=$?
 
 # Now test unstrip recombining those files.
 testrun ${abs_top_builddir}/src/unstrip -o testfile.unstrip testfile.temp testfile.debug.temp
diff --git a/tests/testfile-nobitsalign.bz2 b/tests/testfile-nobitsalign.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..7f0d4249a028e73766908f9ac221174a5b4d33db
GIT binary patch
literal 2921
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
TcR5*om;V=XML1B9E28fIfSNm=

literal 0
HcmV?d00001

diff --git a/tests/testfile-nobitsalign.strip.bz2 b/tests/testfile-nobitsalign.strip.bz2
new file mode 100755
index 0000000000000000000000000000000000000000..f72000cc58e6f469bd817c1f13875153b7e64b93
GIT binary patch
literal 1723
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
RK5oDGyOJrwgn+^LGtj->40Qki

literal 0
HcmV?d00001

-- 
1.8.3.1

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]