summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authoranton <anton@openbsd.org>2020-02-01 15:06:21 +0000
committeranton <anton@openbsd.org>2020-02-01 15:06:21 +0000
commitfec696e8b19f2ebeba1c5bca5b14987979b47d40 (patch)
tree60bb088bf07a83c5d05c1b74523c4b154fc84727 /sys/kern/kern_sig.c
parentUse -rdomain to reset rdomain (diff)
downloadwireguard-openbsd-fec696e8b19f2ebeba1c5bca5b14987979b47d40.tar.xz
wireguard-openbsd-fec696e8b19f2ebeba1c5bca5b14987979b47d40.zip
Grab the kernel lock in pgsigio() as it's strictly needed while
operating on the process structure and issuing signals. This is similar to what sigio_setown() already does. With this in place, the pipe subsystem is no longer required to grab the kernel lock before calling pgsigio(). ok visa@
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index f91e344ed8f..9400330d3a1 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kern_sig.c,v 1.243 2020/01/30 08:51:27 mpi Exp $ */
+/* $OpenBSD: kern_sig.c,v 1.244 2020/02/01 15:06:21 anton Exp $ */
/* $NetBSD: kern_sig.c,v 1.54 1996/04/22 01:38:32 christos Exp $ */
/*
@@ -740,6 +740,7 @@ pgsigio(struct sigio_ref *sir, int sig, int checkctty)
if (sir->sir_sigio == NULL)
return;
+ KERNEL_LOCK();
mtx_enter(&sigio_lock);
sigio = sir->sir_sigio;
if (sigio == NULL)
@@ -756,6 +757,7 @@ pgsigio(struct sigio_ref *sir, int sig, int checkctty)
}
out:
mtx_leave(&sigio_lock);
+ KERNEL_UNLOCK();
}
/*