update to 0.180
This commit is contained in:
parent
0de7616396
commit
d100ca1b12
Binary file not shown.
@ -1,20 +1,12 @@
|
|||||||
# -*- rpm-spec from http://elfutils.org/ -*-
|
# -*- rpm-spec from http://elfutils.org/ -*-
|
||||||
Name: elfutils
|
Name: elfutils
|
||||||
Version: 0.179
|
Version: 0.180
|
||||||
Release: 2
|
Release: 1
|
||||||
Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
|
Summary: A collection of utilities and DSOs to handle ELF files and DWARF data
|
||||||
URL: http://elfutils.org/
|
URL: http://elfutils.org/
|
||||||
License: GPLv3+ and (GPLv2+ or LGPLv3+)
|
License: GPLv3+ and (GPLv2+ or LGPLv3+)
|
||||||
Source: ftp://sourceware.org/pub/elfutils/%{version}/elfutils-%{version}.tar.bz2
|
Source: ftp://sourceware.org/pub/elfutils/%{version}/elfutils-%{version}.tar.bz2
|
||||||
|
|
||||||
Patch0000: libdwfl-Initialize-bits-to-NULL-in-dwfl_standard_fin.patch
|
|
||||||
Patch0001: libcpu-Replace-assert-with-goto-invalid_op-for-bad-p.patch
|
|
||||||
Patch0002: libelf-Fix-double-free-in-__libelf_compress-on-error.patch
|
|
||||||
Patch0003: libasm-Fix-double-fclose-in-asm_end.patch
|
|
||||||
Patch0004: libdw-Call-Dwarf-oom_handler-when-malloc-fails-in-__.patch
|
|
||||||
Patch0005: libdwfl-Fix-double-free-on-failure-path-in-gzip.c.patch
|
|
||||||
Patch0006: libdwfl-Handle-debugaltlink-in-dwfl_standard_find_de.patch
|
|
||||||
|
|
||||||
Provides: elfutils-libelf elfutils-default-yama-scope default-yama-scope elfutils-libs
|
Provides: elfutils-libelf elfutils-default-yama-scope default-yama-scope elfutils-libs
|
||||||
Obsoletes: elfutils-libelf elfutils-default-yama-scope elfutils-libs
|
Obsoletes: elfutils-libelf elfutils-default-yama-scope elfutils-libs
|
||||||
Requires: glibc >= 2.7 libstdc++
|
Requires: glibc >= 2.7 libstdc++
|
||||||
@ -112,13 +104,6 @@ such servers to download those files on demand.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0000 -p1
|
|
||||||
%patch0001 -p1
|
|
||||||
%patch0002 -p1
|
|
||||||
%patch0003 -p1
|
|
||||||
%patch0004 -p1
|
|
||||||
%patch0005 -p1
|
|
||||||
%patch0006 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%configure --program-prefix=%{_programprefix}
|
%configure --program-prefix=%{_programprefix}
|
||||||
@ -246,6 +231,9 @@ exit 0
|
|||||||
%systemd_postun_with_restart debuginfod.service
|
%systemd_postun_with_restart debuginfod.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Aug 6 2020 zhangguangzhi<zhangguangzhi3@huawei.com> - 0.180-1
|
||||||
|
- update to 0.180
|
||||||
|
|
||||||
* Mon Jun 29 2020 gengqihu<gengqihu1@huawei.com> - 0.179-2
|
* Mon Jun 29 2020 gengqihu<gengqihu1@huawei.com> - 0.179-2
|
||||||
- quality enhancement synchronization git patch
|
- quality enhancement synchronization git patch
|
||||||
|
|
||||||
|
|||||||
4
elfutils.yaml
Normal file
4
elfutils.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
version_control: git
|
||||||
|
src_repo: https://sourceware.org/git/elfutils.git
|
||||||
|
tag_prefix: "^elfutils-"
|
||||||
|
seperator: "."
|
||||||
@ -1,46 +0,0 @@
|
|||||||
From 8c5bd878a940817088fd7907eb9d503ec98d3437 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Sun, 26 Apr 2020 01:20:57 +0200
|
|
||||||
Subject: [PATCH 2/5] libasm: Fix double fclose in asm_end.
|
|
||||||
|
|
||||||
GCC10 -fanalyzer found a double fclose in asm_end. asm_end can call
|
|
||||||
text_end, which calls fclose and checks for errors, then asm_end
|
|
||||||
calls __libasm_finictx which can call fclose again (but doesn't
|
|
||||||
check for errors). Call fflush in text_end instead. fflush will
|
|
||||||
generate the same error fclose would if something went wrong writing
|
|
||||||
out the file.
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libasm/ChangeLog | 4 ++++
|
|
||||||
libasm/asm_end.c | 2 +-
|
|
||||||
2 files changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
|
|
||||||
index 7b0d3df..2c092ab 100644
|
|
||||||
--- a/libasm/ChangeLog
|
|
||||||
+++ b/libasm/ChangeLog
|
|
||||||
@@ -1,3 +1,7 @@
|
|
||||||
+2020-04-25 Mark Wielaard <mark@klomp.org>
|
|
||||||
+
|
|
||||||
+ * asm_end.c (text_end): Call fflush instead of fclose.
|
|
||||||
+
|
|
||||||
2020-01-08 Mark Wielaard <mark@klomp.org>
|
|
||||||
|
|
||||||
* libasm.h: Don't include libebl.h. Define an opaque Ebl handle.
|
|
||||||
diff --git a/libasm/asm_end.c b/libasm/asm_end.c
|
|
||||||
index 99e9501..3b8582f 100644
|
|
||||||
--- a/libasm/asm_end.c
|
|
||||||
+++ b/libasm/asm_end.c
|
|
||||||
@@ -47,7 +47,7 @@
|
|
||||||
static int
|
|
||||||
text_end (AsmCtx_t *ctx __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
- if (fclose (ctx->out.file) != 0)
|
|
||||||
+ if (fflush (ctx->out.file) != 0)
|
|
||||||
{
|
|
||||||
__libasm_seterrno (ASM_E_IOERROR);
|
|
||||||
return -1;
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,72 +0,0 @@
|
|||||||
From 25d40a626d36c140c8bb309f410f25af2836ec9b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Thu, 16 Apr 2020 15:41:57 +0200
|
|
||||||
Subject: [PATCH] libcpu: Replace assert with goto invalid_op for bad prefix.
|
|
||||||
|
|
||||||
https://sourceware.org/bugzilla/show_bug.cgi?id=25831
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libcpu/ChangeLog | 5 +++++
|
|
||||||
libcpu/i386_disasm.c | 11 +++++++----
|
|
||||||
2 files changed, 12 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libcpu/ChangeLog b/libcpu/ChangeLog
|
|
||||||
index 7079651..a8b2b95 100644
|
|
||||||
--- a/libcpu/ChangeLog
|
|
||||||
+++ b/libcpu/ChangeLog
|
|
||||||
@@ -1,3 +1,8 @@
|
|
||||||
+2020-04-16 Mark Wielaard <mark@klomp.org>
|
|
||||||
+
|
|
||||||
+ * i386_disasm.c (i386_disasm): Replace assert with goto invalid_op
|
|
||||||
+ for bad prefix.
|
|
||||||
+
|
|
||||||
2019-12-11 Omar Sandoval <osandov@fb.com>
|
|
||||||
|
|
||||||
* Makefile.am (i386_lex_CFLAGS): Add -Wno-implicit-fallthrough.
|
|
||||||
diff --git a/libcpu/i386_disasm.c b/libcpu/i386_disasm.c
|
|
||||||
index 4422ffa..32df8cd 100644
|
|
||||||
--- a/libcpu/i386_disasm.c
|
|
||||||
+++ b/libcpu/i386_disasm.c
|
|
||||||
@@ -407,7 +407,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
|
|
||||||
|
|
||||||
++curr;
|
|
||||||
|
|
||||||
- assert (last_prefix_bit != 0);
|
|
||||||
+ if (last_prefix_bit == 0)
|
|
||||||
+ goto invalid_op;
|
|
||||||
correct_prefix = last_prefix_bit;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -445,8 +446,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
|
|
||||||
the input data. */
|
|
||||||
goto do_ret;
|
|
||||||
|
|
||||||
- assert (correct_prefix == 0
|
|
||||||
- || (prefixes & correct_prefix) != 0);
|
|
||||||
+ if (correct_prefix != 0 && (prefixes & correct_prefix) == 0)
|
|
||||||
+ goto invalid_op;
|
|
||||||
prefixes ^= correct_prefix;
|
|
||||||
|
|
||||||
if (0)
|
|
||||||
@@ -473,7 +474,8 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
|
|
||||||
|
|
||||||
if (data == end)
|
|
||||||
{
|
|
||||||
- assert (prefixes != 0);
|
|
||||||
+ if (prefixes == 0)
|
|
||||||
+ goto invalid_op;
|
|
||||||
goto print_prefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1125,6 +1127,7 @@ i386_disasm (Ebl *ebl __attribute__((unused)),
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Invalid (or at least unhandled) opcode. */
|
|
||||||
+ invalid_op:
|
|
||||||
if (prefixes != 0)
|
|
||||||
goto print_prefix;
|
|
||||||
/* Make sure we get past the unrecognized opcode if we haven't yet. */
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 5436c7529dd9b24f62e3df10e30d5da53da16efd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Sun, 26 Apr 2020 01:41:27 +0200
|
|
||||||
Subject: [PATCH 3/5] libdw: Call Dwarf oom_handler() when malloc fails in
|
|
||||||
__libdw_alloc_tail.
|
|
||||||
|
|
||||||
GCC10 -fanalyzer found a possibly-NULL dereference after a failed
|
|
||||||
malloc in __libdw_alloc_tail. In this case we should call the Dwarf
|
|
||||||
oom_handler as is done in other places where an essential malloc
|
|
||||||
call fails. The oom_handler cannot return and will likely just abort.
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libdw/libdw_alloc.c | 5 +++++
|
|
||||||
1 files changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/libdw/libdw_alloc.c b/libdw/libdw_alloc.c
|
|
||||||
index e0281a3..b3e5334 100644
|
|
||||||
--- a/libdw/libdw_alloc.c
|
|
||||||
+++ b/libdw/libdw_alloc.c
|
|
||||||
@@ -87,6 +87,11 @@ __libdw_alloc_tail (Dwarf *dbg)
|
|
||||||
if (result == NULL)
|
|
||||||
{
|
|
||||||
result = malloc (dbg->mem_default_size);
|
|
||||||
+ if (result == NULL)
|
|
||||||
+ {
|
|
||||||
+ pthread_rwlock_unlock (&dbg->mem_rwl);
|
|
||||||
+ dbg->oom_handler();
|
|
||||||
+ }
|
|
||||||
result->size = dbg->mem_default_size
|
|
||||||
- offsetof (struct libdw_memblock, mem);
|
|
||||||
result->remaining = result->size;
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
From a894c63dba7019ceb8f6aa2c3cdcef519c65c92d Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Sun, 26 Apr 2020 02:10:41 +0200
|
|
||||||
Subject: [PATCH 4/5] libdwfl: Fix double free on failure path in gzip.c.
|
|
||||||
|
|
||||||
GCC10 -fanalyzer found a double free when openstream failed. When
|
|
||||||
openstream fails __libdw_gunzip will call fail, which frees the
|
|
||||||
state->buffer. But openstream can call zlib_fail, which will also
|
|
||||||
call fail. Instead of calling zlib_fail, just return the error
|
|
||||||
that zlib_fail would have returned.
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libdwfl/ChangeLog | 5 +++++
|
|
||||||
libdwfl/gzip.c | 2 +-
|
|
||||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
|
|
||||||
index 4ddc9ad..daedaed 100644
|
|
||||||
--- a/libdwfl/ChangeLog
|
|
||||||
+++ b/libdwfl/ChangeLog
|
|
||||||
@@ -1,3 +1,8 @@
|
|
||||||
+2020-04-25 Mark Wielaard <mark@klomp.org>
|
|
||||||
+
|
|
||||||
+ * gzip.c (open_stream): Return DWFL_E_NOMEM instead of calling
|
|
||||||
+ zlib_fail.
|
|
||||||
+
|
|
||||||
2020-04-16 Mark Wielaard <mark@klomp.org>
|
|
||||||
|
|
||||||
* find-debuginfo.c (dwfl_standard_find_debuginfo): Initialize bits
|
|
||||||
diff --git a/libdwfl/gzip.c b/libdwfl/gzip.c
|
|
||||||
index 043d0b6..e9988cc 100644
|
|
||||||
--- a/libdwfl/gzip.c
|
|
||||||
+++ b/libdwfl/gzip.c
|
|
||||||
@@ -153,7 +153,7 @@ open_stream (int fd, off_t start_offset, struct unzip_state *state)
|
|
||||||
if (unlikely (state->zf == NULL))
|
|
||||||
{
|
|
||||||
close (d);
|
|
||||||
- return zlib_fail (state, Z (MEM_ERROR));
|
|
||||||
+ return DWFL_E_NOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* From here on, zlib will close D. */
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,74 +0,0 @@
|
|||||||
From b1d2404cc6ca0d9ce786e229a87c24db49163cfe Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Thu, 30 Apr 2020 23:57:26 +0200
|
|
||||||
Subject: [PATCH 5/5] libdwfl: Handle debugaltlink in
|
|
||||||
dwfl_standard_find_debuginfo.
|
|
||||||
|
|
||||||
When we fall back to the debuginfod client then we need to do the
|
|
||||||
same trick we do for local lookups in dwfl_build_id_find_debuginfo.
|
|
||||||
If the debug file (dw) is already set, then we must be looking for
|
|
||||||
the altfile. But we cannot use the actual file/path name given as
|
|
||||||
hint. We'll have to lookup the alt file "build-id". Because the
|
|
||||||
debuginfod client only handles build-ids.
|
|
||||||
|
|
||||||
Previously we would use the build-id of the main file which meant
|
|
||||||
the debuginfod client would give us another copy of the debug file,
|
|
||||||
which would then be set as its own altfile. This caused lots of
|
|
||||||
confusion...
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libdwfl/ChangeLog | 5 +++++
|
|
||||||
libdwfl/find-debuginfo.c | 23 +++++++++++++++++++++--
|
|
||||||
2 files changed, 26 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
|
|
||||||
index daedaed..3f9cd66 100644
|
|
||||||
--- a/libdwfl/ChangeLog
|
|
||||||
+++ b/libdwfl/ChangeLog
|
|
||||||
@@ -1,3 +1,8 @@
|
|
||||||
+2020-04-30 Mark Wielaard <mark@klomp.org>
|
|
||||||
+
|
|
||||||
+ * find-debuginfo.c (dwfl_standard_find_debuginfo): When mod->dw
|
|
||||||
+ is already set then try fetching debugaltlink.
|
|
||||||
+
|
|
||||||
2020-04-25 Mark Wielaard <mark@klomp.org>
|
|
||||||
|
|
||||||
* gzip.c (open_stream): Return DWFL_E_NOMEM instead of calling
|
|
||||||
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
|
|
||||||
index 2dd11c4..4cfd0b8 100644
|
|
||||||
--- a/libdwfl/find-debuginfo.c
|
|
||||||
+++ b/libdwfl/find-debuginfo.c
|
|
||||||
@@ -398,8 +398,27 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod,
|
|
||||||
free (canon);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (fd < 0 && bits_len > 0)
|
|
||||||
- fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len);
|
|
||||||
+ /* Still nothing? Try if we can use the debuginfod client.
|
|
||||||
+ But note that we might be looking for the alt file.
|
|
||||||
+ We use the same trick as dwfl_build_id_find_debuginfo.
|
|
||||||
+ If the debug file (dw) is already set, then we must be
|
|
||||||
+ looking for the altfile. But we cannot use the actual
|
|
||||||
+ file/path name given as hint. We'll have to lookup the
|
|
||||||
+ alt file "build-id". Because the debuginfod client only
|
|
||||||
+ handles build-ids. */
|
|
||||||
+ if (fd < 0)
|
|
||||||
+ {
|
|
||||||
+ if (mod->dw != NULL)
|
|
||||||
+ {
|
|
||||||
+ const char *altname;
|
|
||||||
+ bits_len = INTUSE(dwelf_dwarf_gnu_debugaltlink) (mod->dw, &altname,
|
|
||||||
+ (const void **)
|
|
||||||
+ &bits);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (bits_len > 0)
|
|
||||||
+ fd = __libdwfl_debuginfod_find_debuginfo (mod->dwfl, bits, bits_len);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,67 +0,0 @@
|
|||||||
From 39f28eaf8c821d71d57ffc759655ec4168d0bead Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Thu, 16 Apr 2020 17:45:31 +0200
|
|
||||||
Subject: [PATCH 2/2] libdwfl: Initialize bits to NULL in
|
|
||||||
dwfl_standard_find_debuginfo for LTO.
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
GCC10 LTO is too smart (and somewhat cryptic):
|
|
||||||
|
|
||||||
find-debuginfo.c: In function ‘dwfl_standard_find_debuginfo’:
|
|
||||||
debuginfod-client.c:85:8: error: ‘bits’ may be used uninitialized
|
|
||||||
in this function [-Werror=maybe-uninitialized]
|
|
||||||
find-debuginfo.c:360:24: note: ‘bits’ was declared here
|
|
||||||
lto1: all warnings being treated as errors
|
|
||||||
|
|
||||||
So it inlines __libdwfl_debuginfod_find_debuginfo into
|
|
||||||
dwfl_standard_find_debuginfo and since it cannot see into the
|
|
||||||
function pointer (*fp_debuginfod_find_debuginfo), it assumes that
|
|
||||||
build_id_bit (== bits in dwfl_standard_find_debuginfo) will be used
|
|
||||||
by the called function and it might not be initialized.
|
|
||||||
But if you read the code the there is a check for build_id_len > 0
|
|
||||||
to see whether bits is or isn't initialized before using bits.
|
|
||||||
But gcc isn't smart enough to figure that out.
|
|
||||||
|
|
||||||
Maybe that actually should be an heuristic gcc lto should use.
|
|
||||||
If the callchain I am inlining is so deep that I cannot figure out
|
|
||||||
maybe-uninitialized variables anymore I should stop inlining.
|
|
||||||
|
|
||||||
For now just help GCC out and initialize bits to NULL.
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libdwfl/ChangeLog | 5 +++++
|
|
||||||
libdwfl/find-debuginfo.c | 2 +-
|
|
||||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/libdwfl/ChangeLog b/libdwfl/ChangeLog
|
|
||||||
index 0b95490..4ddc9ad 100644
|
|
||||||
--- a/libdwfl/ChangeLog
|
|
||||||
+++ b/libdwfl/ChangeLog
|
|
||||||
@@ -1,3 +1,8 @@
|
|
||||||
+2020-04-16 Mark Wielaard <mark@klomp.org>
|
|
||||||
+
|
|
||||||
+ * find-debuginfo.c (dwfl_standard_find_debuginfo): Initialize bits
|
|
||||||
+ to NULL.
|
|
||||||
+
|
|
||||||
2020-01-24 Mark Wielaard <mark@klomp.org>
|
|
||||||
|
|
||||||
* linux-kernel-modules.c (find_kernel_elf): Check release isn't NULL.
|
|
||||||
diff --git a/libdwfl/find-debuginfo.c b/libdwfl/find-debuginfo.c
|
|
||||||
index 4085764..2dd11c4 100644
|
|
||||||
--- a/libdwfl/find-debuginfo.c
|
|
||||||
+++ b/libdwfl/find-debuginfo.c
|
|
||||||
@@ -357,7 +357,7 @@ dwfl_standard_find_debuginfo (Dwfl_Module *mod,
|
|
||||||
{
|
|
||||||
/* First try by build ID if we have one. If that succeeds or fails
|
|
||||||
other than just by finding nothing, that's all we do. */
|
|
||||||
- const unsigned char *bits;
|
|
||||||
+ const unsigned char *bits = NULL;
|
|
||||||
GElf_Addr vaddr;
|
|
||||||
int bits_len;
|
|
||||||
if ((bits_len = INTUSE(dwfl_module_build_id) (mod, &bits, &vaddr)) > 0)
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
@ -1,45 +0,0 @@
|
|||||||
From a5d73b3e51afada171da9781089cd0e8fc9f64a6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mark Wielaard <mark@klomp.org>
|
|
||||||
Date: Sat, 25 Apr 2020 01:21:12 +0200
|
|
||||||
Subject: [PATCH 1/5] libelf: Fix double free in __libelf_compress on error
|
|
||||||
path.
|
|
||||||
|
|
||||||
In commit 2092865a7e589ff805caa47e69ac9630f34d4f2a
|
|
||||||
"libelf: {de,}compress: ensure zlib resource cleanup" we added a
|
|
||||||
call to deflate_cleanup to make sure all resources were freed.
|
|
||||||
As GCC10 -fanalyzer points out that could cause a double free
|
|
||||||
of out_buf. Fix by removing the free (out_buf) in __libelf_compress.
|
|
||||||
|
|
||||||
Signed-off-by: Mark Wielaard <mark@klomp.org>
|
|
||||||
---
|
|
||||||
libelf/ChangeLog | 4 ++++
|
|
||||||
libelf/elf_compress.c | 1 -
|
|
||||||
2 files changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
|
|
||||||
index 8f79a62..56f5354 100644
|
|
||||||
--- a/libelf/ChangeLog
|
|
||||||
+++ b/libelf/ChangeLog
|
|
||||||
@@ -1,3 +1,7 @@
|
|
||||||
+2020-04-25 Mark Wielaard <mark@klomp.org>
|
|
||||||
+
|
|
||||||
+ * elf_compress.c (__libelf_compress): Remove free (out_buf).
|
|
||||||
+
|
|
||||||
2020-03-18 Omar Sandoval <osandov@fb.com>
|
|
||||||
|
|
||||||
* elf_getphdrnum.c (__elf_getphdrnum_rdlock): Call
|
|
||||||
diff --git a/libelf/elf_compress.c b/libelf/elf_compress.c
|
|
||||||
index b1b8968..e5d3d2e 100644
|
|
||||||
--- a/libelf/elf_compress.c
|
|
||||||
+++ b/libelf/elf_compress.c
|
|
||||||
@@ -113,7 +113,6 @@ __libelf_compress (Elf_Scn *scn, size_t hsize, int ei_data,
|
|
||||||
int zrc = deflateInit (&z, Z_BEST_COMPRESSION);
|
|
||||||
if (zrc != Z_OK)
|
|
||||||
{
|
|
||||||
- free (out_buf);
|
|
||||||
__libelf_seterrno (ELF_E_COMPRESS_ERROR);
|
|
||||||
return deflate_cleanup(NULL, NULL);
|
|
||||||
}
|
|
||||||
--
|
|
||||||
1.8.3.1
|
|
||||||
|
|
||||||
Loading…
x
Reference in New Issue
Block a user