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] Fix readelf SEGV for >1 files


Hi Roland,

jankratochvil/readelf-twofiles
it seems to be obvious.


Thanks,
Jan


e1c1ceeab0af2ce94e37448fc6ee78275e39862e Mon Sep 17 00:00:00 2001
From: Jan Kratochvil <jan.kratochvil@redhat.com>
Date: Sun, 27 Feb 2011 08:35:50 +0100
Subject: [PATCH] Invalid free() / delete / delete[]
    at 0x4C284F2: realloc (vg_replace_malloc.c:525)
    by 0x41CACB: xrealloc (xmalloc.c:77)
    by 0x40DB4A: notice_listptr (readelf.c:4382)
    by 0x411CF0: attr_callback (readelf.c:5544)
    by 0x4E438B8: dwarf_getattrs (dwarf_getattrs.c:124)
    by 0x412641: print_debug_units (readelf.c:5795)
    by 0x41287F: print_debug_info_section (readelf.c:5842)
    by 0x41651B: print_debug (readelf.c:7033)
    by 0x404910: process_elf_file (readelf.c:704)
    by 0x4041EE: process_dwflmod (readelf.c:532)
    by 0x4E52B17: dwfl_getmodules (dwfl_getmodules.c:103)
    by 0x404480: process_file (readelf.c:602)
  Address 0x60a0f10 is 0 bytes inside a block of size 1,024 free'd
    at 0x4C2756E: free (vg_replace_malloc.c:366)
    by 0x40DA9B: reset_listptr (readelf.c:4365)
    by 0x41656D: print_debug (readelf.c:7040)
    by 0x404910: process_elf_file (readelf.c:704)
    by 0x4041EE: process_dwflmod (readelf.c:532)
    by 0x4E52B17: dwfl_getmodules (dwfl_getmodules.c:103)
    by 0x404480: process_file (readelf.c:602)
    by 0x403774: main (readelf.c:277)

src/
2011-02-27  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* readelf.c (reset_listptr): Clear TABLE->TABLE.

tests/
2011-02-27  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* Makefile.am (TESTS): Add run-readelf-twofiles.sh.
	* run-readelf-twofiles.sh: New file.
---
 src/readelf.c                 |    1 +
 tests/Makefile.am             |    2 +-
 tests/run-readelf-twofiles.sh |   32 ++++++++++++++++++++++++++++++++
 3 files changed, 34 insertions(+), 1 deletions(-)
 create mode 100755 tests/run-readelf-twofiles.sh

diff --git a/src/readelf.c b/src/readelf.c
index b798b5a..956d8bd 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -4363,6 +4363,7 @@ static void
 reset_listptr (struct listptr_table *table)
 {
   free (table->table);
+  table->table = NULL;
   table->n = table->alloc = 0;
 }
 
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 3c37cb3..d0e4246 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -76,7 +76,7 @@ TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \
 	run-addrscopes.sh run-strings-test.sh run-funcscopes.sh \
 	run-find-prologues.sh run-allregs.sh \
 	run-readelf-test1.sh run-readelf-test2.sh run-readelf-test3.sh \
-	run-readelf-test4.sh \
+	run-readelf-test4.sh run-readelf-twofiles.sh \
 	run-native-test.sh run-bug1-test.sh \
 	dwfl-bug-addr-overflow run-addrname-test.sh \
 	dwfl-bug-fd-leak dwfl-bug-report \
diff --git a/tests/run-readelf-twofiles.sh b/tests/run-readelf-twofiles.sh
new file mode 100755
index 0000000..4255587
--- /dev/null
+++ b/tests/run-readelf-twofiles.sh
@@ -0,0 +1,32 @@
+#! /bin/sh
+# Copyright (C) 2011 Red Hat, Inc.
+# This file is part of Red Hat elfutils.
+#
+# Red Hat elfutils 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; version 2 of the License.
+#
+# Red Hat 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 Red Hat elfutils; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
+#
+# Red Hat elfutils is an included package of the Open Invention Network.
+# An included package of the Open Invention Network is a package for which
+# Open Invention Network licensees cross-license their patents.  No patent
+# license is granted, either expressly or impliedly, by designation as an
+# included package.  Should you wish to participate in the Open Invention
+# Network licensing program, please visit www.openinventionnetwork.com
+# <http://www.openinventionnetwork.com>.
+
+. $srcdir/test-subr.sh
+
+testfiles testfile14
+
+testrun >/dev/null ../src/readelf -w testfile14 testfile14
+
+exit 0
-- 
1.7.4.1


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