aboutsummaryrefslogtreecommitdiffstats
path: root/libelf
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2020-05-09 03:41:56 +0200
committerMark Wielaard <mark@klomp.org>2020-05-14 14:30:57 +0200
commit59587b33d472ee809250ffba77e38030939fc519 (patch)
tree21308ef0fdff2d479e5897fcc8df2c7931a7bef7 /libelf
parent2c167d49aa6db14a458bc8c33717efdd965c04c3 (diff)
downloadplatform_external_elfutils-59587b33d472ee809250ffba77e38030939fc519.tar.gz
platform_external_elfutils-59587b33d472ee809250ffba77e38030939fc519.tar.bz2
platform_external_elfutils-59587b33d472ee809250ffba77e38030939fc519.zip
libelf: Check __gelf_getehdr_rdlock call doesn't fail in elf_getdata.
GCC10 -fanalyzer with -flto notices __gelf_getehdr_rdlock can fail and that the result of the call in __libelf_set_rawdata_wrlock isn't checked, which can cause a dereference of NULL. Signed-off-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'libelf')
-rw-r--r--libelf/ChangeLog5
-rw-r--r--libelf/elf_getdata.c2
2 files changed, 7 insertions, 0 deletions
diff --git a/libelf/ChangeLog b/libelf/ChangeLog
index 56f5354c..fcea8aa9 100644
--- a/libelf/ChangeLog
+++ b/libelf/ChangeLog
@@ -1,3 +1,8 @@
+2020-05-08 Mark Wielaard <mark@klomp.org>
+
+ * elf_getdata.c (__libelf_set_rawdata_wrlock): Check
+ __gelf_getehdr_rdlock return value.
+
2020-04-25 Mark Wielaard <mark@klomp.org>
* elf_compress.c (__libelf_compress): Remove free (out_buf).
diff --git a/libelf/elf_getdata.c b/libelf/elf_getdata.c
index 40fe1694..0d8f8d2e 100644
--- a/libelf/elf_getdata.c
+++ b/libelf/elf_getdata.c
@@ -271,6 +271,8 @@ __libelf_set_rawdata_wrlock (Elf_Scn *scn)
{
GElf_Ehdr ehdr_mem;
GElf_Ehdr *ehdr = __gelf_getehdr_rdlock (elf, &ehdr_mem);
+ if (unlikely (ehdr == NULL))
+ return 1;
entsize = SH_ENTSIZE_HASH (ehdr);
}
else