diff options
author | kib <kib@FreeBSD.org> | 2015-01-04 00:49:45 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2015-01-04 00:49:45 +0000 |
commit | 315194d815d378dda644b25d89b98f5e3579b530 (patch) | |
tree | 54abad046ca72655244d165f31f670166eedfc71 | |
parent | 511130787fe28fb9da8b2e64c39d0bc3742b9eff (diff) | |
download | FreeBSD-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.c | 3 | ||||
-rw-r--r-- | sys/kern/vfs_vnops.c | 2 | ||||
-rw-r--r-- | sys/sys/vnode.h | 1 |
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. |