...
Wiki Markup |
---|
According to Section 7.14.1.1 of the C Rationale \[[ISO/IEC 03|AA. References#ISOBibliography#ISO/IEC 03]\]: |
When a signal occurs, the normal flow of control of a program is interrupted. If a signal occurs that is being trapped by a signal handler, that handler is invoked. When it is finished, execution continues at the point at which the signal occurred. This arrangement can cause problems if the signal handler invokes a library function that was being executed at the time of the signal.
Wiki Markup |
---|
Similarly, Section 7.14.1 paragraph 5 of C99 \[[ISO/IEC 9899:1999|AA. References#ISOBibliography#ISO/IEC 9899-1999]\] states that if the signal occurs other than as the result of calling the {{abort}} or {{raise}} function, the behavior is [undefined|BB. Definitions#undefined behavior] if |
...
Wiki Markup |
---|
The second problem is that the {{free()}} function is also not \[[asynchronous-safe|AA. References#asynchronousBibliography#asynchronous-safe]\], and its invocation from within a signal handler is also a violation of this rule. If an interrupt signal is received during the {{free()}} call in {{main()}}, the heap may be corrupted. |
...
Wiki Markup |
---|
The following table from the the Open Group Base Specifications \[[Open Group 04|AA. References#OpenBibliography#Open Group 04]\], defines a set of functions that are asynchronous—signal-safe. Applications may invoke these functions, without restriction, from signal handler. |
...
Wiki Markup |
---|
For an overview of software vulnerabilities resulting from improper signal handling, see Zalewski's paper on understanding, exploiting, and preventing signal-handling-related vulnerabilities \[[Zalewski 01|AA. References#ZalewskiBibliography#Zalewski 01]\]. [VU #834865|http://www.kb.cert.org/vuls/id/834865] describes a vulnerability resulting from a violation of this rule. |
...
Wiki Markup |
---|
\[[Dowd 06|AA. References#DowdBibliography#Dowd 06]\] Chapter 13, "Synchronization and State" \[[ISO/IEC 03|AA. References#ISOBibliography#ISO/IEC 03]\] Section 5.2.3, "Signals and interrupts" \[[ISO/IEC 9899:1999|AA. References#ISOBibliography#ISO/IEC 9899-1999]\] Section 7.14, "Signal handling {{<signal.h>}}" \[[MITRE 07|AA. References#MITREBibliography#MITRE 07]\] [CWE ID 479|http://cwe.mitre.org/data/definitions/479.html], "Unsafe Function Call from a Signal Handler" \[[Open Group 04|AA. References#OpenBibliography#Open Group 04]\] [longjmp|http://www.opengroup.org/onlinepubs/000095399/functions/longjmp.html] \[[OpenBSD|AA. References#OpenBSDBibliography#OpenBSD]\] [{{signal()}} Man Page|http://www.openbsd.org/cgi-bin/man.cgi?query=signal] \[[Zalewski 01|AA. References#ZalewskiBibliography#Zalewski 01]\] |
...
11. Signals (SIG) SIG31-C. Do not access or modify shared objects in signal handlers