diff --git a/libs/libc/modlib/modlib_bind.c b/libs/libc/modlib/modlib_bind.c index af1e09366a4..5b8cce26c2d 100644 --- a/libs/libc/modlib/modlib_bind.c +++ b/libs/libc/modlib/modlib_bind.c @@ -333,7 +333,8 @@ static int modlib_relocate(FAR struct module_s *modp, /* Calculate the relocation address. */ - if (rel->r_offset + sizeof(uint32_t) > dstsec->sh_size) + if (rel->r_offset < 0 || + rel->r_offset > dstsec->sh_size) { berr("ERROR: Section %d reloc %d: " "Relocation address out of range, " @@ -528,7 +529,8 @@ static int modlib_relocateadd(FAR struct module_s *modp, /* Calculate the relocation address. */ - if (rela->r_offset + sizeof(uint32_t) > dstsec->sh_size) + if (rela->r_offset < 0 || + rela->r_offset > dstsec->sh_size) { berr("ERROR: Section %d reloc %d: " "Relocation address out of range, "