Coverity reported:
CID
1321723 (#1 of 1): Unintended sign extension
(SIGN_EXTENSION)sign_extension: Suspicious implicit sign extension:
elf->ehdr->e_shentsize with type unsigned short (16 bits, unsigned) is
promoted in index * elf->ehdr->e_shentsize to type int (32 bits,
signed), then sign-extended to type unsigned long (64 bits, unsigned).
If index * elf->ehdr->e_shentsize is greater than 0x7FFFFFFF, the upper
bits of the result will all be 1.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
uint16_t index)
{
struct lttng_ust_elf_shdr *shdr = NULL;
- long offset;
+ off_t offset;
if (!elf) {
goto error;
goto error;
}
- offset = elf->ehdr->e_shoff + index * elf->ehdr->e_shentsize;
+ offset = (off_t) elf->ehdr->e_shoff
+ + (off_t) index * elf->ehdr->e_shentsize;
if (lseek(elf->fd, offset, SEEK_SET) < 0) {
goto error;
}