diff options
| author | Mark Wielaard <[email protected]> | 2020-11-01 18:51:02 +0100 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2020-11-06 18:39:40 +0100 |
| commit | 86cedebad363184ef5e4e4f51e1ee2f701e32ad3 (patch) | |
| tree | f2245a6acf3890626b7e7e31704187243b0b8624 | |
| parent | f2272dbefd6dbd67af4d46eb6e748522c0c60d74 (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]>
| -rw-r--r-- | libelf/ChangeLog | 5 | ||||
| -rw-r--r-- | libelf/elf_getphdrnum.c | 1 |
2 files changed, 6 insertions, 0 deletions
diff --git a/libelf/ChangeLog b/libelf/ChangeLog index 7bd15a28..aee1ffff 100644 --- a/libelf/ChangeLog +++ b/libelf/ChangeLog @@ -1,5 +1,10 @@ 2020-11-01 Mark Wielaard <[email protected]> + * elf_getphdrnum.c (__elf_getphdrnum_rdlock): Set *dst to zero on + error. + +2020-11-01 Mark Wielaard <[email protected]> + * libelfP.h (__libelf_data_type): Take an GElf_Ehdr instead of an Elf handle. * elf_getdata.c (__libelf_data_type): Likewise. And check ehdr 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; } |
