Cleanup: eliminate implicit sign-extension
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 4 Sep 2015 05:43:31 +0000 (01:43 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 4 Sep 2015 05:43:31 +0000 (01:43 -0400)
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>
liblttng-ust/lttng-ust-elf.c

index dd50f2b674d689d2be9831536790e064765b8164..8d3fc573f1b4fe8f0cbf655c54fa329c77efd2d7 100644 (file)
@@ -101,7 +101,7 @@ struct lttng_ust_elf_shdr *lttng_ust_elf_get_shdr(struct lttng_ust_elf *elf,
                                                uint16_t index)
 {
        struct lttng_ust_elf_shdr *shdr = NULL;
-       long offset;
+       off_t offset;
 
        if (!elf) {
                goto error;
@@ -116,7 +116,8 @@ struct lttng_ust_elf_shdr *lttng_ust_elf_get_shdr(struct lttng_ust_elf *elf,
                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;
        }
This page took 0.025346 seconds and 4 git commands to generate.