diff --git a/sys/kern/link_elf.c b/sys/kern/link_elf.c --- a/sys/kern/link_elf.c +++ b/sys/kern/link_elf.c @@ -588,10 +588,11 @@ static int parse_dynamic(elf_file_t ef) { - Elf_Dyn *dp; + size_t dynmax = phdyn->p_filesz / sizeof(Elf_Dyn); + Elf_Dyn *dp, *dp_end = ef->dynamic + dynmax; int plttype = DT_REL; - for (dp = ef->dynamic; dp->d_tag != DT_NULL; dp++) { + for (dp = ef->dynamic; dp < dp_end && dp->d_tag != DT_NULL; dp++) { switch (dp->d_tag) { case DT_HASH: {