svn commit: r243612 - in head/sys: kern sys
Pawel Jakub Dawidek
pjd at FreeBSD.org
Tue Nov 27 10:32:35 UTC 2012
Author: pjd
Date: Tue Nov 27 10:32:35 2012
New Revision: 243612
URL: http://svnweb.freebsd.org/changeset/base/243612
Log:
- Add NOCAPCHECK flag to namei that allows lookup to work even if the process
is in capability mode.
- Add VN_OPEN_NOCAPCHECK flag for vn_open_cred() to will ne converted into
NOCAPCHECK namei flag.
This functionality will be used to enable core dumps for sandboxed processes.
Reviewed by: rwatson
Obtained from: WHEEL Systems
MFC after: 2 weeks
Modified:
head/sys/kern/vfs_lookup.c
head/sys/kern/vfs_vnops.c
head/sys/sys/namei.h
head/sys/sys/vnode.h
Modified: head/sys/kern/vfs_lookup.c
==============================================================================
--- head/sys/kern/vfs_lookup.c Tue Nov 27 10:25:03 2012 (r243611)
+++ head/sys/kern/vfs_lookup.c Tue Nov 27 10:32:35 2012 (r243612)
@@ -183,7 +183,7 @@ namei(struct nameidata *ndp)
* not an absolute path, and not containing '..' components) to
* a real file descriptor, not the pseudo-descriptor AT_FDCWD.
*/
- if (IN_CAPABILITY_MODE(td)) {
+ if (IN_CAPABILITY_MODE(td) && (cnp->cn_flags & NOCAPCHECK) == 0) {
ndp->ni_strictrelative = 1;
if (ndp->ni_dirfd == AT_FDCWD) {
#ifdef KTRACE
Modified: head/sys/kern/vfs_vnops.c
==============================================================================
--- head/sys/kern/vfs_vnops.c Tue Nov 27 10:25:03 2012 (r243611)
+++ head/sys/kern/vfs_vnops.c Tue Nov 27 10:32:35 2012 (r243612)
@@ -135,6 +135,8 @@ restart:
ndp->ni_cnd.cn_flags |= FOLLOW;
if (!(vn_open_flags & VN_OPEN_NOAUDIT))
ndp->ni_cnd.cn_flags |= AUDITVNODE1;
+ if (vn_open_flags & VN_OPEN_NOCAPCHECK)
+ ndp->ni_cnd.cn_flags |= NOCAPCHECK;
bwillwrite();
if ((error = namei(ndp)) != 0)
return (error);
@@ -188,6 +190,8 @@ restart:
ndp->ni_cnd.cn_flags |= LOCKSHARED;
if (!(vn_open_flags & VN_OPEN_NOAUDIT))
ndp->ni_cnd.cn_flags |= AUDITVNODE1;
+ if (vn_open_flags & VN_OPEN_NOCAPCHECK)
+ ndp->ni_cnd.cn_flags |= NOCAPCHECK;
if ((error = namei(ndp)) != 0)
return (error);
vp = ndp->ni_vp;
Modified: head/sys/sys/namei.h
==============================================================================
--- head/sys/sys/namei.h Tue Nov 27 10:25:03 2012 (r243611)
+++ head/sys/sys/namei.h Tue Nov 27 10:32:35 2012 (r243612)
@@ -147,7 +147,8 @@ struct nameidata {
#define AUDITVNODE1 0x04000000 /* audit the looked up vnode information */
#define AUDITVNODE2 0x08000000 /* audit the looked up vnode information */
#define TRAILINGSLASH 0x10000000 /* path ended in a slash */
-#define PARAMASK 0x1ffffe00 /* mask of parameter descriptors */
+#define NOCAPCHECK 0x20000000 /* do not perform capability checks */
+#define PARAMASK 0x3ffffe00 /* mask of parameter descriptors */
/*
* Initialization of a nameidata structure.
Modified: head/sys/sys/vnode.h
==============================================================================
--- head/sys/sys/vnode.h Tue Nov 27 10:25:03 2012 (r243611)
+++ head/sys/sys/vnode.h Tue Nov 27 10:32:35 2012 (r243612)
@@ -565,6 +565,7 @@ vn_canvmio(struct vnode *vp)
/* vn_open_flags */
#define VN_OPEN_NOAUDIT 0x00000001
+#define VN_OPEN_NOCAPCHECK 0x00000002
/*
* Public vnode manipulation functions.
More information about the svn-src-head
mailing list