summaryrefslogtreecommitdiffstats
path: root/sys/i386/ibcs2/ibcs2_signal.c
diff options
context:
space:
mode:
authorswallace <swallace@FreeBSD.org>1996-12-08 02:24:10 +0000
committerswallace <swallace@FreeBSD.org>1996-12-08 02:24:10 +0000
commit7fc4332dc6001ce72a0d933b6b6fabbb086a239d (patch)
tree0a0244e9391313b30a9cafbe36d73975068e1b26 /sys/i386/ibcs2/ibcs2_signal.c
parentd122df8af42b806634429c382d10e40605085db3 (diff)
downloadFreeBSD-src-7fc4332dc6001ce72a0d933b6b6fabbb086a239d.zip
FreeBSD-src-7fc4332dc6001ce72a0d933b6b6fabbb086a239d.tar.gz
Perform special sigset() check.
Make sure signal is not blocked. If it is, return SIG_HOLD instead of handler and unblock the signal.
Diffstat (limited to 'sys/i386/ibcs2/ibcs2_signal.c')
-rw-r--r--sys/i386/ibcs2/ibcs2_signal.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/sys/i386/ibcs2/ibcs2_signal.c b/sys/i386/ibcs2/ibcs2_signal.c
index 6ed9930..ca791d5 100644
--- a/sys/i386/ibcs2/ibcs2_signal.c
+++ b/sys/i386/ibcs2/ibcs2_signal.c
@@ -25,7 +25,7 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * $Id: ibcs2_signal.c,v 1.5 1995/10/21 05:01:57 swallace Exp $
+ * $Id: ibcs2_signal.c,v 1.6 1995/10/21 20:33:43 swallace Exp $
*/
#include <sys/param.h>
@@ -309,17 +309,29 @@ ibcs2_sigsys(p, uap, retval)
if (signum != SIGALRM)
sa.sa_flags |= SA_RESTART;
#endif
+ *retval = (int)IBCS2_SIG_ERR; /* init error return */
+
+ /* perform native sigaction() */
if ((error = copyout(&sa, nbsa, sizeof(sa))) != 0)
return error;
if ((error = sigaction(p, &sa_args, retval)) != 0) {
DPRINTF(("signal: sigaction failed: %d\n",
error));
- *retval = (int)IBCS2_SIG_ERR;
return error;
}
if ((error = copyin(obsa, &sa, sizeof(sa))) != 0)
return error;
*retval = (int)sa.sa_handler;
+
+ /* special sigset() check */
+ if(IBCS2_SIGCALL(SCARG(uap, sig)) == IBCS2_SIGSET_MASK)
+ /* check to make sure signal is not blocked */
+ if(sigismember(&p->p_sigmask, signum)) {
+ /* return SIG_HOLD and unblock signal*/
+ *retval = (int)IBCS2_SIG_HOLD;
+ p->p_sigmask &= ~sigmask(signum);
+ }
+
return 0;
}
OpenPOWER on IntegriCloud