diff options
| author | Andriy Gapon <avg@FreeBSD.org> | 2020-05-29 07:44:02 +0000 |
|---|---|---|
| committer | Andriy Gapon <avg@FreeBSD.org> | 2020-05-29 07:44:02 +0000 |
| commit | e298466ee2f5c73ca859933e790d6c56150a42ac (patch) | |
| tree | 1975d62df98d2d2b456c75617944dc7c2cb915b3 | |
| parent | 4542cd9379636f6514523e322670c1af64678037 (diff) | |
Notes
| -rw-r--r-- | sys/kern/kern_sig.c | 13 |
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) { |
