Author: kib
Date: Thu Jul 22 09:14:18 2010
New Revision: 210370
URL: http://svn.freebsd.org/changeset/base/210370

Log:
  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

Modified:
  head/lib/libc/compat-43/sigcompat.c

Modified: head/lib/libc/compat-43/sigcompat.c
==============================================================================
--- head/lib/libc/compat-43/sigcompat.c Thu Jul 22 09:13:49 2010        
(r210369)
+++ head/lib/libc/compat-43/sigcompat.c Thu Jul 22 09:14:18 2010        
(r210370)
@@ -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);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to