svn commit: r210598 - stable/8/lib/libc/compat-43

[ Available lists | Index of svn-src-stable-8 | Month of Jul 2010 | Week of 29 Jul 2010 | Raw email | View thread | Wrap long lines | Reply | Tag ]
From
Konstantin Belousov <kib@FreeBSD.org>
Date
29 Jul 2010 09:20:08
Subject
svn commit: r210598 - stable/8/lib/libc/compat-43
Message-ID
201007290920.o6T9K8OB094785@svn.freebsd.org


[ Hide this part ]
Author: kib
Date: Thu Jul 29 09:20:08 2010
New Revision: 210598
URL: http://svn.freebsd.org/changeset/base/210598

Log:
MFC r210370:
Verify return value of the sigset manipulation functions to catch
invalid signal numbers.

Modified:
stable/8/lib/libc/compat-43/sigcompat.c
Directory Properties:
stable/8/lib/libc/ (props changed)
stable/8/lib/libc/stdtime/ (props changed)
stable/8/lib/libc/sys/ (props changed)

Modified: stable/8/lib/libc/compat-43/sigcompat.c
==============================================================================
--- stable/8/lib/libc/compat-43/sigcompat.c Thu Jul 29 06:27:41 2010 (r210597)
+++ stable/8/lib/libc/compat-43/sigcompat.c Thu Jul 29 09:20:08 2010 (r210598)
@@ -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);

Elapsed time: 0.080 seconds