fix potential bug in _mesa_align_calloc/malloc (Frank van Heesch)

This commit is contained in:
Brian Paul
2002-10-30 19:40:20 +00:00
parent 3160edec33
commit c5934054f3
+13 -6
View File
@@ -1,4 +1,4 @@
/* $Id: imports.c,v 1.22 2002/10/25 21:06:28 brianp Exp $ */
/* $Id: imports.c,v 1.23 2002/10/30 19:40:20 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -104,9 +104,14 @@ _mesa_align_malloc(size_t bytes, unsigned long alignment)
ASSERT( alignment > 0 );
ptr = (unsigned long) _mesa_malloc( bytes + alignment );
/* Allocate extra memory to accomodate rounding up the address for
* alignment and to record the real malloc address.
*/
ptr = (unsigned long) _mesa_malloc(bytes + alignment + sizeof(void *));
if (!ptr)
return NULL;
buf = (ptr + alignment) & ~(unsigned long)(alignment - 1);
buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1);
*(unsigned long *)(buf - sizeof(void *)) = ptr;
#ifdef DEBUG
@@ -117,7 +122,7 @@ _mesa_align_malloc(size_t bytes, unsigned long alignment)
}
#endif
return (void *)buf;
return (void *) buf;
}
@@ -128,9 +133,11 @@ _mesa_align_calloc(size_t bytes, unsigned long alignment)
ASSERT( alignment > 0 );
ptr = (unsigned long) _mesa_calloc( bytes + alignment );
ptr = (unsigned long) _mesa_calloc(bytes + alignment + sizeof(void *));
if (!ptr)
return NULL;
buf = (ptr + alignment) & ~(unsigned long)(alignment - 1);
buf = (ptr + alignment + sizeof(void *)) & ~(unsigned long)(alignment - 1);
*(unsigned long *)(buf - sizeof(void *)) = ptr;
#ifdef DEBUG