Verify return value of the sigset manipulation functions
to catch invalid signal numbers [1]. Use consistent style of not assigning the return value to a local variable. Reported by: Garrett Cooper <yanegomi gmail com> [1] MFC after: 1 week
This commit is contained in:
parent
87d45a0392
commit
e2b801ddd9
@ -112,16 +112,11 @@ int
|
||||
xsi_sigpause(int sig)
|
||||
{
|
||||
sigset_t set;
|
||||
int error;
|
||||
|
||||
if (!_SIG_VALID(sig)) {
|
||||
errno = EINVAL;
|
||||
if (_sigprocmask(SIG_BLOCK, NULL, &set) == -1)
|
||||
return (-1);
|
||||
if (sigdelset(&set, sig) == -1)
|
||||
return (-1);
|
||||
}
|
||||
error = _sigprocmask(SIG_BLOCK, NULL, &set);
|
||||
if (error != 0)
|
||||
return (error);
|
||||
sigdelset(&set, sig);
|
||||
return (_sigsuspend(&set));
|
||||
}
|
||||
|
||||
@ -131,7 +126,8 @@ sighold(int sig)
|
||||
sigset_t set;
|
||||
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, sig);
|
||||
if (sigaddset(&set, sig) == -1)
|
||||
return (-1);
|
||||
return (_sigprocmask(SIG_BLOCK, &set, NULL));
|
||||
}
|
||||
|
||||
@ -151,7 +147,8 @@ sigrelse(int sig)
|
||||
sigset_t set;
|
||||
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, sig);
|
||||
if (sigaddset(&set, sig) == -1)
|
||||
return (-1);
|
||||
return (_sigprocmask(SIG_UNBLOCK, &set, NULL));
|
||||
}
|
||||
|
||||
@ -160,35 +157,30 @@ void
|
||||
{
|
||||
sigset_t set, pset;
|
||||
struct sigaction sa, psa;
|
||||
int error;
|
||||
|
||||
sigemptyset(&set);
|
||||
sigaddset(&set, sig);
|
||||
error = _sigprocmask(SIG_BLOCK, NULL, &pset);
|
||||
if (error == -1)
|
||||
if (sigaddset(&set, sig) == -1)
|
||||
return (SIG_ERR);
|
||||
if (_sigprocmask(SIG_BLOCK, NULL, &pset) == -1)
|
||||
return (SIG_ERR);
|
||||
if ((__sighandler_t *)disp == SIG_HOLD) {
|
||||
error = _sigprocmask(SIG_BLOCK, &set, &pset);
|
||||
if (error == -1)
|
||||
if (_sigprocmask(SIG_BLOCK, &set, &pset) == -1)
|
||||
return (SIG_ERR);
|
||||
if (sigismember(&pset, sig))
|
||||
return (SIG_HOLD);
|
||||
else {
|
||||
error = _sigaction(sig, NULL, &psa);
|
||||
if (error == -1)
|
||||
if (_sigaction(sig, NULL, &psa) == -1)
|
||||
return (SIG_ERR);
|
||||
return (psa.sa_handler);
|
||||
}
|
||||
} else {
|
||||
error = _sigprocmask(SIG_UNBLOCK, &set, &pset);
|
||||
if (error == -1)
|
||||
if (_sigprocmask(SIG_UNBLOCK, &set, &pset) == -1)
|
||||
return (SIG_ERR);
|
||||
}
|
||||
|
||||
bzero(&sa, sizeof(sa));
|
||||
sa.sa_handler = disp;
|
||||
error = _sigaction(sig, &sa, &psa);
|
||||
if (error == -1)
|
||||
if (_sigaction(sig, &sa, &psa) == -1)
|
||||
return (SIG_ERR);
|
||||
if (sigismember(&pset, sig))
|
||||
return (SIG_HOLD);
|
||||
|
Loading…
Reference in New Issue
Block a user