Fix: lttng-elf: wrong error label used by error path
[lttng-tools.git] / src / common / lttng-elf.c
index bef20ffd4bd52eceb7fec353f885e22e6e9db6d8..807d785cedca27e5b4058193e203bf410a87a349 100644 (file)
                dst_sym.st_size = src_sym.st_size;      \
        } while (0)
 
-/* Both 32bit and 64bit use the same 1 byte field for type. (See elf.h) */
-#define ELF_ST_TYPE(val) ELF32_ST_TYPE(val)
+#ifndef ELFCLASSNUM
+#define ELFCLASSNUM 3
+#endif
+
+#ifndef ELFDATANUM
+#define ELFDATANUM 3
+#endif
+
+#ifndef EV_NUM
+#define EV_NUM 2
+#endif
 
 struct lttng_elf_ehdr {
        uint16_t e_type;
@@ -814,6 +823,12 @@ int lttng_elf_get_symbol_offset(int fd, char *symbol, uint64_t *offset)
        }
 
        /* Get the number of symbol in the table for the iteration. */
+       if (symtab_hdr.sh_entsize == 0) {
+               DBG("Invalid ELF string table entry size.");
+               ret = LTTNG_ERR_ELF_PARSING;
+               goto free_string_table_data;
+       }
+
        sym_count = symtab_hdr.sh_size / symtab_hdr.sh_entsize;
 
        /* Loop over all symbol. */
@@ -846,7 +861,8 @@ int lttng_elf_get_symbol_offset(int fd, char *symbol, uint64_t *offset)
                /*
                 * If the current symbol is not a function; skip to the next symbol.
                 */
-               if (ELF_ST_TYPE(curr_sym.st_info) != STT_FUNC) {
+               /* Both 32bit and 64bit use the same 1 byte field for type. (See elf.h) */
+               if (ELF32_ST_TYPE(curr_sym.st_info) != STT_FUNC) {
                        continue;
                }
 
This page took 0.024321 seconds and 4 git commands to generate.