contrib/elf2dmp: Ensure segment fits in file
This makes elf2dmp more robust against corrupted inputs. Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Tested-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu> Message-id: 20240307-elf2dmp-v4-12-4f324ad4d99d@daynix.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
2aa205f7c6
commit
667909478b
@ -88,11 +88,12 @@ void pa_space_create(struct pa_space *ps, QEMU_Elf *qemu_elf)
|
|||||||
ps->block = g_new(struct pa_block, ps->block_nr);
|
ps->block = g_new(struct pa_block, ps->block_nr);
|
||||||
|
|
||||||
for (i = 0; i < phdr_nr; i++) {
|
for (i = 0; i < phdr_nr; i++) {
|
||||||
if (phdr[i].p_type == PT_LOAD) {
|
if (phdr[i].p_type == PT_LOAD && phdr[i].p_offset < qemu_elf->size) {
|
||||||
ps->block[block_i] = (struct pa_block) {
|
ps->block[block_i] = (struct pa_block) {
|
||||||
.addr = (uint8_t *)qemu_elf->map + phdr[i].p_offset,
|
.addr = (uint8_t *)qemu_elf->map + phdr[i].p_offset,
|
||||||
.paddr = phdr[i].p_paddr,
|
.paddr = phdr[i].p_paddr,
|
||||||
.size = phdr[i].p_filesz,
|
.size = MIN(phdr[i].p_filesz,
|
||||||
|
qemu_elf->size - phdr[i].p_offset),
|
||||||
};
|
};
|
||||||
pa_block_align(&ps->block[block_i]);
|
pa_block_align(&ps->block[block_i]);
|
||||||
block_i = ps->block[block_i].size ? (block_i + 1) : block_i;
|
block_i = ps->block[block_i].size ? (block_i + 1) : block_i;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user