[PATCH] trace: Fix void pointer arithmetic

Masashi Honma honma at ictec.co.jp
Wed Jul 14 21:16:48 EDT 2010


Hello.

The arithmetic on void pointer exists in trace routine. On GNU C, it
works because void pointer size is 1. But not all compiler behaves like
this. So this patch specifies the size of the pointer.


diff --git a/src/utils/os_unix.c b/src/utils/os_unix.c
index cb23f72..9d5e874 100644
--- a/src/utils/os_unix.c
+++ b/src/utils/os_unix.c
@@ -370,7 +370,7 @@ void * os_realloc(void *ptr, size_t size)
 	if (ptr == NULL)
 		return os_malloc(size);
 
-	a = ptr - sizeof(*a);
+	a = (struct os_alloc_trace *)ptr - 1;
 	if (a->magic != ALLOC_MAGIC) {
 		wpa_printf(MSG_INFO, "REALLOC[%p]: invalid magic 0x%x%s",
 			   a, a->magic,
@@ -396,7 +396,7 @@ void os_free(void *ptr)
 
 	if (ptr == NULL)
 		return;
-	a = ptr - sizeof(*a);
+	a = (struct os_alloc_trace *)ptr - 1;
 	if (a->magic != ALLOC_MAGIC) {
 		wpa_printf(MSG_INFO, "FREE[%p]: invalid magic 0x%x%s",
 			   a, a->magic,


Regards,
Masashi Honma.


More information about the HostAP mailing list