[PATCH 3/5] lib: fwts_alloc: avoid using void * pointer arithmetic
Colin King
colin.king at canonical.com
Thu Sep 11 14:05:27 UTC 2014
From: Colin Ian King <colin.king at canonical.com>
cppcheck reports:
When using void pointers in calculations, the behaviour is undefined
Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
src/lib/src/fwts_alloc.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/src/lib/src/fwts_alloc.c b/src/lib/src/fwts_alloc.c
index 9610159..2a8fcd9 100644
--- a/src/lib/src/fwts_alloc.c
+++ b/src/lib/src/fwts_alloc.c
@@ -19,6 +19,7 @@
#include <sys/mman.h>
#include <string.h>
#include <stdio.h>
+#include <stdint.h>
#include <unistd.h>
#include <stddef.h>
@@ -83,7 +84,7 @@ static void *fwts_low_mmap(const size_t requested_size)
if ((first_addr_start == NULL) &&
(addr_start > (void*)LIMIT_START)) {
size_t sz = (requested_size + CHUNK_SIZE) & ~(CHUNK_SIZE - 1);
- void *addr = addr_start - sz;
+ void *addr = (uint8_t*)addr_start - sz;
/*
* If addr is over the 2GB limit and we know
@@ -108,7 +109,7 @@ static void *fwts_low_mmap(const size_t requested_size)
*/
if ((last_addr_end != NULL) &&
(last_addr_end < (void*)LIMIT_2GB)) {
- if ((addr_start - last_addr_end) > (ptrdiff_t)requested_size) {
+ if (((uint8_t *)addr_start - (uint8_t *)last_addr_end) > (ptrdiff_t)requested_size) {
void *addr = last_addr_end;
ret = mmap(addr, requested_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
@@ -176,7 +177,7 @@ void *fwts_low_calloc(const size_t nmemb, const size_t size)
hdr->size = n;
hdr->magic = FWTS_ALLOC_MAGIC;
- return (ret + sizeof(fwts_mmap_header));
+ return (void *)((uint8_t *)ret + sizeof(fwts_mmap_header));
}
/*
@@ -201,7 +202,7 @@ void *fwts_low_realloc(const void *ptr, const size_t size)
return fwts_low_malloc(size);
hdr = (fwts_mmap_header *)
- (ptr - sizeof(fwts_mmap_header));
+ ((uint8_t *)ptr - sizeof(fwts_mmap_header));
/* sanity check */
if (hdr->magic != FWTS_ALLOC_MAGIC)
@@ -224,7 +225,7 @@ void fwts_low_free(const void *ptr)
{
if (ptr) {
fwts_mmap_header *hdr = (fwts_mmap_header *)
- (ptr - sizeof(fwts_mmap_header));
+ ((uint8_t *)ptr - sizeof(fwts_mmap_header));
if (hdr->magic == FWTS_ALLOC_MAGIC)
munmap(hdr, hdr->size);
}
--
2.1.0
More information about the fwts-devel
mailing list