contrib/elf2dmp: Ensure phdrs fit in file
Callers of elf64_getphdr() and elf_getphdrnum() assume phdrs are accessible. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2202 Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Tested-by: Viktor Prutyanov <viktor.prutyanov@phystech.edu> Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Message-id: 20240307-elf2dmp-v4-19-4f324ad4d99d@daynix.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
9de37c2883
commit
98d16e5f72
@ -132,6 +132,7 @@ static void exit_states(QEMU_Elf *qe)
|
|||||||
static bool check_ehdr(QEMU_Elf *qe)
|
static bool check_ehdr(QEMU_Elf *qe)
|
||||||
{
|
{
|
||||||
Elf64_Ehdr *ehdr = qe->map;
|
Elf64_Ehdr *ehdr = qe->map;
|
||||||
|
uint64_t phendoff;
|
||||||
|
|
||||||
if (sizeof(Elf64_Ehdr) > qe->size) {
|
if (sizeof(Elf64_Ehdr) > qe->size) {
|
||||||
eprintf("Invalid input dump file size\n");
|
eprintf("Invalid input dump file size\n");
|
||||||
@ -173,6 +174,13 @@ static bool check_ehdr(QEMU_Elf *qe)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (umul64_overflow(ehdr->e_phnum, sizeof(Elf64_Phdr), &phendoff) ||
|
||||||
|
uadd64_overflow(phendoff, ehdr->e_phoff, &phendoff) ||
|
||||||
|
phendoff > qe->size) {
|
||||||
|
eprintf("phdrs do not fit in file\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user