This is the mail archive of the ecos-patches@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Pthread NULL pointer dereference


Hi,

I've attached a patch for pthread.cxx to prevent a NULL pointer dereference if pthread_getspecific()/pthread_setspecific() are called by threads which were not created by the pthread subsystem.

Clearly threads which are not created via pthreads should not call the pthread APIs, however if they do so they should fail gracefully. We've seen this happen with an "all-pthread" application because there are actually still a few system threads (e.g. network alarm) which are pure eCos threads.

Cheers,
Kelvin.
? pthread.patch
Index: compat/posix/current/ChangeLog
===================================================================
RCS file: /cvs/ecos/ecos/packages/compat/posix/current/ChangeLog,v
retrieving revision 1.56
diff -u -r1.56 ChangeLog
--- compat/posix/current/ChangeLog	25 Mar 2009 08:03:56 -0000	1.56
+++ compat/posix/current/ChangeLog	27 Oct 2009 22:58:23 -0000
@@ -1,3 +1,9 @@
+2009-10-28  Kelvin Lawson  <kelvinl@users.sf.net>
+
+	* src/pthread.cxx: Add NULL pointer checks in case various
+	functions are called by threads which were not created via
+	pthreads.
+
 2009-03-25  John Dallaway  <john@dallaway.org.uk>
 
 	* src/signal.cxx (pause): Revert change of 2006-07-18 pending
Index: compat/posix/current/src/pthread.cxx
===================================================================
RCS file: /cvs/ecos/ecos/packages/compat/posix/current/src/pthread.cxx,v
retrieving revision 1.16
diff -u -r1.16 pthread.cxx
--- compat/posix/current/src/pthread.cxx	29 Jan 2009 17:47:52 -0000	1.16
+++ compat/posix/current/src/pthread.cxx	27 Oct 2009 22:58:24 -0000
@@ -1441,6 +1441,8 @@
         PTHREAD_RETURN(EINVAL);
 
     pthread_info *self = pthread_self_info();
+    if( self == NULL )
+        PTHREAD_RETURN(EINVAL);
 
     if( self->thread_data == NULL )
     {
@@ -1472,6 +1474,8 @@
         PTHREAD_RETURN(NULL);
 
     pthread_info *self = pthread_self_info();
+    if( self == NULL )
+        PTHREAD_RETURN(NULL);
 
     if( self->thread_data == NULL )
         val = NULL;

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]