summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2015-01-04 00:49:45 +0000
committerkib <kib@FreeBSD.org>2015-01-04 00:49:45 +0000
commit315194d815d378dda644b25d89b98f5e3579b530 (patch)
tree54abad046ca72655244d165f31f670166eedfc71
parent511130787fe28fb9da8b2e64c39d0bc3742b9eff (diff)
downloadFreeBSD-src-315194d815d378dda644b25d89b98f5e3579b530.zip
FreeBSD-src-315194d815d378dda644b25d89b98f5e3579b530.tar.gz
MFC r276008:
Add VN_OPEN_NAMECACHE flag for vn_open_cred(9), which requests that the created file name was cached. Use the flag for core dumps.
-rw-r--r--sys/kern/kern_sig.c3
-rw-r--r--sys/kern/vfs_vnops.c2
-rw-r--r--sys/sys/vnode.h1
3 files changed, 5 insertions, 1 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 2951ee8..05dd103 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -3177,7 +3177,8 @@ corefile_open(const char *comm, uid_t uid, pid_t pid, struct thread *td,
sbuf_delete(&sb);
cmode = S_IRUSR | S_IWUSR;
- oflags = VN_OPEN_NOAUDIT | (capmode_coredump ? VN_OPEN_NOCAPCHECK : 0);
+ oflags = VN_OPEN_NOAUDIT | VN_OPEN_NAMECACHE |
+ (capmode_coredump ? VN_OPEN_NOCAPCHECK : 0);
/*
* If the core format has a %I in it, then we need to check
diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c
index 6a89fda..1965375 100644
--- a/sys/kern/vfs_vnops.c
+++ b/sys/kern/vfs_vnops.c
@@ -215,6 +215,8 @@ restart:
return (error);
goto restart;
}
+ if ((vn_open_flags & VN_OPEN_NAMECACHE) != 0)
+ ndp->ni_cnd.cn_flags |= MAKEENTRY;
#ifdef MAC
error = mac_vnode_check_create(cred, ndp->ni_dvp,
&ndp->ni_cnd, vap);
diff --git a/sys/sys/vnode.h b/sys/sys/vnode.h
index 2450387..20bd0a1 100644
--- a/sys/sys/vnode.h
+++ b/sys/sys/vnode.h
@@ -577,6 +577,7 @@ vn_canvmio(struct vnode *vp)
/* vn_open_flags */
#define VN_OPEN_NOAUDIT 0x00000001
#define VN_OPEN_NOCAPCHECK 0x00000002
+#define VN_OPEN_NAMECACHE 0x00000004
/*
* Public vnode manipulation functions.
OpenPOWER on IntegriCloud