From e980b219790cb601caed749f32a43f92e3ebde26 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Thu, 6 May 2004 19:21:40 +0000 Subject: 2004-05-06 Joel Sherrill PR 618/rtems * rtems/include/rtems/rtems/status.h, rtems/src/clockget.c, rtems/src/clockset.c, rtems/src/dpmemcreate.c, rtems/src/dpmemexternal2internal.c, rtems/src/dpmeminternal2external.c, rtems/src/eventmp.c, rtems/src/eventreceive.c, rtems/src/eventsend.c, rtems/src/msgqbroadcast.c, rtems/src/msgqcreate.c, rtems/src/msgqflush.c, rtems/src/msgqgetnumberpending.c, rtems/src/msgqreceive.c, rtems/src/msgqsubmit.c, rtems/src/partcreate.c, rtems/src/partdelete.c, rtems/src/partgetbuffer.c, rtems/src/ratemoncancel.c, rtems/src/ratemoncreate.c, rtems/src/ratemondelete.c, rtems/src/ratemongetstatus.c, rtems/src/ratemonident.c, rtems/src/ratemonperiod.c, rtems/src/regioncreate.c, rtems/src/regiondelete.c, rtems/src/regionextend.c, rtems/src/regiongetsegment.c, rtems/src/regiongetsegmentsize.c, rtems/src/regionreturnsegment.c, rtems/src/semcreate.c, rtems/src/semdelete.c, rtems/src/semflush.c, rtems/src/semident.c, rtems/src/taskcreate.c, rtems/src/taskgetnote.c, rtems/src/taskmode.c, rtems/src/taskrestart.c, rtems/src/taskresume.c, rtems/src/tasksetnote.c, rtems/src/tasksuspend.c, rtems/src/taskvariableadd.c, rtems/src/taskvariabledelete.c, rtems/src/taskvariableget.c, rtems/src/taskwakewhen.c, rtems/src/timercreate.c, rtems/src/timerdelete.c, rtems/src/timerfireafter.c, rtems/src/timerfirewhen.c, rtems/src/timerserverfireafter.c, rtems/src/timerserverfirewhen.c, score/include/rtems/score/object.h, score/src/coretodvalidate.c, score/src/objectnametoid.c: Add NULL checks. --- cpukit/ChangeLog | 32 +++++++++++++++++++++++++++++++ cpukit/rtems/include/rtems/rtems/status.h | 3 ++- cpukit/rtems/src/clockget.c | 3 +++ cpukit/rtems/src/clockset.c | 3 +++ cpukit/rtems/src/clocktodvalidate.c | 3 ++- cpukit/rtems/src/dpmemcreate.c | 3 +++ cpukit/rtems/src/dpmemexternal2internal.c | 3 +++ cpukit/rtems/src/dpmeminternal2external.c | 3 +++ cpukit/rtems/src/eventmp.c | 2 +- cpukit/rtems/src/eventreceive.c | 3 +++ cpukit/rtems/src/eventsend.c | 4 ++-- cpukit/rtems/src/msgqbroadcast.c | 6 ++++++ cpukit/rtems/src/msgqcreate.c | 3 +++ cpukit/rtems/src/msgqflush.c | 3 +++ cpukit/rtems/src/msgqgetnumberpending.c | 3 +++ cpukit/rtems/src/msgqreceive.c | 6 ++++++ cpukit/rtems/src/msgqsubmit.c | 3 +++ cpukit/rtems/src/partcreate.c | 12 +++++++++--- cpukit/rtems/src/partdelete.c | 4 ++-- cpukit/rtems/src/partgetbuffer.c | 3 +++ cpukit/rtems/src/ratemoncancel.c | 4 ++-- cpukit/rtems/src/ratemoncreate.c | 7 +++++-- cpukit/rtems/src/ratemondelete.c | 4 ++-- cpukit/rtems/src/ratemongetstatus.c | 2 +- cpukit/rtems/src/ratemonident.c | 4 ++-- cpukit/rtems/src/ratemonperiod.c | 2 +- cpukit/rtems/src/regioncreate.c | 12 +++++++++--- cpukit/rtems/src/regiondelete.c | 4 ++-- cpukit/rtems/src/regionextend.c | 3 +++ cpukit/rtems/src/regiongetsegment.c | 3 +++ cpukit/rtems/src/regiongetsegmentsize.c | 6 ++++++ cpukit/rtems/src/regionreturnsegment.c | 2 +- cpukit/rtems/src/semcreate.c | 3 +++ cpukit/rtems/src/semdelete.c | 2 +- cpukit/rtems/src/semflush.c | 2 +- cpukit/rtems/src/semident.c | 4 ++-- cpukit/rtems/src/taskcreate.c | 3 +++ cpukit/rtems/src/taskgetnote.c | 7 +++++-- cpukit/rtems/src/taskmode.c | 3 +++ cpukit/rtems/src/taskrestart.c | 2 +- cpukit/rtems/src/taskresume.c | 2 +- cpukit/rtems/src/tasksetnote.c | 2 +- cpukit/rtems/src/tasksuspend.c | 2 +- cpukit/rtems/src/taskvariableadd.c | 3 +++ cpukit/rtems/src/taskvariabledelete.c | 3 +++ cpukit/rtems/src/taskvariableget.c | 6 ++++++ cpukit/rtems/src/taskwakewhen.c | 7 +++++-- cpukit/rtems/src/timercreate.c | 3 +++ cpukit/rtems/src/timerdelete.c | 4 ++-- cpukit/rtems/src/timerfireafter.c | 3 +++ cpukit/rtems/src/timerfirewhen.c | 3 +++ cpukit/rtems/src/timerserverfireafter.c | 3 +++ cpukit/rtems/src/timerserverfirewhen.c | 3 +++ cpukit/score/include/rtems/score/object.h | 1 + cpukit/score/src/coretodvalidate.c | 3 ++- cpukit/score/src/objectnametoid.c | 3 +++ 56 files changed, 194 insertions(+), 41 deletions(-) diff --git a/cpukit/ChangeLog b/cpukit/ChangeLog index a56213bb1b..66b03c5a99 100644 --- a/cpukit/ChangeLog +++ b/cpukit/ChangeLog @@ -1,3 +1,35 @@ +2004-05-06 Joel Sherrill + + PR 618/rtems + * rtems/include/rtems/rtems/status.h, rtems/src/clockget.c, + rtems/src/clockset.c, rtems/src/dpmemcreate.c, + rtems/src/dpmemexternal2internal.c, + rtems/src/dpmeminternal2external.c, rtems/src/eventmp.c, + rtems/src/eventreceive.c, rtems/src/eventsend.c, + rtems/src/msgqbroadcast.c, rtems/src/msgqcreate.c, + rtems/src/msgqflush.c, rtems/src/msgqgetnumberpending.c, + rtems/src/msgqreceive.c, rtems/src/msgqsubmit.c, + rtems/src/partcreate.c, rtems/src/partdelete.c, + rtems/src/partgetbuffer.c, rtems/src/ratemoncancel.c, + rtems/src/ratemoncreate.c, rtems/src/ratemondelete.c, + rtems/src/ratemongetstatus.c, rtems/src/ratemonident.c, + rtems/src/ratemonperiod.c, rtems/src/regioncreate.c, + rtems/src/regiondelete.c, rtems/src/regionextend.c, + rtems/src/regiongetsegment.c, rtems/src/regiongetsegmentsize.c, + rtems/src/regionreturnsegment.c, rtems/src/semcreate.c, + rtems/src/semdelete.c, rtems/src/semflush.c, rtems/src/semident.c, + rtems/src/taskcreate.c, rtems/src/taskgetnote.c, + rtems/src/taskmode.c, rtems/src/taskrestart.c, + rtems/src/taskresume.c, rtems/src/tasksetnote.c, + rtems/src/tasksuspend.c, rtems/src/taskvariableadd.c, + rtems/src/taskvariabledelete.c, rtems/src/taskvariableget.c, + rtems/src/taskwakewhen.c, rtems/src/timercreate.c, + rtems/src/timerdelete.c, rtems/src/timerfireafter.c, + rtems/src/timerfirewhen.c, rtems/src/timerserverfireafter.c, + rtems/src/timerserverfirewhen.c, score/include/rtems/score/object.h, + score/src/coretodvalidate.c, score/src/objectnametoid.c: Add NULL + checks. + 2004-04-30 Joel Sherrill * libnetworking/kern/kern_sysctl.c: sysctl_register_all cannot be diff --git a/cpukit/rtems/include/rtems/rtems/status.h b/cpukit/rtems/include/rtems/rtems/status.h index 3ec50977fe..3510a8ca36 100644 --- a/cpukit/rtems/include/rtems/rtems/status.h +++ b/cpukit/rtems/include/rtems/rtems/status.h @@ -63,8 +63,9 @@ extern rtems_status_code _Status_Object_name_errors_to_status[]; #ifdef RTEMS_API_INIT rtems_status_code _Status_Object_name_errors_to_status[] = { - RTEMS_SUCCESSFUL, /* OBJECTS_ID_NAME_OR_ID_LOOKUP_SUCCESSFUL */ + RTEMS_SUCCESSFUL, /* OBJECTS_SUCCESSFUL */ RTEMS_INVALID_NAME, /* OBJECTS_INVALID_NAME */ + RTEMS_INVALID_ADDRESS, /* OBJECTS_INVALID_ADDRESS */ RTEMS_INVALID_ID, /* OBJECTS_INVALID_ID */ RTEMS_INVALID_NODE /* OBJECTS_INVALID_NODE */ }; diff --git a/cpukit/rtems/src/clockget.c b/cpukit/rtems/src/clockget.c index 45105bc0f2..3ae9cab1a0 100644 --- a/cpukit/rtems/src/clockget.c +++ b/cpukit/rtems/src/clockget.c @@ -45,6 +45,9 @@ rtems_status_code rtems_clock_get( ISR_Level level; rtems_interval tmp; + if ( !time_buffer ) + return RTEMS_INVALID_ADDRESS; + switch ( option ) { case RTEMS_CLOCK_GET_TOD: if ( !_TOD_Is_set ) diff --git a/cpukit/rtems/src/clockset.c b/cpukit/rtems/src/clockset.c index 59677fd3e1..5de5dc0edb 100644 --- a/cpukit/rtems/src/clockset.c +++ b/cpukit/rtems/src/clockset.c @@ -39,6 +39,9 @@ rtems_status_code rtems_clock_set( { rtems_interval seconds; + if ( !time_buffer ) + return RTEMS_INVALID_ADDRESS; + if ( _TOD_Validate( time_buffer ) ) { seconds = _TOD_To_seconds( time_buffer ); _Thread_Disable_dispatch(); diff --git a/cpukit/rtems/src/clocktodvalidate.c b/cpukit/rtems/src/clocktodvalidate.c index 49f668ed67..1a92f81c57 100644 --- a/cpukit/rtems/src/clocktodvalidate.c +++ b/cpukit/rtems/src/clocktodvalidate.c @@ -40,7 +40,8 @@ boolean _TOD_Validate( { uint32_t days_in_month; - if ((the_tod->ticks >= _TOD_Ticks_per_second) || + if ((!the_tod) || + (the_tod->ticks >= _TOD_Ticks_per_second) || (the_tod->second >= TOD_SECONDS_PER_MINUTE) || (the_tod->minute >= TOD_MINUTES_PER_HOUR) || (the_tod->hour >= TOD_HOURS_PER_DAY) || diff --git a/cpukit/rtems/src/dpmemcreate.c b/cpukit/rtems/src/dpmemcreate.c index 30c8233aa3..7c6e3604b0 100644 --- a/cpukit/rtems/src/dpmemcreate.c +++ b/cpukit/rtems/src/dpmemcreate.c @@ -52,6 +52,9 @@ rtems_status_code rtems_port_create( if ( !rtems_is_name_valid( name) ) return RTEMS_INVALID_NAME; + if ( !id ) + return RTEMS_INVALID_ADDRESS; + if ( !_Addresses_Is_aligned( internal_start ) || !_Addresses_Is_aligned( external_start ) ) return RTEMS_INVALID_ADDRESS; diff --git a/cpukit/rtems/src/dpmemexternal2internal.c b/cpukit/rtems/src/dpmemexternal2internal.c index 7804efdc6c..d496404a50 100644 --- a/cpukit/rtems/src/dpmemexternal2internal.c +++ b/cpukit/rtems/src/dpmemexternal2internal.c @@ -49,6 +49,9 @@ rtems_status_code rtems_port_external_to_internal( Objects_Locations location; uint32_t ending; + if ( !internal ) + return RTEMS_INVALID_ADDRESS; + the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: /* this error cannot be returned */ diff --git a/cpukit/rtems/src/dpmeminternal2external.c b/cpukit/rtems/src/dpmeminternal2external.c index 863b9dfa00..defe8375f6 100644 --- a/cpukit/rtems/src/dpmeminternal2external.c +++ b/cpukit/rtems/src/dpmeminternal2external.c @@ -49,6 +49,9 @@ rtems_status_code rtems_port_internal_to_external( Objects_Locations location; uint32_t ending; + if ( !external ) + return RTEMS_INVALID_ADDRESS; + the_port = _Dual_ported_memory_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: /* this error cannot be returned */ diff --git a/cpukit/rtems/src/eventmp.c b/cpukit/rtems/src/eventmp.c index 33fa0e6d97..cf611c5d5b 100644 --- a/cpukit/rtems/src/eventmp.c +++ b/cpukit/rtems/src/eventmp.c @@ -40,7 +40,7 @@ rtems_status_code _Event_MP_Send_request_packet ( Event_MP_Remote_operations operation, Objects_Id event_id, - rtems_event_set event_in + rtems_event_set event_in ) { Event_MP_Packet *the_packet; diff --git a/cpukit/rtems/src/eventreceive.c b/cpukit/rtems/src/eventreceive.c index 05a58eb469..646f0b9bca 100644 --- a/cpukit/rtems/src/eventreceive.c +++ b/cpukit/rtems/src/eventreceive.c @@ -48,6 +48,9 @@ rtems_status_code rtems_event_receive( { RTEMS_API_Control *api; + if ( !event_out ) + return RTEMS_INVALID_ADDRESS; + api = _Thread_Executing->API_Extensions[ THREAD_API_RTEMS ]; if ( _Event_sets_Is_empty( event_in ) ) { diff --git a/cpukit/rtems/src/eventsend.c b/cpukit/rtems/src/eventsend.c index 1151ebfa29..8294fb3117 100644 --- a/cpukit/rtems/src/eventsend.c +++ b/cpukit/rtems/src/eventsend.c @@ -37,8 +37,8 @@ */ rtems_status_code rtems_event_send( - Objects_Id id, - rtems_event_set event_in + Objects_Id id, + rtems_event_set event_in ) { register Thread_Control *the_thread; diff --git a/cpukit/rtems/src/msgqbroadcast.c b/cpukit/rtems/src/msgqbroadcast.c index 8eb4bef5ea..f81523fa37 100644 --- a/cpukit/rtems/src/msgqbroadcast.c +++ b/cpukit/rtems/src/msgqbroadcast.c @@ -60,6 +60,12 @@ rtems_status_code rtems_message_queue_broadcast( Objects_Locations location; CORE_message_queue_Status core_status; + if ( !buffer ) + return RTEMS_INVALID_ADDRESS; + + if ( !count ) + return RTEMS_INVALID_ADDRESS; + the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: diff --git a/cpukit/rtems/src/msgqcreate.c b/cpukit/rtems/src/msgqcreate.c index 4b4aa02554..a230afbf8b 100644 --- a/cpukit/rtems/src/msgqcreate.c +++ b/cpukit/rtems/src/msgqcreate.c @@ -67,6 +67,9 @@ rtems_status_code rtems_message_queue_create( if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; + if ( !id ) + return RTEMS_INVALID_ADDRESS; + #if defined(RTEMS_MULTIPROCESSING) if ( (is_global = _Attributes_Is_global( attribute_set ) ) && !_System_state_Is_multiprocessing ) diff --git a/cpukit/rtems/src/msgqflush.c b/cpukit/rtems/src/msgqflush.c index c857c5f507..7eb47d9785 100644 --- a/cpukit/rtems/src/msgqflush.c +++ b/cpukit/rtems/src/msgqflush.c @@ -56,6 +56,9 @@ rtems_status_code rtems_message_queue_flush( register Message_queue_Control *the_message_queue; Objects_Locations location; + if ( !count ) + return RTEMS_INVALID_ADDRESS; + the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: diff --git a/cpukit/rtems/src/msgqgetnumberpending.c b/cpukit/rtems/src/msgqgetnumberpending.c index 26be670401..a386127ecb 100644 --- a/cpukit/rtems/src/msgqgetnumberpending.c +++ b/cpukit/rtems/src/msgqgetnumberpending.c @@ -54,6 +54,9 @@ rtems_status_code rtems_message_queue_get_number_pending( register Message_queue_Control *the_message_queue; Objects_Locations location; + if ( !count ) + return RTEMS_INVALID_ADDRESS; + the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: diff --git a/cpukit/rtems/src/msgqreceive.c b/cpukit/rtems/src/msgqreceive.c index 0724127f4a..19d82ae10e 100644 --- a/cpukit/rtems/src/msgqreceive.c +++ b/cpukit/rtems/src/msgqreceive.c @@ -61,6 +61,12 @@ rtems_status_code rtems_message_queue_receive( Objects_Locations location; boolean wait; + if ( !buffer ) + return RTEMS_INVALID_ADDRESS; + + if ( !size ) + return RTEMS_INVALID_ADDRESS; + the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/msgqsubmit.c b/cpukit/rtems/src/msgqsubmit.c index fda406d18e..52d18261dc 100644 --- a/cpukit/rtems/src/msgqsubmit.c +++ b/cpukit/rtems/src/msgqsubmit.c @@ -69,6 +69,9 @@ rtems_status_code _Message_queue_Submit( Objects_Locations location; CORE_message_queue_Status msg_status; + if ( !buffer ) + return RTEMS_INVALID_ADDRESS; + the_message_queue = _Message_queue_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/partcreate.c b/cpukit/rtems/src/partcreate.c index aea18f68ad..d6baa166e7 100644 --- a/cpukit/rtems/src/partcreate.c +++ b/cpukit/rtems/src/partcreate.c @@ -37,9 +37,9 @@ * id - pointer to partition id * * Output parameters: - * id - partition id + * id - partition id * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_partition_create( @@ -47,7 +47,7 @@ rtems_status_code rtems_partition_create( void *starting_address, uint32_t length, uint32_t buffer_size, - rtems_attribute attribute_set, + rtems_attribute attribute_set, Objects_Id *id ) { @@ -56,6 +56,12 @@ rtems_status_code rtems_partition_create( if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; + if ( !starting_address ) + return RTEMS_INVALID_ADDRESS; + + if ( !id ) + return RTEMS_INVALID_ADDRESS; + if ( length == 0 || buffer_size == 0 || length < buffer_size || !_Partition_Is_buffer_size_aligned( buffer_size ) ) return RTEMS_INVALID_SIZE; diff --git a/cpukit/rtems/src/partdelete.c b/cpukit/rtems/src/partdelete.c index 8502f3c8d3..16b3b4cdd7 100644 --- a/cpukit/rtems/src/partdelete.c +++ b/cpukit/rtems/src/partdelete.c @@ -34,7 +34,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_partition_delete( @@ -42,7 +42,7 @@ rtems_status_code rtems_partition_delete( ) { register Partition_Control *the_partition; - Objects_Locations location; + Objects_Locations location; the_partition = _Partition_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/partgetbuffer.c b/cpukit/rtems/src/partgetbuffer.c index 36910eb7d6..6870d66ca7 100644 --- a/cpukit/rtems/src/partgetbuffer.c +++ b/cpukit/rtems/src/partgetbuffer.c @@ -46,6 +46,9 @@ rtems_status_code rtems_partition_get_buffer( Objects_Locations location; void *the_buffer; + if ( !buffer ) + return RTEMS_INVALID_ADDRESS; + the_partition = _Partition_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: diff --git a/cpukit/rtems/src/ratemoncancel.c b/cpukit/rtems/src/ratemoncancel.c index 0006843265..645ec510f2 100644 --- a/cpukit/rtems/src/ratemoncancel.c +++ b/cpukit/rtems/src/ratemoncancel.c @@ -31,7 +31,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful and caller is not the owning thread - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_rate_monotonic_cancel( @@ -39,7 +39,7 @@ rtems_status_code rtems_rate_monotonic_cancel( ) { Rate_monotonic_Control *the_period; - Objects_Locations location; + Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/ratemoncreate.c b/cpukit/rtems/src/ratemoncreate.c index d0144a610b..27d397e9ca 100644 --- a/cpukit/rtems/src/ratemoncreate.c +++ b/cpukit/rtems/src/ratemoncreate.c @@ -32,9 +32,9 @@ * id - pointer to rate monotonic id * * Output parameters: - * id - rate monotonic id + * id - rate monotonic id * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_rate_monotonic_create( @@ -47,6 +47,9 @@ rtems_status_code rtems_rate_monotonic_create( if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; + if ( !id ) + return RTEMS_INVALID_ADDRESS; + _Thread_Disable_dispatch(); /* to prevent deletion */ the_period = _Rate_monotonic_Allocate(); diff --git a/cpukit/rtems/src/ratemondelete.c b/cpukit/rtems/src/ratemondelete.c index 77eb1d7c04..c465c0dc51 100644 --- a/cpukit/rtems/src/ratemondelete.c +++ b/cpukit/rtems/src/ratemondelete.c @@ -31,7 +31,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_rate_monotonic_delete( @@ -39,7 +39,7 @@ rtems_status_code rtems_rate_monotonic_delete( ) { Rate_monotonic_Control *the_period; - Objects_Locations location; + Objects_Locations location; the_period = _Rate_monotonic_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/ratemongetstatus.c b/cpukit/rtems/src/ratemongetstatus.c index 93fb05c68a..2ae8732c4d 100644 --- a/cpukit/rtems/src/ratemongetstatus.c +++ b/cpukit/rtems/src/ratemongetstatus.c @@ -45,7 +45,7 @@ rtems_status_code rtems_rate_monotonic_get_status( Objects_Locations location; Rate_monotonic_Control *the_period; - if ( status == NULL ) + if ( !status ) return RTEMS_INVALID_ADDRESS; the_period = _Rate_monotonic_Get( id, &location ); diff --git a/cpukit/rtems/src/ratemonident.c b/cpukit/rtems/src/ratemonident.c index b48e6a331e..442bfbf685 100644 --- a/cpukit/rtems/src/ratemonident.c +++ b/cpukit/rtems/src/ratemonident.c @@ -32,9 +32,9 @@ * id - pointer to period id * * Output parameters: - * *id - region id + * *id - region id * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_rate_monotonic_ident( diff --git a/cpukit/rtems/src/ratemonperiod.c b/cpukit/rtems/src/ratemonperiod.c index ca42e643f5..1e5c8fb7f6 100644 --- a/cpukit/rtems/src/ratemonperiod.c +++ b/cpukit/rtems/src/ratemonperiod.c @@ -32,7 +32,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_rate_monotonic_period( diff --git a/cpukit/rtems/src/regioncreate.c b/cpukit/rtems/src/regioncreate.c index 5481505276..3aeb78ef0e 100644 --- a/cpukit/rtems/src/regioncreate.c +++ b/cpukit/rtems/src/regioncreate.c @@ -38,9 +38,9 @@ * id - address of region id to set * * Output parameters: - * id - region id + * id - region id * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_region_create( @@ -48,7 +48,7 @@ rtems_status_code rtems_region_create( void *starting_address, uint32_t length, uint32_t page_size, - rtems_attribute attribute_set, + rtems_attribute attribute_set, Objects_Id *id ) { @@ -57,6 +57,12 @@ rtems_status_code rtems_region_create( if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; + if ( !starting_address ) + return RTEMS_INVALID_ADDRESS; + + if ( !id ) + return RTEMS_INVALID_ADDRESS; + if ( !_Addresses_Is_aligned( starting_address ) ) return RTEMS_INVALID_ADDRESS; diff --git a/cpukit/rtems/src/regiondelete.c b/cpukit/rtems/src/regiondelete.c index d857baae0e..7a41ee4e87 100644 --- a/cpukit/rtems/src/regiondelete.c +++ b/cpukit/rtems/src/regiondelete.c @@ -35,7 +35,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_region_delete( @@ -43,7 +43,7 @@ rtems_status_code rtems_region_delete( ) { register Region_Control *the_region; - Objects_Locations location; + Objects_Locations location; _RTEMS_Lock_allocator(); the_region = _Region_Get( id, &location ); diff --git a/cpukit/rtems/src/regionextend.c b/cpukit/rtems/src/regionextend.c index 9e5436de8d..956ef96513 100644 --- a/cpukit/rtems/src/regionextend.c +++ b/cpukit/rtems/src/regionextend.c @@ -51,6 +51,9 @@ rtems_status_code rtems_region_extend( Heap_Extend_status heap_status; rtems_status_code status; + if ( !starting_address ) + return RTEMS_INVALID_ADDRESS; + status = RTEMS_SUCCESSFUL; _RTEMS_Lock_allocator(); /* to prevent deletion */ diff --git a/cpukit/rtems/src/regiongetsegment.c b/cpukit/rtems/src/regiongetsegment.c index fc0e2752fd..27d6bf66dd 100644 --- a/cpukit/rtems/src/regiongetsegment.c +++ b/cpukit/rtems/src/regiongetsegment.c @@ -54,6 +54,9 @@ rtems_status_code rtems_region_get_segment( Thread_Control *executing; void *the_segment; + if ( !segment ) + return RTEMS_INVALID_ADDRESS; + *segment = NULL; if ( size == 0 ) diff --git a/cpukit/rtems/src/regiongetsegmentsize.c b/cpukit/rtems/src/regiongetsegmentsize.c index d9ae54e2ac..90facf952c 100644 --- a/cpukit/rtems/src/regiongetsegmentsize.c +++ b/cpukit/rtems/src/regiongetsegmentsize.c @@ -49,6 +49,12 @@ rtems_status_code rtems_region_get_segment_size( Objects_Locations location; Thread_Control *executing; + if ( !segment ) + return RTEMS_INVALID_ADDRESS; + + if ( !size ) + return RTEMS_INVALID_ADDRESS; + _RTEMS_Lock_allocator(); executing = _Thread_Executing; the_region = _Region_Get( id, &location ); diff --git a/cpukit/rtems/src/regionreturnsegment.c b/cpukit/rtems/src/regionreturnsegment.c index 15d394275f..74517c0812 100644 --- a/cpukit/rtems/src/regionreturnsegment.c +++ b/cpukit/rtems/src/regionreturnsegment.c @@ -42,7 +42,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_region_return_segment( diff --git a/cpukit/rtems/src/semcreate.c b/cpukit/rtems/src/semcreate.c index 76967768ae..fc952e9032 100644 --- a/cpukit/rtems/src/semcreate.c +++ b/cpukit/rtems/src/semcreate.c @@ -81,6 +81,9 @@ rtems_status_code rtems_semaphore_create( if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; + if ( !id ) + return RTEMS_INVALID_ADDRESS; + #if defined(RTEMS_MULTIPROCESSING) if ( _Attributes_Is_global( attribute_set ) ) { diff --git a/cpukit/rtems/src/semdelete.c b/cpukit/rtems/src/semdelete.c index fd0c21d896..a4fb7b7d50 100644 --- a/cpukit/rtems/src/semdelete.c +++ b/cpukit/rtems/src/semdelete.c @@ -58,7 +58,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ #if defined(RTEMS_MULTIPROCESSING) diff --git a/cpukit/rtems/src/semflush.c b/cpukit/rtems/src/semflush.c index c44ebda383..cd244a1cf1 100644 --- a/cpukit/rtems/src/semflush.c +++ b/cpukit/rtems/src/semflush.c @@ -48,7 +48,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ #if defined(RTEMS_MULTIPROCESSING) diff --git a/cpukit/rtems/src/semident.c b/cpukit/rtems/src/semident.c index b6031c4e74..9add0f0458 100644 --- a/cpukit/rtems/src/semident.c +++ b/cpukit/rtems/src/semident.c @@ -58,9 +58,9 @@ * id - pointer to semaphore id * * Output parameters: - * *id - semaphore id + * *id - semaphore id * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_semaphore_ident( diff --git a/cpukit/rtems/src/taskcreate.c b/cpukit/rtems/src/taskcreate.c index cac5b2d96a..7776af013e 100644 --- a/cpukit/rtems/src/taskcreate.c +++ b/cpukit/rtems/src/taskcreate.c @@ -72,6 +72,9 @@ rtems_status_code rtems_task_create( ASR_Information *asr; + if ( !id ) + return RTEMS_INVALID_ADDRESS; + if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; diff --git a/cpukit/rtems/src/taskgetnote.c b/cpukit/rtems/src/taskgetnote.c index 3626218516..94b452ad70 100644 --- a/cpukit/rtems/src/taskgetnote.c +++ b/cpukit/rtems/src/taskgetnote.c @@ -41,9 +41,9 @@ * note - pointer to note * * Output parameters: - * note - filled in if successful + * note - filled in if successful * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_task_get_note( @@ -56,6 +56,9 @@ rtems_status_code rtems_task_get_note( Objects_Locations location; RTEMS_API_Control *api; + if ( !note ) + return RTEMS_INVALID_ADDRESS; + /* * NOTE: There is no check for < RTEMS_NOTEPAD_FIRST because that would * be checking an unsigned number for being negative. diff --git a/cpukit/rtems/src/taskmode.c b/cpukit/rtems/src/taskmode.c index e97d7e0a8c..478773681e 100644 --- a/cpukit/rtems/src/taskmode.c +++ b/cpukit/rtems/src/taskmode.c @@ -58,6 +58,9 @@ rtems_status_code rtems_task_mode( boolean needs_asr_dispatching = FALSE; rtems_mode old_mode; + if ( !previous_mode_set ) + return RTEMS_INVALID_ADDRESS; + executing = _Thread_Executing; api = executing->API_Extensions[ THREAD_API_RTEMS ]; asr = &api->Signal; diff --git a/cpukit/rtems/src/taskrestart.c b/cpukit/rtems/src/taskrestart.c index ca44f8dd25..932dc976af 100644 --- a/cpukit/rtems/src/taskrestart.c +++ b/cpukit/rtems/src/taskrestart.c @@ -43,7 +43,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_task_restart( diff --git a/cpukit/rtems/src/taskresume.c b/cpukit/rtems/src/taskresume.c index 46eaf9ea74..440dbaac66 100644 --- a/cpukit/rtems/src/taskresume.c +++ b/cpukit/rtems/src/taskresume.c @@ -40,7 +40,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_task_resume( diff --git a/cpukit/rtems/src/tasksetnote.c b/cpukit/rtems/src/tasksetnote.c index d2458a1baf..6372cbc0dc 100644 --- a/cpukit/rtems/src/tasksetnote.c +++ b/cpukit/rtems/src/tasksetnote.c @@ -42,7 +42,7 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_task_set_note( diff --git a/cpukit/rtems/src/tasksuspend.c b/cpukit/rtems/src/tasksuspend.c index b62e537e0d..7f40dd793e 100644 --- a/cpukit/rtems/src/tasksuspend.c +++ b/cpukit/rtems/src/tasksuspend.c @@ -49,7 +49,7 @@ rtems_status_code rtems_task_suspend( ) { register Thread_Control *the_thread; - Objects_Locations location; + Objects_Locations location; the_thread = _Thread_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/taskvariableadd.c b/cpukit/rtems/src/taskvariableadd.c index 46b7186cff..6e71180a66 100644 --- a/cpukit/rtems/src/taskvariableadd.c +++ b/cpukit/rtems/src/taskvariableadd.c @@ -32,6 +32,9 @@ rtems_status_code rtems_task_variable_add( Objects_Locations location; rtems_task_variable_t *tvp, *new; + if ( !ptr ) + return RTEMS_INVALID_ADDRESS; + the_thread = _Thread_Get (tid, &location); switch (location) { case OBJECTS_REMOTE: diff --git a/cpukit/rtems/src/taskvariabledelete.c b/cpukit/rtems/src/taskvariabledelete.c index 6089306ae4..5dd01497a8 100644 --- a/cpukit/rtems/src/taskvariabledelete.c +++ b/cpukit/rtems/src/taskvariabledelete.c @@ -31,6 +31,9 @@ rtems_status_code rtems_task_variable_delete( Objects_Locations location; rtems_task_variable_t *tvp, *prev; + if ( !ptr ) + return RTEMS_INVALID_ADDRESS; + prev = NULL; the_thread = _Thread_Get (tid, &location); diff --git a/cpukit/rtems/src/taskvariableget.c b/cpukit/rtems/src/taskvariableget.c index 140729351e..b9db9f5bd6 100644 --- a/cpukit/rtems/src/taskvariableget.c +++ b/cpukit/rtems/src/taskvariableget.c @@ -32,6 +32,12 @@ rtems_status_code rtems_task_variable_get( Objects_Locations location; rtems_task_variable_t *tvp; + if ( !ptr ) + return RTEMS_INVALID_ADDRESS; + + if ( !result ) + return RTEMS_INVALID_ADDRESS; + the_thread = _Thread_Get (tid, &location); switch (location) { case OBJECTS_REMOTE: diff --git a/cpukit/rtems/src/taskwakewhen.c b/cpukit/rtems/src/taskwakewhen.c index 6e938f3e1a..276a0c7f64 100644 --- a/cpukit/rtems/src/taskwakewhen.c +++ b/cpukit/rtems/src/taskwakewhen.c @@ -40,11 +40,11 @@ * * Output parameters: * RTEMS_SUCCESSFUL - if successful - * error code - if unsuccessful + * error code - if unsuccessful */ rtems_status_code rtems_task_wake_when( -rtems_time_of_day *time_buffer + rtems_time_of_day *time_buffer ) { Watchdog_Interval seconds; @@ -52,6 +52,9 @@ rtems_time_of_day *time_buffer if ( !_TOD_Is_set ) return RTEMS_NOT_DEFINED; + if ( !time_buffer ) + return RTEMS_INVALID_ADDRESS; + time_buffer->ticks = 0; if ( !_TOD_Validate( time_buffer ) ) diff --git a/cpukit/rtems/src/timercreate.c b/cpukit/rtems/src/timercreate.c index d00470fc9b..2a41411bc3 100644 --- a/cpukit/rtems/src/timercreate.c +++ b/cpukit/rtems/src/timercreate.c @@ -47,6 +47,9 @@ rtems_status_code rtems_timer_create( if ( !rtems_is_name_valid( name ) ) return RTEMS_INVALID_NAME; + if ( !id ) + return RTEMS_INVALID_ADDRESS; + _Thread_Disable_dispatch(); /* to prevent deletion */ the_timer = _Timer_Allocate(); diff --git a/cpukit/rtems/src/timerdelete.c b/cpukit/rtems/src/timerdelete.c index 455ca15648..2838d1ee1f 100644 --- a/cpukit/rtems/src/timerdelete.c +++ b/cpukit/rtems/src/timerdelete.c @@ -39,8 +39,8 @@ rtems_status_code rtems_timer_delete( Objects_Id id ) { - Timer_Control *the_timer; - Objects_Locations location; + Timer_Control *the_timer; + Objects_Locations location; the_timer = _Timer_Get( id, &location ); switch ( location ) { diff --git a/cpukit/rtems/src/timerfireafter.c b/cpukit/rtems/src/timerfireafter.c index fa5366826c..7b4660c82b 100644 --- a/cpukit/rtems/src/timerfireafter.c +++ b/cpukit/rtems/src/timerfireafter.c @@ -51,6 +51,9 @@ rtems_status_code rtems_timer_fire_after( if ( ticks == 0 ) return RTEMS_INVALID_NUMBER; + if ( !routine ) + return RTEMS_INVALID_ADDRESS; + the_timer = _Timer_Get( id, &location ); switch ( location ) { case OBJECTS_REMOTE: /* should never return this */ diff --git a/cpukit/rtems/src/timerfirewhen.c b/cpukit/rtems/src/timerfirewhen.c index 5ab4afc0c5..27175ff027 100644 --- a/cpukit/rtems/src/timerfirewhen.c +++ b/cpukit/rtems/src/timerfirewhen.c @@ -55,6 +55,9 @@ rtems_status_code rtems_timer_fire_when( if ( !_TOD_Validate( wall_time ) ) return RTEMS_INVALID_CLOCK; + if ( !routine ) + return RTEMS_INVALID_ADDRESS; + seconds = _TOD_To_seconds( wall_time ); if ( seconds <= _TOD_Seconds_since_epoch ) return RTEMS_INVALID_CLOCK; diff --git a/cpukit/rtems/src/timerserverfireafter.c b/cpukit/rtems/src/timerserverfireafter.c index 05d916b59b..a4c36bc6d0 100644 --- a/cpukit/rtems/src/timerserverfireafter.c +++ b/cpukit/rtems/src/timerserverfireafter.c @@ -53,6 +53,9 @@ rtems_status_code rtems_timer_server_fire_after( if ( !_Timer_Server ) return RTEMS_INCORRECT_STATE; + if ( !routine ) + return RTEMS_INVALID_ADDRESS; + if ( ticks == 0 ) return RTEMS_INVALID_NUMBER; diff --git a/cpukit/rtems/src/timerserverfirewhen.c b/cpukit/rtems/src/timerserverfirewhen.c index 4f4c2d6b50..a197ee2d55 100644 --- a/cpukit/rtems/src/timerserverfirewhen.c +++ b/cpukit/rtems/src/timerserverfirewhen.c @@ -57,6 +57,9 @@ rtems_status_code rtems_timer_server_fire_when( if ( !_TOD_Is_set ) return RTEMS_NOT_DEFINED; + if ( !routine ) + return RTEMS_INVALID_ADDRESS; + if ( !_TOD_Validate( wall_time ) ) return RTEMS_INVALID_CLOCK; diff --git a/cpukit/score/include/rtems/score/object.h b/cpukit/score/include/rtems/score/object.h index da43ecdaca..71c9e190db 100644 --- a/cpukit/score/include/rtems/score/object.h +++ b/cpukit/score/include/rtems/score/object.h @@ -457,6 +457,7 @@ boolean _Objects_Compare_name_raw( typedef enum { OBJECTS_NAME_OR_ID_LOOKUP_SUCCESSFUL, OBJECTS_INVALID_NAME, + OBJECTS_INVALID_ADDRESS, OBJECTS_INVALID_ID, OBJECTS_INVALID_NODE } Objects_Name_or_id_lookup_errors; diff --git a/cpukit/score/src/coretodvalidate.c b/cpukit/score/src/coretodvalidate.c index 49f668ed67..1a92f81c57 100644 --- a/cpukit/score/src/coretodvalidate.c +++ b/cpukit/score/src/coretodvalidate.c @@ -40,7 +40,8 @@ boolean _TOD_Validate( { uint32_t days_in_month; - if ((the_tod->ticks >= _TOD_Ticks_per_second) || + if ((!the_tod) || + (the_tod->ticks >= _TOD_Ticks_per_second) || (the_tod->second >= TOD_SECONDS_PER_MINUTE) || (the_tod->minute >= TOD_MINUTES_PER_HOUR) || (the_tod->hour >= TOD_HOURS_PER_DAY) || diff --git a/cpukit/score/src/objectnametoid.c b/cpukit/score/src/objectnametoid.c index a72a8b6c58..c5a1a70a9d 100644 --- a/cpukit/score/src/objectnametoid.c +++ b/cpukit/score/src/objectnametoid.c @@ -56,6 +56,9 @@ Objects_Name_or_id_lookup_errors _Objects_Name_to_id( uint32_t name_length; Objects_Name_comparators compare_them; + if ( !id ) + return OBJECTS_INVALID_ADDRESS; + if ( name == 0 ) return OBJECTS_INVALID_NAME; -- cgit v1.2.3