Update to 0.139
This commit is contained in:
parent
169e650811
commit
5c16b0814a
@ -1 +1 @@
|
||||
elfutils-0.138.tar.bz2
|
||||
elfutils-0.139.tar.bz2
|
||||
|
25
Makefile
25
Makefile
@ -3,6 +3,8 @@
|
||||
NAME := elfutils
|
||||
SPECFILE = elfutils.spec
|
||||
|
||||
all:
|
||||
|
||||
UPSTREAM_CHECKS := sig
|
||||
UPSTREAM_FILES = $(NAME)-$(VERSION).tar.bz2
|
||||
upstream:;
|
||||
@ -28,20 +30,19 @@ ifneq (,$(CURL))
|
||||
CURL += -k
|
||||
endif
|
||||
|
||||
patches := $(patsubst %,elfutils-%.patch,robustify portability)
|
||||
all: $(patches)
|
||||
|
||||
branch-portability = portable
|
||||
branch-master = elfutils-$(VERSION)
|
||||
|
||||
elfutils-base = elfutils-$(VERSION)
|
||||
elfutils-base = master
|
||||
elfutils-%/configure: .git/refs/heads/* Makefile
|
||||
@rm -rf $(@D)
|
||||
git archive --prefix=$(@D)/ $(firstword $(branch-$*) $*) | tar xf -
|
||||
cd $(@D) && autoreconf -i && rm -rf autom4te.cache
|
||||
|
||||
elfutils-%.patch: elfutils-$(VERSION).tar.bz2 Makefile
|
||||
@rm -rf elfutils-master elfutils-$*
|
||||
git archive --prefix=elfutils-master/ $(elfutils-base) \
|
||||
| tar xf -
|
||||
git archive --prefix=elfutils-$*/ $(firstword $(branch-$*) $*) \
|
||||
| tar xf -
|
||||
cd elfutils-master; autoreconf -i; rm -rf autom4te.cache
|
||||
cd elfutils-$*; autoreconf -i; rm -rf autom4te.cache
|
||||
diff -Nrpu elfutils-master elfutils-$* | \
|
||||
elfutils-%.patch: elfutils-master/configure elfutils-%/configure
|
||||
diff --exclude='.gitignore' -Nrpu $(^D) | \
|
||||
filterdiff --remove-timestamps --strip=1 --addprefix=elfutils/ > $@.new
|
||||
mv $@.new $@
|
||||
|
||||
@ -52,7 +53,7 @@ elfutils-portable.spec: elfutils.spec
|
||||
portable-r = 0.$(subst $(DIST),,$(RELEASE))
|
||||
portable-vr = $(VERSION)-$(portable-r)
|
||||
portable.srpm = elfutils-$(portable-vr).src.rpm
|
||||
$(portable.srpm): elfutils-portable.spec elfutils-portability.patch \
|
||||
$(portable.srpm): elfutils-portable.spec $(patches) \
|
||||
elfutils-$(VERSION).tar.bz2
|
||||
$(RPM_WITH_DIRS) --nodeps -bs $<
|
||||
|
||||
|
@ -1,236 +0,0 @@
|
||||
commit ed9d3bc176b3f0318551d9214b1cec4e49197842
|
||||
Author: Roland McGrath <roland@redhat.com>
|
||||
Date: Thu Jan 1 21:22:18 2009 -0800
|
||||
|
||||
Fill gaps and update bookkeeping between all sections, not only before a dirty one.
|
||||
---
|
||||
libelf/ChangeLog | 7 ++
|
||||
libelf/elf32_updatefile.c | 142 +++++++++++++++++++++++++++------------------
|
||||
2 files changed, 93 insertions(+), 56 deletions(-)
|
||||
|
||||
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
|
||||
index 9578f8b..bb487b1 100644
|
||||
--- a/libelf/ChangeLog
|
||||
+++ b/libelf/ChangeLog
|
||||
@@ -1,3 +1,10 @@
|
||||
+2009-01-01 Roland McGrath <roland@redhat.com>
|
||||
+
|
||||
+ * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)):
|
||||
+ Fill gaps and update bookkeeping between all sections,
|
||||
+ not only before a dirty one.
|
||||
+ (__elfw2(LIBELFBITS,updatefile)): Likewise.
|
||||
+
|
||||
2008-12-11 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Handle
|
||||
diff --git a/libelf/elf32_updatefile.c b/libelf/elf32_updatefile.c
|
||||
index e88f4a4..4e170cb 100644
|
||||
--- a/libelf/elf32_updatefile.c
|
||||
+++ b/libelf/elf32_updatefile.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Write changed data structures.
|
||||
- Copyright (C) 2000, 2001, 2002, 2004, 2005, 2006, 2007, 2008 Red Hat, Inc.
|
||||
+ Copyright (C) 2000,2001,2002,2004,2005,2006,2007,2008,2009 Red Hat, Inc.
|
||||
This file is part of Red Hat elfutils.
|
||||
Written by Ulrich Drepper <drepper@redhat.com>, 2000.
|
||||
|
||||
@@ -127,7 +127,6 @@ internal_function
|
||||
__elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
|
||||
{
|
||||
ElfW2(LIBELFBITS,Ehdr) *ehdr;
|
||||
- char *last_position;
|
||||
|
||||
/* We need the ELF header several times. */
|
||||
ehdr = elf->state.ELFW(elf,LIBELFBITS).ehdr;
|
||||
@@ -204,10 +203,11 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
|
||||
|
||||
/* From now on we have to keep track of the last position to eventually
|
||||
fill the gaps with the prescribed fill byte. */
|
||||
- last_position = ((char *) elf->map_address + elf->start_offset
|
||||
- + MAX (elf_typesize (LIBELFBITS, ELF_T_EHDR, 1),
|
||||
- ehdr->e_phoff)
|
||||
- + elf_typesize (LIBELFBITS, ELF_T_PHDR, ehdr->e_phnum));
|
||||
+ char *last_position = ((char *) elf->map_address + elf->start_offset
|
||||
+ + MAX (elf_typesize (LIBELFBITS, ELF_T_EHDR, 1),
|
||||
+ ehdr->e_phoff)
|
||||
+ + elf_typesize (LIBELFBITS,
|
||||
+ ELF_T_PHDR, ehdr->e_phnum));
|
||||
|
||||
/* Write all the sections. Well, only those which are modified. */
|
||||
if (shnum > 0)
|
||||
@@ -278,6 +278,35 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Prepare to write at START, and then update LAST_POSITION.
|
||||
+ If LAST_POSITION was before START, fill in the gap. */
|
||||
+ inline void prepare_position (char *start)
|
||||
+ {
|
||||
+ if (start > last_position)
|
||||
+ {
|
||||
+ /* This code assumes that the data blocks for
|
||||
+ a section are ordered by offset. */
|
||||
+ size_t written = 0;
|
||||
+
|
||||
+ if (last_position < shdr_start)
|
||||
+ {
|
||||
+ written = MIN (start - last_position,
|
||||
+ shdr_start - last_position);
|
||||
+
|
||||
+ memset (last_position, __libelf_fill_byte, written);
|
||||
+ }
|
||||
+
|
||||
+ if (last_position + written != start && shdr_end < start)
|
||||
+ memset (shdr_end, __libelf_fill_byte, start - shdr_end);
|
||||
+ }
|
||||
+
|
||||
+ /* Let it go backward if the sections use a bogus layout with
|
||||
+ overlaps. We'll overwrite the stupid user's section data
|
||||
+ with the latest one, rather than crashing. */
|
||||
+
|
||||
+ last_position = start;
|
||||
+ }
|
||||
+
|
||||
/* Iterate over all the section in the order in which they
|
||||
appear in the output file. */
|
||||
for (size_t cnt = 0; cnt < shnum; ++cnt)
|
||||
@@ -298,38 +327,10 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
|
||||
assert (dl->data.d.d_size <= (shdr->sh_size
|
||||
- (GElf_Off) dl->data.d.d_off));
|
||||
|
||||
+ prepare_position (scn_start + dl->data.d.d_off);
|
||||
+
|
||||
if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
|
||||
{
|
||||
- if (scn_start + dl->data.d.d_off > last_position)
|
||||
- {
|
||||
- /* This code assumes that the data blocks for
|
||||
- a section are ordered by offset. */
|
||||
- size_t written = 0;
|
||||
-
|
||||
- if (last_position < shdr_start)
|
||||
- {
|
||||
- written = MIN (scn_start + dl->data.d.d_off
|
||||
- - last_position,
|
||||
- shdr_start - last_position);
|
||||
-
|
||||
- memset (last_position, __libelf_fill_byte,
|
||||
- written);
|
||||
- }
|
||||
-
|
||||
- if (last_position + written
|
||||
- != scn_start + dl->data.d.d_off
|
||||
- && shdr_end < scn_start + dl->data.d.d_off)
|
||||
- memset (shdr_end, __libelf_fill_byte,
|
||||
- scn_start + dl->data.d.d_off - shdr_end);
|
||||
- }
|
||||
-
|
||||
- /* Let it go backward if the sections use a bogus
|
||||
- layout with overlaps. We'll overwrite the stupid
|
||||
- user's section data with the latest one, rather than
|
||||
- crashing. */
|
||||
-
|
||||
- last_position = scn_start + dl->data.d.d_off;
|
||||
-
|
||||
if (unlikely (change_bo))
|
||||
{
|
||||
#if EV_NUM != 2
|
||||
@@ -362,9 +363,19 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf, int change_bo, size_t shnum)
|
||||
dl = dl->next;
|
||||
}
|
||||
while (dl != NULL);
|
||||
- else if (shdr->sh_type != SHT_NOBITS && scn->index != 0)
|
||||
- /* We have to trust the existing section header information. */
|
||||
- last_position += shdr->sh_size;
|
||||
+ else if (shdr->sh_type != SHT_NOBITS && scn->index != 0
|
||||
+ && shdr->sh_size != 0)
|
||||
+ {
|
||||
+ /* We have to trust the existing section header information.
|
||||
+
|
||||
+ If there are any contents at all, we must be sure we've
|
||||
+ filled in any gap before them, even if it turns out we
|
||||
+ aren't touching the contents after the gap. */
|
||||
+
|
||||
+ prepare_position (scn_start);
|
||||
+
|
||||
+ last_position += shdr->sh_size;
|
||||
+ }
|
||||
|
||||
scn->flags &= ~ELF_F_DIRTY;
|
||||
}
|
||||
@@ -622,31 +633,39 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
|
||||
off_t scn_start = elf->start_offset + shdr->sh_offset;
|
||||
Elf_Data_List *dl = &scn->data_list;
|
||||
|
||||
+ /* Prepare to write at START, and then update LAST_OFFSET.
|
||||
+ If LAST_OFFSET was before START, fill in the gap. */
|
||||
+ inline bool prepare_offset (off_t start)
|
||||
+ {
|
||||
+ if (start > last_offset)
|
||||
+ {
|
||||
+ if (unlikely (fill (elf->fildes, last_offset,
|
||||
+ start - last_offset, fillbuf,
|
||||
+ &filled) != 0))
|
||||
+ return true;
|
||||
+ }
|
||||
+
|
||||
+ /* Let it go backward if the sections use a bogus layout with
|
||||
+ overlaps. We'll overwrite the stupid user's section data
|
||||
+ with the latest one, rather than crashing. */
|
||||
+
|
||||
+ last_offset = start;
|
||||
+
|
||||
+ return false;
|
||||
+ }
|
||||
+
|
||||
if (shdr->sh_type != SHT_NOBITS && scn->data_list_rear != NULL
|
||||
&& scn->index != 0)
|
||||
do
|
||||
{
|
||||
+ if (unlikely (prepare_offset (scn_start + dl->data.d.d_off)))
|
||||
+ return 1;
|
||||
+
|
||||
if ((scn->flags | dl->flags | elf->flags) & ELF_F_DIRTY)
|
||||
{
|
||||
char tmpbuf[MAX_TMPBUF];
|
||||
void *buf = dl->data.d.d_buf;
|
||||
|
||||
- if (scn_start + dl->data.d.d_off > last_offset)
|
||||
- {
|
||||
- if (unlikely (fill (elf->fildes, last_offset,
|
||||
- (scn_start + dl->data.d.d_off)
|
||||
- - last_offset, fillbuf,
|
||||
- &filled) != 0))
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- /* Let it go backward if the sections use a bogus
|
||||
- layout with overlaps. We'll overwrite the stupid
|
||||
- user's section data with the latest one, rather than
|
||||
- crashing. */
|
||||
-
|
||||
- last_offset = scn_start + dl->data.d.d_off;
|
||||
-
|
||||
if (unlikely (change_bo))
|
||||
{
|
||||
#if EV_NUM != 2
|
||||
@@ -696,7 +715,18 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf, int change_bo, size_t shnum)
|
||||
}
|
||||
while (dl != NULL);
|
||||
else if (shdr->sh_type != SHT_NOBITS && scn->index != 0)
|
||||
- last_offset = scn_start + shdr->sh_size;
|
||||
+ {
|
||||
+ /* We have to trust the existing section header information.
|
||||
+
|
||||
+ If there are any contents at all, we must be sure we've
|
||||
+ filled in any gap before them, even if it turns out we
|
||||
+ aren't touching the contents after the gap. */
|
||||
+
|
||||
+ if (shdr->sh_size != 0 && unlikely (prepare_offset (scn_start)))
|
||||
+ return 1;
|
||||
+
|
||||
+ last_offset = scn_start + shdr->sh_size;
|
||||
+ }
|
||||
|
||||
/* Collect the section header table information. */
|
||||
if (unlikely (change_bo))
|
Binary file not shown.
BIN
elfutils-0.139.tar.bz2.sig
Normal file
BIN
elfutils-0.139.tar.bz2.sig
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -1,72 +1,57 @@
|
||||
src/
|
||||
2005-06-09 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* readelf.c (handle_dynamic, handle_symtab): Check for bogus sh_link.
|
||||
(handle_verneed, handle_verdef, handle_versym, handle_hash): Likewise.
|
||||
(handle_scngrp): Check for bogus sh_info.
|
||||
|
||||
* strip.c (handle_elf): Check for bogus values in sh_link, sh_info,
|
||||
st_shndx, e_shstrndx, and SHT_GROUP or SHT_SYMTAB_SHNDX data.
|
||||
Don't use assert on input values, instead bail with "illformed" error.
|
||||
|
||||
2005-05-17 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
libelf/
|
||||
* elf32_getphdr.c (elfw2(LIBELFBITS,getphdr)): Check if program header
|
||||
table fits into object's bounds.
|
||||
* elf_getshstrndx.c (elf_getshstrndx): Add elf->start_offset to
|
||||
elf->map_address. Check if first section header fits into object's
|
||||
bounds.
|
||||
* elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)):
|
||||
Check if section header table fits into object's bounds.
|
||||
* elf_begin.c (get_shnum): Ensure section headers fits into
|
||||
object's bounds.
|
||||
(file_read_elf): Make sure scncnt is small enough to allocate both
|
||||
ElfXX_Shdr and Elf_Scn array. Make sure section and program header
|
||||
tables fit into object's bounds. Avoid memory leak on failure.
|
||||
|
||||
src/
|
||||
* elflint.c (check_hash): Don't check entries beyond end of section.
|
||||
(check_note): Don't crash if gelf_rawchunk fails.
|
||||
(section_name): Return <invalid> if gelf_getshdr returns NULL.
|
||||
|
||||
2005-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
libelf/
|
||||
* libelfP.h (INVALID_NDX): Define.
|
||||
* gelf_getdyn.c (gelf_getdyn): Use it. Remove ndx < 0 test if any.
|
||||
* gelf_getlib.c (gelf_getlib): Likewise.
|
||||
* gelf_getmove.c (gelf_getmove): Likewise.
|
||||
* gelf_getrel.c (gelf_getrel): Likewise.
|
||||
* gelf_getrela.c (gelf_getrela): Likewise.
|
||||
* gelf_getsym.c (gelf_getsym): Likewise.
|
||||
* gelf_getsyminfo.c (gelf_getsyminfo): Likewise.
|
||||
* gelf_getsymshndx.c (gelf_getsymshndx): Likewise.
|
||||
* gelf_getversym.c (gelf_getversym): Likewise.
|
||||
* gelf_update_dyn.c (gelf_update_dyn): Likewise.
|
||||
* gelf_update_lib.c (gelf_update_lib): Likewise.
|
||||
* gelf_update_move.c (gelf_update_move): Likewise.
|
||||
* gelf_update_rel.c (gelf_update_rel): Likewise.
|
||||
* gelf_update_rela.c (gelf_update_rela): Likewise.
|
||||
* gelf_update_sym.c (gelf_update_sym): Likewise.
|
||||
* gelf_update_syminfo.c (gelf_update_syminfo): Likewise.
|
||||
* gelf_update_symshndx.c (gelf_update_symshndx): Likewise.
|
||||
* gelf_update_versym.c (gelf_update_versym): Likewise.
|
||||
* elf_newscn.c (elf_newscn): Check for overflow.
|
||||
* elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Likewise.
|
||||
(__elfw2(LIBELFBITS,updatefile)): Likewise.
|
||||
* elf_begin.c (file_read_elf): Likewise.
|
||||
* elf32_newphdr.c (elfw2(LIBELFBITS,newphdr)): Likewise.
|
||||
* elf_getarsym.c (elf_getarsym): Likewise.
|
||||
* elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)): Likewise.
|
||||
src/
|
||||
* elflint.c (section_name): Return "<invalid>" instead of
|
||||
crashing on invalid section name.
|
||||
(check_symtab, is_rel_dyn, check_rela, check_rel, check_dynamic,
|
||||
check_symtab_shndx, check_hash, check_versym): Robustify.
|
||||
|
||||
--- elfutils-0.136/libelf/elf32_getphdr.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf32_getphdr.c
|
||||
--- elfutils/libelf/ChangeLog
|
||||
+++ elfutils/libelf/ChangeLog
|
||||
@@ -507,6 +507,49 @@
|
||||
If section content hasn't been read yet, do it before looking for the
|
||||
block size. If no section data present, infer size of section header.
|
||||
|
||||
+2005-05-17 Jakub Jelinek <jakub@redhat.com>
|
||||
+
|
||||
+ * elf32_getphdr.c (elfw2(LIBELFBITS,getphdr)): Check if program header
|
||||
+ table fits into object's bounds.
|
||||
+ * elf_getshstrndx.c (elf_getshstrndx): Add elf->start_offset to
|
||||
+ elf->map_address. Check if first section header fits into object's
|
||||
+ bounds.
|
||||
+ * elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)):
|
||||
+ Check if section header table fits into object's bounds.
|
||||
+ * elf_begin.c (get_shnum): Ensure section headers fits into
|
||||
+ object's bounds.
|
||||
+ (file_read_elf): Make sure scncnt is small enough to allocate both
|
||||
+ ElfXX_Shdr and Elf_Scn array. Make sure section and program header
|
||||
+ tables fit into object's bounds. Avoid memory leak on failure.
|
||||
+
|
||||
+2005-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
+
|
||||
+ * libelfP.h (INVALID_NDX): Define.
|
||||
+ * gelf_getdyn.c (gelf_getdyn): Use it. Remove ndx < 0 test if any.
|
||||
+ * gelf_getlib.c (gelf_getlib): Likewise.
|
||||
+ * gelf_getmove.c (gelf_getmove): Likewise.
|
||||
+ * gelf_getrel.c (gelf_getrel): Likewise.
|
||||
+ * gelf_getrela.c (gelf_getrela): Likewise.
|
||||
+ * gelf_getsym.c (gelf_getsym): Likewise.
|
||||
+ * gelf_getsyminfo.c (gelf_getsyminfo): Likewise.
|
||||
+ * gelf_getsymshndx.c (gelf_getsymshndx): Likewise.
|
||||
+ * gelf_getversym.c (gelf_getversym): Likewise.
|
||||
+ * gelf_update_dyn.c (gelf_update_dyn): Likewise.
|
||||
+ * gelf_update_lib.c (gelf_update_lib): Likewise.
|
||||
+ * gelf_update_move.c (gelf_update_move): Likewise.
|
||||
+ * gelf_update_rel.c (gelf_update_rel): Likewise.
|
||||
+ * gelf_update_rela.c (gelf_update_rela): Likewise.
|
||||
+ * gelf_update_sym.c (gelf_update_sym): Likewise.
|
||||
+ * gelf_update_syminfo.c (gelf_update_syminfo): Likewise.
|
||||
+ * gelf_update_symshndx.c (gelf_update_symshndx): Likewise.
|
||||
+ * gelf_update_versym.c (gelf_update_versym): Likewise.
|
||||
+ * elf_newscn.c (elf_newscn): Check for overflow.
|
||||
+ * elf32_updatefile.c (__elfw2(LIBELFBITS,updatemmap)): Likewise.
|
||||
+ (__elfw2(LIBELFBITS,updatefile)): Likewise.
|
||||
+ * elf_begin.c (file_read_elf): Likewise.
|
||||
+ * elf32_newphdr.c (elfw2(LIBELFBITS,newphdr)): Likewise.
|
||||
+ * elf_getarsym.c (elf_getarsym): Likewise.
|
||||
+ * elf32_getshdr.c (elfw2(LIBELFBITS,getshdr)): Likewise.
|
||||
2005-05-11 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
* elf.h: Update again.
|
||||
--- elfutils/libelf/elf32_getphdr.c
|
||||
+++ elfutils/libelf/elf32_getphdr.c
|
||||
@@ -105,6 +105,16 @@ __elfw2(LIBELFBITS,getphdr_wrlock) (elf)
|
||||
|
||||
if (elf->map_address != NULL)
|
||||
@ -84,8 +69,8 @@ src/
|
||||
/* All the data is already mapped. Use it. */
|
||||
void *file_phdr = ((char *) elf->map_address
|
||||
+ elf->start_offset + ehdr->e_phoff);
|
||||
--- elfutils-0.136/libelf/elf32_getshdr.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf32_getshdr.c
|
||||
--- elfutils/libelf/elf32_getshdr.c
|
||||
+++ elfutils/libelf/elf32_getshdr.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Return section header.
|
||||
- Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2007 Red Hat, Inc.
|
||||
@ -93,7 +78,7 @@ src/
|
||||
This file is part of Red Hat elfutils.
|
||||
Written by Ulrich Drepper <drepper@redhat.com>, 1998.
|
||||
|
||||
@@ -81,7 +81,8 @@ load_shdr_rwlock (Elf_Scn *scn)
|
||||
@@ -81,7 +81,8 @@ load_shdr_wrlock (Elf_Scn *scn)
|
||||
goto out;
|
||||
|
||||
size_t shnum;
|
||||
@ -103,7 +88,7 @@ src/
|
||||
goto out;
|
||||
size_t size = shnum * sizeof (ElfW2(LIBELFBITS,Shdr));
|
||||
|
||||
@@ -98,6 +99,16 @@ load_shdr_rwlock (Elf_Scn *scn)
|
||||
@@ -98,6 +99,16 @@ load_shdr_wrlock (Elf_Scn *scn)
|
||||
|
||||
if (elf->map_address != NULL)
|
||||
{
|
||||
@ -120,8 +105,8 @@ src/
|
||||
ElfW2(LIBELFBITS,Shdr) *notcvt;
|
||||
|
||||
/* All the data is already mapped. If we could use it
|
||||
--- elfutils-0.136/libelf/elf32_newphdr.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf32_newphdr.c
|
||||
--- elfutils/libelf/elf32_newphdr.c
|
||||
+++ elfutils/libelf/elf32_newphdr.c
|
||||
@@ -124,6 +124,12 @@ elfw2(LIBELFBITS,newphdr) (elf, count)
|
||||
else if (elf->state.ELFW(elf,LIBELFBITS).ehdr->e_phnum != count
|
||||
|| elf->state.ELFW(elf,LIBELFBITS).phdr == NULL)
|
||||
@ -135,9 +120,9 @@ src/
|
||||
/* Allocate a new program header with the appropriate number of
|
||||
elements. */
|
||||
result = (ElfW2(LIBELFBITS,Phdr) *)
|
||||
--- elfutils-0.136/libelf/elf32_updatefile.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf32_updatefile.c
|
||||
@@ -212,6 +212,9 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf
|
||||
--- elfutils/libelf/elf32_updatefile.c
|
||||
+++ elfutils/libelf/elf32_updatefile.c
|
||||
@@ -220,6 +220,9 @@ __elfw2(LIBELFBITS,updatemmap) (Elf *elf
|
||||
/* Write all the sections. Well, only those which are modified. */
|
||||
if (shnum > 0)
|
||||
{
|
||||
@ -147,7 +132,7 @@ src/
|
||||
Elf_ScnList *list = &elf->state.ELFW(elf,LIBELFBITS).scns;
|
||||
Elf_Scn **scns = (Elf_Scn **) alloca (shnum * sizeof (Elf_Scn *));
|
||||
char *const shdr_start = ((char *) elf->map_address + elf->start_offset
|
||||
@@ -582,6 +585,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf
|
||||
@@ -633,6 +636,10 @@ __elfw2(LIBELFBITS,updatefile) (Elf *elf
|
||||
/* Write all the sections. Well, only those which are modified. */
|
||||
if (shnum > 0)
|
||||
{
|
||||
@ -158,9 +143,9 @@ src/
|
||||
off_t shdr_offset = elf->start_offset + ehdr->e_shoff;
|
||||
#if EV_NUM != 2
|
||||
xfct_t shdr_fctp = __elf_xfctstom[__libelf_version - 1][EV_CURRENT - 1][ELFW(ELFCLASS, LIBELFBITS) - 1][ELF_T_SHDR];
|
||||
--- elfutils-0.136/libelf/elf_begin.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf_begin.c
|
||||
@@ -155,7 +155,8 @@ get_shnum (void *map_address, unsigned c
|
||||
--- elfutils/libelf/elf_begin.c
|
||||
+++ elfutils/libelf/elf_begin.c
|
||||
@@ -165,7 +165,8 @@ get_shnum (void *map_address, unsigned c
|
||||
|
||||
if (unlikely (result == 0) && ehdr.e32->e_shoff != 0)
|
||||
{
|
||||
@ -170,7 +155,7 @@ src/
|
||||
/* Cannot read the first section header. */
|
||||
return 0;
|
||||
|
||||
@@ -203,7 +204,8 @@ get_shnum (void *map_address, unsigned c
|
||||
@@ -213,7 +214,8 @@ get_shnum (void *map_address, unsigned c
|
||||
|
||||
if (unlikely (result == 0) && ehdr.e64->e_shoff != 0)
|
||||
{
|
||||
@ -180,7 +165,7 @@ src/
|
||||
/* Cannot read the first section header. */
|
||||
return 0;
|
||||
|
||||
@@ -275,6 +277,15 @@ file_read_elf (int fildes, void *map_add
|
||||
@@ -285,6 +287,15 @@ file_read_elf (int fildes, void *map_add
|
||||
/* Could not determine the number of sections. */
|
||||
return NULL;
|
||||
|
||||
@ -196,7 +181,7 @@ src/
|
||||
/* We can now allocate the memory. */
|
||||
Elf *elf = allocate_elf (fildes, map_address, offset, maxsize, cmd, parent,
|
||||
ELF_K_ELF, scncnt * sizeof (Elf_Scn));
|
||||
@@ -308,13 +319,31 @@ file_read_elf (int fildes, void *map_add
|
||||
@@ -318,13 +329,31 @@ file_read_elf (int fildes, void *map_add
|
||||
{
|
||||
/* We can use the mmapped memory. */
|
||||
elf->state.elf32.ehdr = ehdr;
|
||||
@ -228,7 +213,7 @@ src/
|
||||
|
||||
for (size_t cnt = 0; cnt < scncnt; ++cnt)
|
||||
{
|
||||
@@ -396,13 +425,26 @@ file_read_elf (int fildes, void *map_add
|
||||
@@ -406,13 +435,26 @@ file_read_elf (int fildes, void *map_add
|
||||
{
|
||||
/* We can use the mmapped memory. */
|
||||
elf->state.elf64.ehdr = ehdr;
|
||||
@ -255,8 +240,8 @@ src/
|
||||
|
||||
for (size_t cnt = 0; cnt < scncnt; ++cnt)
|
||||
{
|
||||
--- elfutils-0.136/libelf/elf_getarsym.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf_getarsym.c
|
||||
--- elfutils/libelf/elf_getarsym.c
|
||||
+++ elfutils/libelf/elf_getarsym.c
|
||||
@@ -179,6 +179,9 @@ elf_getarsym (elf, ptr)
|
||||
size_t index_size = atol (tmpbuf);
|
||||
|
||||
@ -267,8 +252,8 @@ src/
|
||||
|| n * sizeof (uint32_t) > index_size)
|
||||
{
|
||||
/* This index table cannot be right since it does not fit into
|
||||
--- elfutils-0.136/libelf/elf_getshstrndx.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf_getshstrndx.c
|
||||
--- elfutils/libelf/elf_getshstrndx.c
|
||||
+++ elfutils/libelf/elf_getshstrndx.c
|
||||
@@ -125,10 +125,25 @@ elf_getshstrndx (elf, dst)
|
||||
if (elf->map_address != NULL
|
||||
&& elf->state.elf32.ehdr->e_ident[EI_DATA] == MY_ELFDATA
|
||||
@ -325,8 +310,8 @@ src/
|
||||
else
|
||||
{
|
||||
/* We avoid reading in all the section headers. Just read
|
||||
--- elfutils-0.136/libelf/elf_newscn.c.robustify
|
||||
+++ elfutils-0.136/libelf/elf_newscn.c
|
||||
--- elfutils/libelf/elf_newscn.c
|
||||
+++ elfutils/libelf/elf_newscn.c
|
||||
@@ -104,10 +104,18 @@ elf_newscn (elf)
|
||||
else
|
||||
{
|
||||
@ -347,8 +332,8 @@ src/
|
||||
newp = (Elf_ScnList *) calloc (sizeof (Elf_ScnList)
|
||||
+ ((elf->state.elf.scnincr *= 2)
|
||||
* sizeof (Elf_Scn)), 1);
|
||||
--- elfutils-0.136/libelf/gelf_getdyn.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getdyn.c
|
||||
--- elfutils/libelf/gelf_getdyn.c
|
||||
+++ elfutils/libelf/gelf_getdyn.c
|
||||
@@ -93,7 +93,8 @@ gelf_getdyn (data, ndx, dst)
|
||||
table entries has to be adopted. The user better has provided
|
||||
a buffer where we can store the information. While copying the
|
||||
@ -369,8 +354,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_getlib.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getlib.c
|
||||
--- elfutils/libelf/gelf_getlib.c
|
||||
+++ elfutils/libelf/gelf_getlib.c
|
||||
@@ -86,7 +86,8 @@ gelf_getlib (data, ndx, dst)
|
||||
/* The data is already in the correct form. Just make sure the
|
||||
index is OK. */
|
||||
@ -381,8 +366,8 @@ src/
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
else
|
||||
{
|
||||
--- elfutils-0.136/libelf/gelf_getmove.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getmove.c
|
||||
--- elfutils/libelf/gelf_getmove.c
|
||||
+++ elfutils/libelf/gelf_getmove.c
|
||||
@@ -83,7 +83,8 @@ gelf_getmove (data, ndx, dst)
|
||||
|
||||
/* The data is already in the correct form. Just make sure the
|
||||
@ -393,8 +378,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_getrela.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getrela.c
|
||||
--- elfutils/libelf/gelf_getrela.c
|
||||
+++ elfutils/libelf/gelf_getrela.c
|
||||
@@ -71,12 +71,6 @@ gelf_getrela (data, ndx, dst)
|
||||
if (data_scn == NULL)
|
||||
return NULL;
|
||||
@ -428,8 +413,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
result = NULL;
|
||||
--- elfutils-0.136/libelf/gelf_getrel.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getrel.c
|
||||
--- elfutils/libelf/gelf_getrel.c
|
||||
+++ elfutils/libelf/gelf_getrel.c
|
||||
@@ -71,12 +71,6 @@ gelf_getrel (data, ndx, dst)
|
||||
if (data_scn == NULL)
|
||||
return NULL;
|
||||
@ -463,8 +448,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
result = NULL;
|
||||
--- elfutils-0.136/libelf/gelf_getsym.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getsym.c
|
||||
--- elfutils/libelf/gelf_getsym.c
|
||||
+++ elfutils/libelf/gelf_getsym.c
|
||||
@@ -90,7 +90,8 @@ gelf_getsym (data, ndx, dst)
|
||||
table entries has to be adopted. The user better has provided
|
||||
a buffer where we can store the information. While copying the
|
||||
@ -485,8 +470,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_getsyminfo.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getsyminfo.c
|
||||
--- elfutils/libelf/gelf_getsyminfo.c
|
||||
+++ elfutils/libelf/gelf_getsyminfo.c
|
||||
@@ -84,7 +84,8 @@ gelf_getsyminfo (data, ndx, dst)
|
||||
|
||||
/* The data is already in the correct form. Just make sure the
|
||||
@ -497,8 +482,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_getsymshndx.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getsymshndx.c
|
||||
--- elfutils/libelf/gelf_getsymshndx.c
|
||||
+++ elfutils/libelf/gelf_getsymshndx.c
|
||||
@@ -90,7 +90,9 @@ gelf_getsymshndx (symdata, shndxdata, nd
|
||||
section index table. */
|
||||
if (likely (shndxdata_scn != NULL))
|
||||
@ -530,8 +515,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_getversym.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_getversym.c
|
||||
--- elfutils/libelf/gelf_getversym.c
|
||||
+++ elfutils/libelf/gelf_getversym.c
|
||||
@@ -92,7 +92,8 @@ gelf_getversym (data, ndx, dst)
|
||||
|
||||
/* The data is already in the correct form. Just make sure the
|
||||
@ -542,8 +527,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
result = NULL;
|
||||
--- elfutils-0.136/libelf/gelf_update_dyn.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_dyn.c
|
||||
--- elfutils/libelf/gelf_update_dyn.c
|
||||
+++ elfutils/libelf/gelf_update_dyn.c
|
||||
@@ -71,12 +71,6 @@ gelf_update_dyn (data, ndx, src)
|
||||
if (data == NULL)
|
||||
return 0;
|
||||
@ -577,8 +562,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_update_lib.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_lib.c
|
||||
--- elfutils/libelf/gelf_update_lib.c
|
||||
+++ elfutils/libelf/gelf_update_lib.c
|
||||
@@ -68,12 +68,6 @@ gelf_update_lib (data, ndx, src)
|
||||
if (data == NULL)
|
||||
return 0;
|
||||
@ -602,8 +587,8 @@ src/
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
else
|
||||
{
|
||||
--- elfutils-0.136/libelf/gelf_update_move.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_move.c
|
||||
--- elfutils/libelf/gelf_update_move.c
|
||||
+++ elfutils/libelf/gelf_update_move.c
|
||||
@@ -75,7 +75,7 @@ gelf_update_move (data, ndx, src)
|
||||
assert (sizeof (GElf_Move) == sizeof (Elf64_Move));
|
||||
|
||||
@ -613,8 +598,8 @@ src/
|
||||
|| unlikely ((ndx + 1) * sizeof (GElf_Move) > data_scn->d.d_size))
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
--- elfutils-0.136/libelf/gelf_update_rela.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_rela.c
|
||||
--- elfutils/libelf/gelf_update_rela.c
|
||||
+++ elfutils/libelf/gelf_update_rela.c
|
||||
@@ -68,12 +68,6 @@ gelf_update_rela (Elf_Data *dst, int ndx
|
||||
if (dst == NULL)
|
||||
return 0;
|
||||
@ -648,8 +633,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_update_rel.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_rel.c
|
||||
--- elfutils/libelf/gelf_update_rel.c
|
||||
+++ elfutils/libelf/gelf_update_rel.c
|
||||
@@ -68,12 +68,6 @@ gelf_update_rel (Elf_Data *dst, int ndx,
|
||||
if (dst == NULL)
|
||||
return 0;
|
||||
@ -683,8 +668,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_update_sym.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_sym.c
|
||||
--- elfutils/libelf/gelf_update_sym.c
|
||||
+++ elfutils/libelf/gelf_update_sym.c
|
||||
@@ -72,12 +72,6 @@ gelf_update_sym (data, ndx, src)
|
||||
if (data == NULL)
|
||||
return 0;
|
||||
@ -718,8 +703,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_update_syminfo.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_syminfo.c
|
||||
--- elfutils/libelf/gelf_update_syminfo.c
|
||||
+++ elfutils/libelf/gelf_update_syminfo.c
|
||||
@@ -72,12 +72,6 @@ gelf_update_syminfo (data, ndx, src)
|
||||
if (data == NULL)
|
||||
return 0;
|
||||
@ -743,8 +728,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_update_symshndx.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_symshndx.c
|
||||
--- elfutils/libelf/gelf_update_symshndx.c
|
||||
+++ elfutils/libelf/gelf_update_symshndx.c
|
||||
@@ -77,12 +77,6 @@ gelf_update_symshndx (symdata, shndxdata
|
||||
if (symdata == NULL)
|
||||
return 0;
|
||||
@ -778,8 +763,8 @@ src/
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
goto out;
|
||||
--- elfutils-0.136/libelf/gelf_update_versym.c.robustify
|
||||
+++ elfutils-0.136/libelf/gelf_update_versym.c
|
||||
--- elfutils/libelf/gelf_update_versym.c
|
||||
+++ elfutils/libelf/gelf_update_versym.c
|
||||
@@ -75,7 +75,7 @@ gelf_update_versym (data, ndx, src)
|
||||
assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
|
||||
|
||||
@ -789,8 +774,8 @@ src/
|
||||
|| unlikely ((ndx + 1) * sizeof (GElf_Versym) > data_scn->d.d_size))
|
||||
{
|
||||
__libelf_seterrno (ELF_E_INVALID_INDEX);
|
||||
--- elfutils-0.136/libelf/libelfP.h.robustify
|
||||
+++ elfutils-0.136/libelf/libelfP.h
|
||||
--- elfutils/libelf/libelfP.h
|
||||
+++ elfutils/libelf/libelfP.h
|
||||
@@ -611,4 +611,13 @@ extern uint32_t __libelf_crc32 (uint32_t
|
||||
/* Align offset to 4 bytes as needed for note name and descriptor data. */
|
||||
#define NOTE_ALIGN(n) (((n) + 3) & -4U)
|
||||
@ -805,9 +790,48 @@ src/
|
||||
+#endif
|
||||
+
|
||||
#endif /* libelfP.h */
|
||||
--- elfutils-0.136/src/elflint.c.robustify
|
||||
+++ elfutils-0.136/src/elflint.c
|
||||
@@ -131,6 +131,9 @@ static uint32_t shstrndx;
|
||||
--- elfutils/src/ChangeLog
|
||||
+++ elfutils/src/ChangeLog
|
||||
@@ -1297,6 +1297,16 @@
|
||||
object symbols or symbols with unknown type.
|
||||
(check_rel): Likewise.
|
||||
|
||||
+2005-06-09 Roland McGrath <roland@redhat.com>
|
||||
+
|
||||
+ * readelf.c (handle_dynamic, handle_symtab): Check for bogus sh_link.
|
||||
+ (handle_verneed, handle_verdef, handle_versym, handle_hash): Likewise.
|
||||
+ (handle_scngrp): Check for bogus sh_info.
|
||||
+
|
||||
+ * strip.c (handle_elf): Check for bogus values in sh_link, sh_info,
|
||||
+ st_shndx, e_shstrndx, and SHT_GROUP or SHT_SYMTAB_SHNDX data.
|
||||
+ Don't use assert on input values, instead bail with "illformed" error.
|
||||
+
|
||||
2005-06-08 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* readelf.c (print_ops): Add consts.
|
||||
@@ -1342,6 +1352,19 @@
|
||||
|
||||
* readelf.c (dwarf_tag_string): Add new tags.
|
||||
|
||||
+2005-05-17 Jakub Jelinek <jakub@redhat.com>
|
||||
+
|
||||
+ * elflint.c (check_hash): Don't check entries beyond end of section.
|
||||
+ (check_note): Don't crash if gelf_rawchunk fails.
|
||||
+ (section_name): Return <invalid> if gelf_getshdr returns NULL.
|
||||
+
|
||||
+2005-05-14 Jakub Jelinek <jakub@redhat.com>
|
||||
+
|
||||
+ * elflint.c (section_name): Return "<invalid>" instead of
|
||||
+ crashing on invalid section name.
|
||||
+ (check_symtab, is_rel_dyn, check_rela, check_rel, check_dynamic,
|
||||
+ check_symtab_shndx, check_hash, check_versym): Robustify.
|
||||
+
|
||||
2005-05-08 Roland McGrath <roland@redhat.com>
|
||||
|
||||
* strip.c (handle_elf): Don't translate hash and versym data formats,
|
||||
--- elfutils/src/elflint.c
|
||||
+++ elfutils/src/elflint.c
|
||||
@@ -130,6 +130,9 @@ static uint32_t shstrndx;
|
||||
/* Array to count references in section groups. */
|
||||
static int *scnref;
|
||||
|
||||
@ -817,7 +841,7 @@ src/
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
@@ -320,10 +323,19 @@ section_name (Ebl *ebl, int idx)
|
||||
@@ -319,10 +322,19 @@ section_name (Ebl *ebl, int idx)
|
||||
{
|
||||
GElf_Shdr shdr_mem;
|
||||
GElf_Shdr *shdr;
|
||||
@ -838,7 +862,7 @@ src/
|
||||
}
|
||||
|
||||
|
||||
@@ -345,10 +357,6 @@ static const int valid_e_machine[] =
|
||||
@@ -344,10 +356,6 @@ static const int valid_e_machine[] =
|
||||
(sizeof (valid_e_machine) / sizeof (valid_e_machine[0]))
|
||||
|
||||
|
||||
@ -849,7 +873,7 @@ src/
|
||||
static void
|
||||
check_elf_header (Ebl *ebl, GElf_Ehdr *ehdr, size_t size)
|
||||
{
|
||||
@@ -613,7 +621,8 @@ section [%2d] '%s': symbol table cannot
|
||||
@@ -612,7 +620,8 @@ section [%2d] '%s': symbol table cannot
|
||||
}
|
||||
}
|
||||
|
||||
@ -859,7 +883,7 @@ src/
|
||||
ERROR (gettext ("\
|
||||
section [%2u] '%s': entry size is does not match ElfXX_Sym\n"),
|
||||
idx, section_name (ebl, idx));
|
||||
@@ -651,7 +660,7 @@ section [%2d] '%s': XINDEX for zeroth en
|
||||
@@ -650,7 +659,7 @@ section [%2d] '%s': XINDEX for zeroth en
|
||||
xndxscnidx, section_name (ebl, xndxscnidx));
|
||||
}
|
||||
|
||||
@ -868,7 +892,7 @@ src/
|
||||
{
|
||||
sym = gelf_getsymshndx (data, xndxdata, cnt, &sym_mem, &xndx);
|
||||
if (sym == NULL)
|
||||
@@ -671,7 +680,8 @@ section [%2d] '%s': symbol %zu: invalid
|
||||
@@ -670,7 +679,8 @@ section [%2d] '%s': symbol %zu: invalid
|
||||
else
|
||||
{
|
||||
name = elf_strptr (ebl->elf, shdr->sh_link, sym->st_name);
|
||||
@ -878,7 +902,7 @@ src/
|
||||
}
|
||||
|
||||
if (sym->st_shndx == SHN_XINDEX)
|
||||
@@ -1001,9 +1011,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
|
||||
@@ -1000,9 +1010,11 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
|
||||
{
|
||||
GElf_Shdr rcshdr_mem;
|
||||
const GElf_Shdr *rcshdr = gelf_getshdr (scn, &rcshdr_mem);
|
||||
@ -892,7 +916,7 @@ src/
|
||||
{
|
||||
/* Found the dynamic section. Look through it. */
|
||||
Elf_Data *d = elf_getdata (scn, NULL);
|
||||
@@ -1013,7 +1025,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
|
||||
@@ -1012,7 +1024,9 @@ is_rel_dyn (Ebl *ebl, const GElf_Ehdr *e
|
||||
{
|
||||
GElf_Dyn dyn_mem;
|
||||
GElf_Dyn *dyn = gelf_getdyn (d, cnt, &dyn_mem);
|
||||
@ -903,7 +927,7 @@ src/
|
||||
|
||||
if (dyn->d_tag == DT_RELCOUNT)
|
||||
{
|
||||
@@ -1027,7 +1041,9 @@ section [%2d] '%s': DT_RELCOUNT used for
|
||||
@@ -1026,7 +1040,9 @@ section [%2d] '%s': DT_RELCOUNT used for
|
||||
/* Does the number specified number of relative
|
||||
relocations exceed the total number of
|
||||
relocations? */
|
||||
@ -914,7 +938,7 @@ src/
|
||||
ERROR (gettext ("\
|
||||
section [%2d] '%s': DT_RELCOUNT value %d too high for this section\n"),
|
||||
idx, section_name (ebl, idx),
|
||||
@@ -1187,7 +1203,8 @@ section [%2d] '%s': no relocations for m
|
||||
@@ -1186,7 +1202,8 @@ section [%2d] '%s': no relocations for m
|
||||
}
|
||||
}
|
||||
|
||||
@ -924,7 +948,7 @@ src/
|
||||
ERROR (gettext (reltype == ELF_T_RELA ? "\
|
||||
section [%2d] '%s': section entry size does not match ElfXX_Rela\n" : "\
|
||||
section [%2d] '%s': section entry size does not match ElfXX_Rel\n"),
|
||||
@@ -1410,7 +1427,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, G
|
||||
@@ -1409,7 +1426,8 @@ check_rela (Ebl *ebl, GElf_Ehdr *ehdr, G
|
||||
Elf_Data *symdata = elf_getdata (symscn, NULL);
|
||||
enum load_state state = state_undecided;
|
||||
|
||||
@ -934,7 +958,7 @@ src/
|
||||
{
|
||||
GElf_Rela rela_mem;
|
||||
GElf_Rela *rela = gelf_getrela (data, cnt, &rela_mem);
|
||||
@@ -1460,7 +1478,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GE
|
||||
@@ -1459,7 +1477,8 @@ check_rel (Ebl *ebl, GElf_Ehdr *ehdr, GE
|
||||
Elf_Data *symdata = elf_getdata (symscn, NULL);
|
||||
enum load_state state = state_undecided;
|
||||
|
||||
@ -944,7 +968,7 @@ src/
|
||||
{
|
||||
GElf_Rel rel_mem;
|
||||
GElf_Rel *rel = gelf_getrel (data, cnt, &rel_mem);
|
||||
@@ -1563,7 +1582,8 @@ section [%2d] '%s': referenced as string
|
||||
@@ -1562,7 +1581,8 @@ section [%2d] '%s': referenced as string
|
||||
shdr->sh_link, section_name (ebl, shdr->sh_link),
|
||||
idx, section_name (ebl, idx));
|
||||
|
||||
@ -954,7 +978,7 @@ src/
|
||||
ERROR (gettext ("\
|
||||
section [%2d] '%s': section entry size does not match ElfXX_Dyn\n"),
|
||||
idx, section_name (ebl, idx));
|
||||
@@ -1573,7 +1593,7 @@ section [%2d] '%s': section entry size d
|
||||
@@ -1572,7 +1592,7 @@ section [%2d] '%s': section entry size d
|
||||
idx, section_name (ebl, idx));
|
||||
|
||||
bool non_null_warned = false;
|
||||
@ -963,7 +987,7 @@ src/
|
||||
{
|
||||
GElf_Dyn dyn_mem;
|
||||
GElf_Dyn *dyn = gelf_getdyn (data, cnt, &dyn_mem);
|
||||
@@ -1854,6 +1874,8 @@ section [%2d] '%s': entry size does not
|
||||
@@ -1853,6 +1873,8 @@ section [%2d] '%s': entry size does not
|
||||
idx, section_name (ebl, idx));
|
||||
|
||||
if (symshdr != NULL
|
||||
@ -972,7 +996,7 @@ src/
|
||||
&& (shdr->sh_size / shdr->sh_entsize
|
||||
< symshdr->sh_size / symshdr->sh_entsize))
|
||||
ERROR (gettext ("\
|
||||
@@ -1880,6 +1902,12 @@ section [%2d] '%s': extended section ind
|
||||
@@ -1879,6 +1901,12 @@ section [%2d] '%s': extended section ind
|
||||
}
|
||||
|
||||
Elf_Data *data = elf_getdata (elf_getscn (ebl->elf, idx), NULL);
|
||||
@ -985,7 +1009,7 @@ src/
|
||||
|
||||
if (*((Elf32_Word *) data->d_buf) != 0)
|
||||
ERROR (gettext ("symbol 0 should have zero extended section index\n"));
|
||||
@@ -1922,7 +1950,7 @@ section [%2d] '%s': hash table section i
|
||||
@@ -1921,7 +1949,7 @@ section [%2d] '%s': hash table section i
|
||||
|
||||
size_t maxidx = nchain;
|
||||
|
||||
@ -994,7 +1018,7 @@ src/
|
||||
{
|
||||
size_t symsize = symshdr->sh_size / symshdr->sh_entsize;
|
||||
|
||||
@@ -1933,18 +1961,28 @@ section [%2d] '%s': hash table section i
|
||||
@@ -1932,18 +1960,28 @@ section [%2d] '%s': hash table section i
|
||||
maxidx = symsize;
|
||||
}
|
||||
|
||||
@ -1025,7 +1049,7 @@ src/
|
||||
}
|
||||
|
||||
|
||||
@@ -1974,18 +2012,28 @@ section [%2d] '%s': hash table section i
|
||||
@@ -1973,18 +2011,28 @@ section [%2d] '%s': hash table section i
|
||||
maxidx = symsize;
|
||||
}
|
||||
|
||||
@ -1057,7 +1081,7 @@ src/
|
||||
}
|
||||
|
||||
|
||||
@@ -2010,7 +2058,7 @@ section [%2d] '%s': bitmask size not pow
|
||||
@@ -2009,7 +2057,7 @@ section [%2d] '%s': bitmask size not pow
|
||||
if (shdr->sh_size < (4 + bitmask_words + nbuckets) * sizeof (Elf32_Word))
|
||||
{
|
||||
ERROR (gettext ("\
|
||||
@ -1066,7 +1090,7 @@ src/
|
||||
idx, section_name (ebl, idx), (long int) shdr->sh_size,
|
||||
(long int) ((4 + bitmask_words + nbuckets) * sizeof (Elf32_Word)));
|
||||
return;
|
||||
@@ -2682,8 +2730,9 @@ section [%2d] '%s' refers in sh_link to
|
||||
@@ -2681,8 +2729,9 @@ section [%2d] '%s' refers in sh_link to
|
||||
|
||||
/* The number of elements in the version symbol table must be the
|
||||
same as the number of symbols. */
|
||||
@ -1078,9 +1102,9 @@ src/
|
||||
ERROR (gettext ("\
|
||||
section [%2d] '%s' has different number of entries than symbol table [%2d] '%s'\n"),
|
||||
idx, section_name (ebl, idx),
|
||||
--- elfutils-0.136/src/readelf.c.robustify
|
||||
+++ elfutils-0.136/src/readelf.c
|
||||
@@ -1111,6 +1111,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
|
||||
--- elfutils/src/readelf.c
|
||||
+++ elfutils/src/readelf.c
|
||||
@@ -1130,6 +1130,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
|
||||
Elf32_Word *grpref = (Elf32_Word *) data->d_buf;
|
||||
|
||||
GElf_Sym sym_mem;
|
||||
@ -1089,7 +1113,7 @@ src/
|
||||
printf ((grpref[0] & GRP_COMDAT)
|
||||
? ngettext ("\
|
||||
\nCOMDAT section group [%2zu] '%s' with signature '%s' contains %zu entry:\n",
|
||||
@@ -1123,8 +1125,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -1142,8 +1144,8 @@ handle_scngrp (Ebl *ebl, Elf_Scn *scn, G
|
||||
data->d_size / sizeof (Elf32_Word) - 1),
|
||||
elf_ndxscn (scn),
|
||||
elf_strptr (ebl->elf, shstrndx, shdr->sh_name),
|
||||
@ -1100,7 +1124,7 @@ src/
|
||||
?: gettext ("<INVALID SYMBOL>"),
|
||||
data->d_size / sizeof (Elf32_Word) - 1);
|
||||
|
||||
@@ -1275,7 +1277,8 @@ static void
|
||||
@@ -1294,7 +1296,8 @@ static void
|
||||
handle_dynamic (Ebl *ebl, Elf_Scn *scn, GElf_Shdr *shdr)
|
||||
{
|
||||
int class = gelf_getclass (ebl->elf);
|
||||
@ -1110,7 +1134,7 @@ src/
|
||||
Elf_Data *data;
|
||||
size_t cnt;
|
||||
size_t shstrndx;
|
||||
@@ -1290,6 +1293,11 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
|
||||
@@ -1309,6 +1312,11 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
|
||||
error (EXIT_FAILURE, 0,
|
||||
gettext ("cannot get section header string table index"));
|
||||
|
||||
@ -1122,7 +1146,7 @@ src/
|
||||
printf (ngettext ("\
|
||||
\nDynamic segment contains %lu entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
|
||||
"\
|
||||
@@ -1299,9 +1307,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
|
||||
@@ -1318,9 +1326,7 @@ handle_dynamic (Ebl *ebl, Elf_Scn *scn,
|
||||
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
|
||||
shdr->sh_offset,
|
||||
(int) shdr->sh_link,
|
||||
@ -1133,7 +1157,7 @@ src/
|
||||
fputs_unlocked (gettext (" Type Value\n"), stdout);
|
||||
|
||||
for (cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
|
||||
@@ -1801,6 +1807,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -1820,6 +1826,13 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
|
||||
error (EXIT_FAILURE, 0,
|
||||
gettext ("cannot get section header string table index"));
|
||||
|
||||
@ -1147,7 +1171,7 @@ src/
|
||||
/* Now we can compute the number of entries in the section. */
|
||||
unsigned int nsyms = data->d_size / (class == ELFCLASS32
|
||||
? sizeof (Elf32_Sym)
|
||||
@@ -1811,15 +1824,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -1830,15 +1843,12 @@ handle_symtab (Ebl *ebl, Elf_Scn *scn, G
|
||||
nsyms),
|
||||
(unsigned int) elf_ndxscn (scn),
|
||||
elf_strptr (ebl->elf, shstrndx, shdr->sh_name), nsyms);
|
||||
@ -1164,7 +1188,7 @@ src/
|
||||
|
||||
fputs_unlocked (class == ELFCLASS32
|
||||
? gettext ("\
|
||||
@@ -2055,7 +2065,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
|
||||
@@ -2074,7 +2084,13 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
|
||||
error (EXIT_FAILURE, 0,
|
||||
gettext ("cannot get section header string table index"));
|
||||
|
||||
@ -1179,7 +1203,7 @@ src/
|
||||
printf (ngettext ("\
|
||||
\nVersion needs section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
|
||||
"\
|
||||
@@ -2066,9 +2082,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
|
||||
@@ -2085,9 +2101,7 @@ handle_verneed (Ebl *ebl, Elf_Scn *scn,
|
||||
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
|
||||
shdr->sh_offset,
|
||||
(unsigned int) shdr->sh_link,
|
||||
@ -1190,7 +1214,7 @@ src/
|
||||
|
||||
unsigned int offset = 0;
|
||||
for (int cnt = shdr->sh_info; --cnt >= 0; )
|
||||
@@ -2121,8 +2135,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -2140,8 +2154,14 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
|
||||
error (EXIT_FAILURE, 0,
|
||||
gettext ("cannot get section header string table index"));
|
||||
|
||||
@ -1206,7 +1230,7 @@ src/
|
||||
printf (ngettext ("\
|
||||
\nVersion definition section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
|
||||
"\
|
||||
@@ -2134,9 +2154,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -2153,9 +2173,7 @@ handle_verdef (Ebl *ebl, Elf_Scn *scn, G
|
||||
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
|
||||
shdr->sh_offset,
|
||||
(unsigned int) shdr->sh_link,
|
||||
@ -1217,7 +1241,7 @@ src/
|
||||
|
||||
unsigned int offset = 0;
|
||||
for (int cnt = shdr->sh_info; --cnt >= 0; )
|
||||
@@ -2398,8 +2416,14 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -2417,8 +2435,14 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
|
||||
filename = NULL;
|
||||
}
|
||||
|
||||
@ -1233,7 +1257,7 @@ src/
|
||||
printf (ngettext ("\
|
||||
\nVersion symbols section [%2u] '%s' contains %d entry:\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'",
|
||||
"\
|
||||
@@ -2411,9 +2435,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
|
||||
@@ -2430,9 +2454,7 @@ handle_versym (Ebl *ebl, Elf_Scn *scn, G
|
||||
class == ELFCLASS32 ? 10 : 18, shdr->sh_addr,
|
||||
shdr->sh_offset,
|
||||
(unsigned int) shdr->sh_link,
|
||||
@ -1244,7 +1268,7 @@ src/
|
||||
|
||||
/* Now we can finally look at the actual contents of this section. */
|
||||
for (unsigned int cnt = 0; cnt < shdr->sh_size / shdr->sh_entsize; ++cnt)
|
||||
@@ -2465,7 +2487,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
|
||||
@@ -2484,7 +2506,17 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
|
||||
for (Elf32_Word cnt = 0; cnt < nbucket; ++cnt)
|
||||
++counts[lengths[cnt]];
|
||||
|
||||
@ -1263,7 +1287,7 @@ src/
|
||||
printf (ngettext ("\
|
||||
\nHistogram for bucket list length in section [%2u] '%s' (total of %d bucket):\n Addr: %#0*" PRIx64 " Offset: %#08" PRIx64 " Link to section: [%2u] '%s'\n",
|
||||
"\
|
||||
@@ -2478,9 +2510,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
|
||||
@@ -2497,9 +2529,7 @@ print_hash_info (Ebl *ebl, Elf_Scn *scn,
|
||||
shdr->sh_addr,
|
||||
shdr->sh_offset,
|
||||
(unsigned int) shdr->sh_link,
|
||||
@ -1274,7 +1298,7 @@ src/
|
||||
|
||||
if (extrastr != NULL)
|
||||
fputs (extrastr, stdout);
|
||||
@@ -4039,6 +4069,16 @@ print_debug_aranges_section (Dwfl_Module
|
||||
@@ -4058,6 +4088,16 @@ print_debug_aranges_section (Dwfl_Module
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1289,10 +1313,10 @@ src/
|
||||
+ }
|
||||
+
|
||||
printf (ngettext ("\
|
||||
\nDWARF section '%s' at offset %#" PRIx64 " contains %zu entry:\n",
|
||||
\nDWARF section [%2zu] '%s' at offset %#" PRIx64 " contains %zu entry:\n",
|
||||
"\
|
||||
--- elfutils-0.136/src/strip.c.robustify
|
||||
+++ elfutils-0.136/src/strip.c
|
||||
--- elfutils/src/strip.c
|
||||
+++ elfutils/src/strip.c
|
||||
@@ -544,6 +544,11 @@ handle_elf (int fd, Elf *elf, const char
|
||||
goto fail_close;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
%define eu_version 0.138
|
||||
%define eu_release 2
|
||||
%define eu_version 0.139
|
||||
%define eu_release 1
|
||||
|
||||
%if %{?_with_compat:1}%{!?_with_compat:0}
|
||||
%define compat 1
|
||||
@ -33,13 +33,11 @@ License: GPLv2 with exceptions
|
||||
Group: Development/Tools
|
||||
URL: https://fedorahosted.org/elfutils/
|
||||
Source: http://fedorahosted.org/releases/e/l/elfutils/%{name}-%{version}.tar.bz2
|
||||
Patch1: elfutils-portability.patch
|
||||
Patch2: elfutils-robustify.patch
|
||||
Patch1: elfutils-robustify.patch
|
||||
Patch2: elfutils-portability.patch
|
||||
Requires: elfutils-libelf-%{_arch} = %{version}-%{release}
|
||||
Requires: elfutils-libs-%{_arch} = %{version}-%{release}
|
||||
|
||||
Patch3: elfutils-0.138-libelf-padding-fix.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
BuildRequires: bison >= 1.875
|
||||
BuildRequires: flex >= 2.5.4a
|
||||
@ -52,6 +50,19 @@ BuildRequires: glibc-headers >= 2.3.4-11
|
||||
BuildRequires: gcc >= 3.2
|
||||
%endif
|
||||
|
||||
%define use_zlib 0
|
||||
%if 0%{?fedora} >= 5
|
||||
%define use_zlib 1
|
||||
%endif
|
||||
%if 0%{?rhel} >= 5
|
||||
%define use_zlib 1
|
||||
%endif
|
||||
|
||||
%if %{use_zlib}
|
||||
BuildRequires: zlib-devel >= 1.2.2.3
|
||||
BuildRequires: bzip2-devel
|
||||
%endif
|
||||
|
||||
%define _gnu %{nil}
|
||||
%define _program_prefix eu-
|
||||
|
||||
@ -144,21 +155,19 @@ for libelf.
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%if !0%{?scanf_has_m}
|
||||
sed -i.scanf-m -e 's/%m/%a/' tests/line2addr.c
|
||||
%endif
|
||||
%patch1 -p1 -b .robustify
|
||||
|
||||
%if %{compat}
|
||||
%patch1 -p1 -b .portability
|
||||
%patch2 -p1 -b .portability
|
||||
sleep 1
|
||||
find . \( -name Makefile.in -o -name aclocal.m4 \) -print | xargs touch
|
||||
sleep 1
|
||||
find . \( -name configure -o -name config.h.in \) -print | xargs touch
|
||||
%else
|
||||
%if !0%{?scanf_has_m}
|
||||
sed -i.scanf-m -e 's/%m/%a/g' src/addr2line.c tests/line2addr.c
|
||||
%endif
|
||||
%endif
|
||||
|
||||
%patch2 -p1 -b .robustify
|
||||
|
||||
%patch3 -p1 -b .fixes
|
||||
|
||||
find . -name \*.sh ! -perm -0100 -print | xargs chmod +x
|
||||
|
||||
@ -267,6 +276,14 @@ rm -rf ${RPM_BUILD_ROOT}
|
||||
%{_libdir}/libelf.a
|
||||
|
||||
%changelog
|
||||
* Fri Jan 23 2009 Roland McGrath <roland@redhat.com> - 0.139-1
|
||||
- Update to 0.139
|
||||
- libcpu: Add Intel SSE4 disassembler support
|
||||
- readelf: Implement call frame information and exception handling dumping.
|
||||
Add -e option. Enable it implicitly for -a.
|
||||
- elflint: Check PT_GNU_EH_FRAME program header entry.
|
||||
- libdwfl: Support automatic gzip/bzip2 decompression of ELF files. (#472136)
|
||||
|
||||
* Thu Jan 1 2009 Roland McGrath <roland@redhat.com> - 0.138-2
|
||||
- Fix libelf regression.
|
||||
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
1a846d275cb6c8ab995fa0fa877113ff elfutils-0.138.tar.bz2
|
||||
9cfc12ac0d6d14968e253639fa957946 elfutils-0.139.tar.bz2
|
||||
|
214
upstream-key.gpg
214
upstream-key.gpg
@ -1,123 +1,109 @@
|
||||
pub 1024D/7EBBD625 2003-01-10
|
||||
uid Roland McGrath <roland@frob.com>
|
||||
uid Roland McGrath <frob@debian.org>
|
||||
uid Roland McGrath <roland@gnu.org>
|
||||
uid Roland McGrath <roland@redhat.com>
|
||||
sub 2048g/17998A93 2003-01-10
|
||||
|
||||
pub 1024D/79FF4474 2001-08-24
|
||||
uid Ulrich Drepper <drepper@akkadia.org>
|
||||
uid Ulrich Drepper <drepper@redhat.com>
|
||||
uid [jpeg image of size 2203]
|
||||
sub 2048g/07FA6550 2001-08-24
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.7 (GNU/Linux)
|
||||
Version: GnuPG v1.4.5 (GNU/Linux)
|
||||
|
||||
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
|
||||
gTKAnym+PwCfbnwIeEZfbBWgonv4/I3aNNm3FdQ=
|
||||
=rhf6
|
||||
=2IML
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
Loading…
Reference in New Issue
Block a user