Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Jul 2010 09:20:08 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r210598 - stable/8/lib/libc/compat-43
Message-ID:  <201007290920.o6T9K8OB094785@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201007290920.o6T9K8OB094785>