[Bug libfortran/46267] New: strerror() is not necessarily thread-safe
jb at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Nov 2 11:17:00 GMT 2010
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46267
Summary: strerror() is not necessarily thread-safe
Product: gcc
Version: 4.5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libfortran
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: jb@gcc.gnu.org
In libgfortran/io/unix.c (get_oserror) strerror() is called. However, according
to POSIX
http://www.opengroup.org/onlinepubs/9699919799/functions/strerror.html
"The strerror() function need not be thread-safe."
Possible solutions
- On some targets such as Solaris 9 strerror() is thread-safe.
- On Windows there is apparently a thread-safe strerror_s() function.
- POSIX has the thread-safe strerror_r() function. Unfortunately it suffers
from a few issues.
1) The interface is a bit cumbersome, the caller must allocate a buffer for
the message and pass it in
2) glibc has also another strerror_r() function with an incompatible
interface. Thus one needs to do some macro trickery to use the POSIX version,
or then use the GNU version on glibc targets.
In short, it's a trainwreck. See e.g.
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6223913 and
https://www.securecoding.cert.org/confluence/display/seccode/CON33-C.+Avoid+race+conditions+when+using+library+functions
- POSIX 2008 has the strerror_l() function which is thread-safe and has a
similar interface as strerror(). Using this, if available, is perhaps the
simplest solution and should at least fix the issue on platforms which have
this function.
More information about the Gcc-bugs
mailing list