summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ipfilter/netinet
diff options
context:
space:
mode:
authordarrenr <darrenr@FreeBSD.org>2005-06-14 09:18:26 +0000
committerdarrenr <darrenr@FreeBSD.org>2005-06-14 09:18:26 +0000
commitd742076594e13b208f83b2bb4f4e21caa62d9d14 (patch)
tree005662491fe7f6b4d472ec5cfc1cc74d0f90fd96 /sys/contrib/ipfilter/netinet
parent0bdf9fcd67a68c164b26f52e9ddba093a1f7ba40 (diff)
downloadFreeBSD-src-d742076594e13b208f83b2bb4f4e21caa62d9d14.zip
FreeBSD-src-d742076594e13b208f83b2bb4f4e21caa62d9d14.tar.gz
locking on exit of reading from ip_sync is not correct for all instances
Approved by: re (dwhite)
Diffstat (limited to 'sys/contrib/ipfilter/netinet')
-rw-r--r--sys/contrib/ipfilter/netinet/ip_sync.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/contrib/ipfilter/netinet/ip_sync.c b/sys/contrib/ipfilter/netinet/ip_sync.c
index 40a027e..a091b53 100644
--- a/sys/contrib/ipfilter/netinet/ip_sync.c
+++ b/sys/contrib/ipfilter/netinet/ip_sync.c
@@ -442,21 +442,26 @@ struct uio *uio;
l = get_sleep_lock(&sl_tail);
err = sleep(&sl_tail, PZERO+1);
+ if (err) {
+ MUTEX_EXIT(&ipsl_mutex);
+ return EINTR;
+ }
spinunlock(l);
}
# else /* __hpux */
# ifdef __osf__
err = mpsleep(&sl_tail, PSUSP|PCATCH, "ipl sleep", 0,
&ipsl_mutex, MS_LOCK_SIMPLE);
+ if (err)
+ return EINTR;
# else
MUTEX_EXIT(&ipsl_mutex);
err = SLEEP(&sl_tail, "ipl sleep");
+ if (err)
+ return EINTR;
+ MUTEX_ENTER(&ipsl_mutex);
# endif /* __osf__ */
# endif /* __hpux */
- if (err) {
- MUTEX_EXIT(&ipsl_mutex);
- return err;
- }
# endif /* SOLARIS */
}
MUTEX_EXIT(&ipsl_mutex);
OpenPOWER on IntegriCloud