Versions Compared

Key

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

...

Compliant Solution (POSIX)

The POSIX defines the sigaction(2) function , which assigns handlers to signals like in a similar manner to the C99 signal(2) function, but also allows one signal masks to be set explicitly set persistence. One can thus use . Consequently, sigaction(2) and sidestep ) can be used to eliminate the race window on non-persistent OS'senvironments.

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

In fact, POSIX recommends sigaction(2) and deprecates signal(2). Unfortunately, sigaction(2) is not C99-compliantdefined in C99 and is consequently not as portable a solution.

Non-Persistent Handlers

Errors may also occur when the developer expects the default action to be restored for a signal, but instead, the signal handler persists.

...

There is no race condition that can be utilizied exploited by an attacker in sending a second signal here, because a second signal sent to the handler before it calls signal() will merely cause it to restart, and call signal() anyway.

Compliant Solution (POSIX)

The POSIX defines the sigaction(2) function , which assigns handlers to signals like in a similar manner to the C99 signal(2) function, but also allows one signal masks to be set explicitly set persistence. One can thus use . Consequently, sigaction(2) and sidestep ) can be used to eliminate the race window on non-persistent OS'senvironments.

Code Block
bgColor#ccccff
/* Equivalent to signal( SIGUSR1, handler); */
   but make signal non-persistent */
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 */
}

...

Risk Assessment

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

...