summaryrefslogtreecommitdiffstats
path: root/libelf/elf_getphdrnum.c
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2020-11-01 18:51:02 +0100
committerMark Wielaard <[email protected]>2020-11-06 18:39:40 +0100
commit86cedebad363184ef5e4e4f51e1ee2f701e32ad3 (patch)
treef2245a6acf3890626b7e7e31704187243b0b8624 /libelf/elf_getphdrnum.c
parentf2272dbefd6dbd67af4d46eb6e748522c0c60d74 (diff)
libelf: Set dst to zero on failure in __elf_getphdrnum_rdlock
GCC with -flto finds some (very) unlikely error paths. It flags callers of __elf_getphdrnum_chk_rdlock with *dst not yet set because an internal call to __elf_getphdrnum_rdlock might not initialize *dst either in one particular failure path. The sanity check that __elf_getphdrnum_chk_rdlock then performs might happen against uninitialized data. So just set *dst to zero on failure in __elf_getphdrnum_rdlock so any caller can simply check either the result/error code or whether *dst is zero or not. Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'libelf/elf_getphdrnum.c')
-rw-r--r--libelf/elf_getphdrnum.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/libelf/elf_getphdrnum.c b/libelf/elf_getphdrnum.c
index 53617dfc..60ebec58 100644
--- a/libelf/elf_getphdrnum.c
+++ b/libelf/elf_getphdrnum.c
@@ -44,6 +44,7 @@ __elf_getphdrnum_rdlock (Elf *elf, size_t *dst)
if (unlikely (elf->state.elf64.ehdr == NULL))
{
/* Maybe no ELF header was created yet. */
+ *dst = 0;
__libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
return -1;
}