diff options
Diffstat (limited to 'libelf/gelf_rel.c')
-rw-r--r-- | libelf/gelf_rel.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/libelf/gelf_rel.c b/libelf/gelf_rel.c index eb057177d4cc..3b798c042201 100644 --- a/libelf/gelf_rel.c +++ b/libelf/gelf_rel.c @@ -32,7 +32,7 @@ #include "_libelf.h" -ELFTC_VCSID("$Id: gelf_rel.c 2272 2011-12-03 17:07:31Z jkoshy $"); +ELFTC_VCSID("$Id: gelf_rel.c 2998 2014-03-18 17:19:00Z jkoshy $"); GElf_Rel * gelf_getrel(Elf_Data *ed, int ndx, GElf_Rel *dst) @@ -71,8 +71,9 @@ gelf_getrel(Elf_Data *ed, int ndx, GElf_Rel *dst) msz = _libelf_msize(ELF_T_REL, ec, e->e_version); assert(msz > 0); + assert(ndx >= 0); - if (msz * ndx >= d->d_data.d_size) { + if (msz * (size_t) ndx >= d->d_data.d_size) { LIBELF_SET_ERROR(ARGUMENT, 0); return (NULL); } @@ -130,9 +131,11 @@ gelf_update_rel(Elf_Data *ed, int ndx, GElf_Rel *dr) } msz = _libelf_msize(ELF_T_REL, ec, e->e_version); + assert(msz > 0); + assert(ndx >= 0); - if (msz * ndx >= d->d_data.d_size) { + if (msz * (size_t) ndx >= d->d_data.d_size) { LIBELF_SET_ERROR(ARGUMENT, 0); return (0); } @@ -147,8 +150,9 @@ gelf_update_rel(Elf_Data *ed, int ndx, GElf_Rel *dr) LIBELF_SET_ERROR(RANGE, 0); return (0); } - rel32->r_info = ELF32_R_INFO(ELF64_R_SYM(dr->r_info), - ELF64_R_TYPE(dr->r_info)); + rel32->r_info = ELF32_R_INFO( + (Elf32_Word) ELF64_R_SYM(dr->r_info), + (Elf32_Word) ELF64_R_TYPE(dr->r_info)); } else { rel64 = (Elf64_Rel *) d->d_data.d_buf + ndx; |