Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Asynchronous signals may originate from malicious actors external to the process. Consequently, vulnerabilities may exist if the signal-handler-persistence behavior is inconsistent with the developer's expectations, such as when the developer expects the signal handler to persist but it does not.

...

A common approach to create persistent signal handlers is to call signal() from within the handler itself, consequently , unresetting the reset signal:

...

Code Block
bgColor#ccccff
langc
/* 
 * Equivalent to signal(SIGUSR1, handler) but makes
 * signal persistent. 
 */
struct sigaction act;
act.sa_handler = handler;
act.sa_flags = 0;
if (sigemptyset(&act.sa_mask) != 0) {
  /* Handle error */
}
if (sigaction(SIGUSR1, &act, NULL) != 0) {
  /* Handle error */
}

...

With the compliant solution for UNIX, no race condition occurs that can be exploited by an attacker sending a second signal. This is because a second signal sent to the handler, before the latter calls signal(signum, SIG_DFL), will only cause the handler to restart and call signal() anyway.

...

Code Block
bgColor#ccccff
langc
/* 
 * Equivalent to signal(SIGUSR1, handler) but makes
 * signal nonpersistent .
 */
struct sigaction act;
act.sa_handler = handler;
act.sa_flags = SA_RESETHAND;
if (sigemptyset(&act.sa_mask) != 0) {
  /* Handle error */
}
if (sigaction(SIGUSR1, &act, NULL) != 0) {
  /* Handle error */
}

...

Failure to understand implementation-specific details regarding signal-handler persistence can lead to unexpected behavior.

Recommendation

Severity

Likelihood

Remediation Cost

Priority

Level

SIG01-C

low

Low

unlikely

Unlikely

low

Low

P3

L3

Automated Detection

Tool

Version

Checker

Description

CodeSonar
Include Page
CodeSonar_V
CodeSonar_V
BADFUNC.SIGNALUse of signal
Compass/ROSE

 

 



Could detect possible violations by flagging any signal handler that calls signal() to (re)assert itself as the handler for its signal

PRQA QA-C

Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

C5020
LDRA tool suite
Include Page
LDRA_V
LDRA_V
97 DPartially implemented
Parasoft C/C++test
Include Page
PRQA
Parasoft_V
PRQA
Parasoft_V
warncall for signal
CERT_C-SIG01-a
The signal handling facilities of <signal.h> shall not be used
PC-lint Plus

Include Page
PC-lint Plus_V
PC-lint Plus_V

586

Assistance provided: reports use of the signal function

Partially implemented

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

Related Guidelines

...


...

Image Modified Image Modified Image Modified