An Elf descriptor has a "zero" class until the Ehdr is created.
elf_getdata_rawchunk needs a valid class for the align table lookup.
* libelf/elf_getdata_rawchunk.c (elf_getdata_rawchunk): Return
NULL and set libelf errno to ELF_E_WRONG_ORDER_EHDR, when
class is 0.
Signed-off-by: Mark Wielaard <[email protected]>
---
libelf/elf_getdata_rawchunk.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/libelf/elf_getdata_rawchunk.c b/libelf/elf_getdata_rawchunk.c
index cbda7046f9df..d2610b6efa97 100644
--- a/libelf/elf_getdata_rawchunk.c
+++ b/libelf/elf_getdata_rawchunk.c
@@ -81,6 +81,13 @@ elf_getdata_rawchunk (Elf *elf, int64_t offset, size_t size,
Elf_Type type)
return NULL;
}
+ /* Class is set from the Ehdr. */
+ if (unlikely (elf->class == 0))
+ {
+ __libelf_seterrno (ELF_E_WRONG_ORDER_EHDR);
+ return NULL;
+ }
+
/* Get the raw bytes from the file. */
void *rawchunk;
int flags = 0;
--
2.56.0