summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2003-10-25 16:43:50 +0000
committerrwatson <rwatson@FreeBSD.org>2003-10-25 16:43:50 +0000
commitb43632b1530ca6326d49c59f7aa08f97feeea2d2 (patch)
tree7db46dacce2325b7a771dd877050bc6ef60509c5
parente4935eb9ae5e1423e2efddfa52176de132ced5a8 (diff)
downloadFreeBSD-src-b43632b1530ca6326d49c59f7aa08f97feeea2d2.zip
FreeBSD-src-b43632b1530ca6326d49c59f7aa08f97feeea2d2.tar.gz
Check (locked) before performing an advisory unlock following a failure
of vn_start_write(). Otherwise, we may inconsistently attempt to release the advisory lock. Pointed out by: teggej
-rw-r--r--sys/kern/kern_sig.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 0b14a4d..ab98bb0 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -2579,7 +2579,8 @@ restart:
if (vn_start_write(vp, &mp, V_NOWAIT) != 0) {
lf.l_type = F_UNLCK;
- VOP_ADVLOCK(vp, (caddr_t)p, F_UNLCK, &lf, F_FLOCK);
+ if (locked)
+ VOP_ADVLOCK(vp, (caddr_t)p, F_UNLCK, &lf, F_FLOCK);
if ((error = vn_close(vp, FWRITE, cred, td)) != 0)
return (error);
if ((error = vn_start_write(NULL, &mp, V_XSLEEP | PCATCH)) != 0)
OpenPOWER on IntegriCloud