2000-11-28 Chris Johns <ccj@acm.org>

* src/heapallocate.c: Do not allow the size to overflow when
	adjusting it.  A test allocated a stack of -1 (~0). This
	actually resulted in a stack being allocated but with a
	size of 0xb. The allocator did not test the size to see if
	it rolled through 0 and so allowed the allocation to happen, the
	thread to get created. The task crashed as you would expect.
This commit is contained in:
Joel Sherrill
2000-11-28 21:47:39 +00:00
parent 11edb53f85
commit 66fedb46fe
4 changed files with 36 additions and 2 deletions

View File

@@ -1,4 +1,13 @@
2000-11-28 Chris Johns <ccj@acm.org>
* src/heapallocate.c: Do not allow the size to overflow when
adjusting it. A test allocated a stack of -1 (~0). This
actually resulted in a stack being allocated but with a
size of 0xb. The allocator did not test the size to see if
it rolled through 0 and so allowed the allocation to happen, the
thread to get created. The task crashed as you would expect.
2000-11-02 Joel Sherrill <joel@OARcorp.com>
* include/rtems/system.h: Use proper conditional (RTEMS_POSIX_API)

View File

@@ -44,6 +44,14 @@ void *_Heap_Allocate(
void *ptr;
unsigned32 offset;
/*
* Catch the case of a user allocating close to the limit of the
* unsigned32.
*/
if ( size >= (-1 - HEAP_BLOCK_USED_OVERHEAD) )
return( NULL );
excess = size % the_heap->page_size;
the_size = size + the_heap->page_size + HEAP_BLOCK_USED_OVERHEAD;

View File

@@ -1,4 +1,13 @@
2000-11-28 Chris Johns <ccj@acm.org>
* src/heapallocate.c: Do not allow the size to overflow when
adjusting it. A test allocated a stack of -1 (~0). This
actually resulted in a stack being allocated but with a
size of 0xb. The allocator did not test the size to see if
it rolled through 0 and so allowed the allocation to happen, the
thread to get created. The task crashed as you would expect.
2000-11-02 Joel Sherrill <joel@OARcorp.com>
* include/rtems/system.h: Use proper conditional (RTEMS_POSIX_API)

View File

@@ -44,6 +44,14 @@ void *_Heap_Allocate(
void *ptr;
unsigned32 offset;
/*
* Catch the case of a user allocating close to the limit of the
* unsigned32.
*/
if ( size >= (-1 - HEAP_BLOCK_USED_OVERHEAD) )
return( NULL );
excess = size % the_heap->page_size;
the_size = size + the_heap->page_size + HEAP_BLOCK_USED_OVERHEAD;