aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Gapon <avg@FreeBSD.org>2020-05-29 07:44:02 +0000
committerAndriy Gapon <avg@FreeBSD.org>2020-05-29 07:44:02 +0000
commite298466ee2f5c73ca859933e790d6c56150a42ac (patch)
tree1975d62df98d2d2b456c75617944dc7c2cb915b3
parent4542cd9379636f6514523e322670c1af64678037 (diff)
Notes
-rw-r--r--sys/kern/kern_sig.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 7a99de63c6555..776e8a795b7c8 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -3454,8 +3454,9 @@ corefile_open_last(struct thread *td, char *name, int indexpos,
(lasttime.tv_sec == vattr.va_mtime.tv_sec &&
lasttime.tv_nsec >= vattr.va_mtime.tv_nsec)) {
if (oldvp != NULL)
- vnode_close_locked(td, oldvp);
+ vn_close(oldvp, FWRITE, td->td_ucred, td);
oldvp = vp;
+ VOP_UNLOCK(oldvp);
lasttime = vattr.va_mtime;
} else {
vnode_close_locked(td, vp);
@@ -3466,12 +3467,18 @@ corefile_open_last(struct thread *td, char *name, int indexpos,
if (nextvp == NULL) {
if ((td->td_proc->p_flag & P_SUGID) != 0) {
error = EFAULT;
- vnode_close_locked(td, oldvp);
+ vn_close(oldvp, FWRITE, td->td_ucred, td);
} else {
nextvp = oldvp;
+ error = vn_lock(nextvp, LK_EXCLUSIVE);
+ if (error != 0) {
+ vn_close(nextvp, FWRITE, td->td_ucred,
+ td);
+ nextvp = NULL;
+ }
}
} else {
- vnode_close_locked(td, oldvp);
+ vn_close(oldvp, FWRITE, td->td_ucred, td);
}
}
if (error != 0) {