diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-08-27 14:25:25 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-08-28 14:58:49 +0200 |
commit | 7bff82f34f4c36bec8e08830f7c494441f3704c6 (patch) | |
tree | b325a4665ccfeda23d921e61ce079b282afdddad | |
parent | posix: Add and use _POSIX_signals_Acquire() (diff) | |
download | rtems-7bff82f34f4c36bec8e08830f7c494441f3704c6.tar.bz2 |
posix: Avoid NULL pointer access
-rw-r--r-- | 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 8c249486bb..ff8fc82f6f 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 ); |