Fix #1: Segmentation fault when using NOBITS sections #2

Merged
mhu merged 3 commits from fix-segmentation-fault into master 2023-01-04 15:11:49 +01:00
2 changed files with 14 additions and 3 deletions
Showing only changes of commit e09a07b3d3 - Show all commits

View File

@ -423,8 +423,16 @@ int elf_patch_compute_crc_over_section(elfpatch_handle_t *ep, const char *sectio
}
print_debug("Section data length: %lu\n", data->d_size);
if (!data->d_size)
if (!data->d_size) {
print_err("Section %s contains no data.\n", section);
return -2;
}
/* NOBIT sections have a length but no data in the file. Abort in this case */
if (!data->d_buf) {
print_err("Section %s does not contain loadable data.\n", section);
return -2;
}
/* If big endian or granularity is byte, simply compute CRC. No reordering is necessary */
if (!little_endian || granularity == GRANULARITY_BYTE) {

View File

@ -407,12 +407,14 @@ int main(int argc, char **argv)
/* Check if all sections are present */
if (check_all_sections_present(ep, cmd_opts.section_list)) {
ret = -2;
goto free_cmds;
goto ret_close_elf;
}
/* Compute CRCs over sections */
crcs = (uint32_t *)malloc(sl_list_length(cmd_opts.section_list) * sizeof(uint32_t));
compute_crcs(ep, cmd_opts.section_list, &cmd_opts, crcs);
if (compute_crcs(ep, cmd_opts.section_list, &cmd_opts, crcs)) {
goto ret_close_elf;
}
if (reporting_get_verbosity()) {
print_crcs(cmd_opts.section_list, crcs);
@ -427,6 +429,7 @@ int main(int argc, char **argv)
}
}
ret_close_elf:
elf_patch_close_and_free(ep);
free_cmds: