[Bug 1747] Heap extend allows discontinuous memory regions.

bugzilla-daemon at rtems.org bugzilla-daemon at rtems.org
Tue Mar 1 07:55:07 UTC 2011


https://www.rtems.org/bugzilla/show_bug.cgi?id=1747

--- Comment #1 from Sebastian Huber <sebastian.huber at embedded-brains.de> 2011-03-01 01:55:07 CST ---
(In reply to comment #0)
> The check in (cpukit/ChangeLog) states:
> 
>  2010-06-07      Sebastian Huber <sebastian.huber at embedded-brains.de>
> 
>      * score/src/heapextend.c: Implemented support for scattered heap areas.
> 
> The heap cannot support scattered blocks because the _Heap_Is_block_in_heap
> assumes the region is continuous between the first and last blocks of the heap.

This scattered heap support is very important for low-end systems like LPC2300
and also high-end multi-core systems which configure the heap depending on a
configuration (via file or network).

> Making the gaps in the regions passed to the heap extend call used is
> questionable and makes the _Heap_Is_block_in_heap test not really perform the
> task it's name states. This is an issue because it is this check that
> determines if a heap free of NULL should proceed. This issue is covered in
> another PR.

The only things _Heap_Free() has to accept without damage is a valid pointer to
an allocated area or NULL.  Everything else is a bug and can corrupt the heap. 
The _Heap_Is_block_in_heap() provides something more for convenience.

> I also wonder about a heap free call to an address that maps to one of the
> "in-use" gap regions. The previous heap code knew if an address was in the heap
> and therefore it was kind of safe to probe for a valid block. This assumption
> is now not valid.

To check weather a pointer is inside the heap area yields not much.  You are
not supposed to pass arbitrary values to _Heap_Free().

> 
> The former heap extend code:
> 
> 
> http://www.rtems.org/viewvc/rtems/cpukit/score/src/heapextend.c?revision=1.7&view=markup
> 
> clearly states the type of memory that can be added to an existing heap. The
> current code has no restrictions. The user manual is not great in this area. It
> would also be useful if comments are added to the heap extend code.
> 
> The heap extend code is used by the rtems_region_extend call and this call
> clearly states in the manual that the memory region must be continuous. If this
> has changed  we should discuss the API change and make better note of it. I
> also suspect the testsuite will need additions to test any API changes.

We should update the documentation with the new requirements.

http://www.rtems.org/onlinedocs/doxygen/cpukit/html/group__ScoreHeap.html#ga0313c0089b6a943c0888ffc595b6f4e1

-- 
Configure bugmail: https://www.rtems.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are watching all bug changes.



More information about the bugs mailing list