[rtems commit] posix: Avoid NULL pointer access

Sebastian Huber sebh at rtems.org
Wed Aug 28 12:54:20 UTC 2013


Module:    rtems
Branch:    master
Commit:    7bff82f34f4c36bec8e08830f7c494441f3704c6
Changeset: http://git.rtems.org/rtems/commit/?id=7bff82f34f4c36bec8e08830f7c494441f3704c6

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Aug 27 14:25:25 2013 +0200

posix: Avoid NULL pointer access

---

 cpukit/posix/src/keyfreememory.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/cpukit/posix/src/keyfreememory.c b/cpukit/posix/src/keyfreememory.c
index 8c24948..ff8fc82 100644
--- a/cpukit/posix/src/keyfreememory.c
+++ b/cpukit/posix/src/keyfreememory.c
@@ -29,8 +29,10 @@ void _POSIX_Keys_Free_memory(
   POSIX_Keys_Key_value_pair search_node;
   POSIX_Keys_Key_value_pair *p;
   RBTree_Node *iter, *next;
+  Objects_Id key_id;
 
-  search_node.key = the_key->Object.id;
+  key_id = the_key->Object.id;
+  search_node.key = key_id;
   search_node.thread_id = 0;
   iter = _RBTree_Find_unprotected( &_POSIX_Keys_Key_value_lookup_tree, &search_node.Key_value_lookup_node );
   if ( !iter )
@@ -40,7 +42,7 @@ void _POSIX_Keys_Free_memory(
    */
   next = _RBTree_Next_unprotected( iter, RBT_LEFT );
   p = _RBTree_Container_of( next, POSIX_Keys_Key_value_pair, Key_value_lookup_node );
-  while ( p->key == the_key->Object.id) {
+  while ( next != NULL && p->key == key_id) {
     iter = next;
     next = _RBTree_Next_unprotected( iter, RBT_LEFT );
     p = _RBTree_Container_of( next, POSIX_Keys_Key_value_pair, Key_value_lookup_node );
@@ -50,7 +52,7 @@ void _POSIX_Keys_Free_memory(
    * delete all nodes belongs to the_key from the rbtree and chain.
    */
   p = _RBTree_Container_of( iter, POSIX_Keys_Key_value_pair, Key_value_lookup_node );
-  while ( p->key == the_key->Object.id ) {
+  while ( iter != NULL && p->key == key_id ) {
     next = _RBTree_Next_unprotected( iter, RBT_RIGHT );
     _RBTree_Extract_unprotected( &_POSIX_Keys_Key_value_lookup_tree, iter );
     _Chain_Extract_unprotected( &p->Key_values_per_thread_node );




More information about the vc mailing list