PERFORCE change 17906 for review
Robert Watson
rwatson at freebsd.org
Sun Sep 22 04:34:09 GMT 2002
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=17906
Change 17906 by rwatson at rwatson_tislabs on 2002/09/21 21:33:48
Introduce a new MAC Framework and MAC Policy entry point,
mac_create_devfs_symlink(), which is invoked to initialize the
label on a newly created symlink in devfs in the scenario
where symlink() is called by a user process (the case where
it's associated with a device during make_dev_alias is handled
by the mac_create_devfs_device() case, since it has a dev_t).
The current method of copying the label from the vnode
didn't work as it broke assertions in the handling of the
vnode due to a duplicate vnode creation event. This should
fix problems in Biba, MLS, TE, and SEBSD relating to correct
labeling of user generated symlinks (such as /dev/log).
In Biba, MLS, and TE, we derive the symlink label from the
subject credential creating the symlink. It could also
come from the parent directory of the symlink, which is
available in the entry point arguments.
Affected files ...
.. //depot/projects/trustedbsd/mac/sys/fs/devfs/devfs_vnops.c#24 edit
.. //depot/projects/trustedbsd/mac/sys/security/mac_biba/mac_biba.c#110 edit
.. //depot/projects/trustedbsd/mac/sys/security/mac_mls/mac_mls.c#91 edit
.. //depot/projects/trustedbsd/mac/sys/security/mac_none/mac_none.c#75 edit
.. //depot/projects/trustedbsd/mac/sys/security/mac_te/mac_te.c#77 edit
.. //depot/projects/trustedbsd/mac/sys/security/mac_test/mac_test.c#46 edit
.. //depot/projects/trustedbsd/mac/sys/sys/mac.h#162 edit
.. //depot/projects/trustedbsd/mac/sys/sys/mac_policy.h#126 edit
Differences ...
==== //depot/projects/trustedbsd/mac/sys/fs/devfs/devfs_vnops.c#24 (text+ko) ====
@@ -878,12 +878,11 @@
MALLOC(de->de_symlink, char *, i, M_DEVFS, M_WAITOK);
bcopy(ap->a_target, de->de_symlink, i);
lockmgr(&dmp->dm_lock, LK_EXCLUSIVE, 0, curthread);
+#ifdef MAC
+ mac_create_devfs_symlink(ap->a_cnp->cn_cred, dd, de);
+#endif
TAILQ_INSERT_TAIL(&dd->de_dlist, de, de_list);
devfs_allocv(de, ap->a_dvp->v_mount, ap->a_vpp, 0);
-#ifdef MAC
- mac_create_vnode(ap->a_cnp->cn_cred, ap->a_dvp, *ap->a_vpp);
- mac_update_devfsdirent(de, *ap->a_vpp);
-#endif /* MAC */
lockmgr(&dmp->dm_lock, LK_RELEASE, 0, curthread);
return (0);
}
==== //depot/projects/trustedbsd/mac/sys/security/mac_biba/mac_biba.c#110 (text+ko) ====
@@ -584,6 +584,18 @@
}
static void
+mac_biba_create_devfs_symlink(struct ucred *cred, struct devfs_dirent *dd,
+ struct label *ddlabel, struct devfs_dirent *de, struct label *delabel)
+{
+ struct mac_biba *source, *dest;
+
+ source = SLOT(&cred->cr_label);
+ dest = SLOT(delabel);
+
+ mac_biba_copy_single(source, dest);
+}
+
+static void
mac_biba_create_devfs_vnode(struct devfs_dirent *devfs_dirent,
struct label *direntlabel, struct vnode *vp, struct label *vnodelabel)
{
@@ -2231,6 +2243,8 @@
(macop_t)mac_biba_create_devfs_device },
{ MAC_CREATE_DEVFS_DIRECTORY,
(macop_t)mac_biba_create_devfs_directory },
+ { MAC_CREATE_DEVFS_SYMLINK,
+ (macop_t)mac_biba_create_devfs_symlink },
{ MAC_CREATE_DEVFS_VNODE,
(macop_t)mac_biba_create_devfs_vnode },
{ MAC_CREATE_VNODE,
==== //depot/projects/trustedbsd/mac/sys/security/mac_mls/mac_mls.c#91 (text+ko) ====
@@ -575,6 +575,18 @@
}
static void
+mac_mls_create_devfs_symlink(struct ucred *cred, struct devfs_dirent *dd,
+ struct label *ddlabel, struct devfs_dirent *de, struct label *delabel)
+{
+ struct mac_mls *source, *dest;
+
+ source = SLOT(&cred->cr_label);
+ dest = SLOT(delabel);
+
+ mac_mls_copy_single(source, dest);
+}
+
+static void
mac_mls_create_devfs_vnode(struct devfs_dirent *devfs_dirent,
struct label *direntlabel, struct vnode *vp, struct label *vnodelabel)
{
@@ -2166,6 +2178,8 @@
(macop_t)mac_mls_create_devfs_device },
{ MAC_CREATE_DEVFS_DIRECTORY,
(macop_t)mac_mls_create_devfs_directory },
+ { MAC_CREATE_DEVFS_SYMLINK,
+ (macop_t)mac_mls_create_devfs_symlink },
{ MAC_CREATE_DEVFS_VNODE,
(macop_t)mac_mls_create_devfs_vnode },
{ MAC_CREATE_VNODE,
==== //depot/projects/trustedbsd/mac/sys/security/mac_none/mac_none.c#75 (text+ko) ====
@@ -169,6 +169,13 @@
}
static void
+mac_none_create_devfs_symlink(struct ucred *cred, struct devfs_dirent *dd,
+ struct label *ddlabel, struct devfs_dirent *de, struct label *delabel)
+{
+
+}
+
+static void
mac_none_create_devfs_vnode(struct devfs_dirent *devfs_dirent,
struct label *direntlabel, struct vnode *vp, struct label *vnodelabel)
{
@@ -923,6 +930,8 @@
(macop_t)mac_none_create_devfs_device },
{ MAC_CREATE_DEVFS_DIRECTORY,
(macop_t)mac_none_create_devfs_directory },
+ { MAC_CREATE_DEVFS_SYMLINK,
+ (macop_t)mac_none_create_devfs_symlink },
{ MAC_CREATE_DEVFS_VNODE,
(macop_t)mac_none_create_devfs_vnode },
{ MAC_CREATE_VNODE,
==== //depot/projects/trustedbsd/mac/sys/security/mac_te/mac_te.c#77 (text+ko) ====
@@ -1005,6 +1005,14 @@
}
static void
+mac_te_create_devfs_symlink(struct ucred *cred, struct devfs_dirent *dd,
+ struct label *ddlabel, struct devfs_dirent *de, struct label *delabel)
+{
+
+ mac_te_copy_label(&cred->cr_label, delabel);
+}
+
+static void
mac_te_create_devfs_vnode(struct devfs_dirent *de, struct label *direntlabel,
struct vnode *vp, struct label *vnodelabel)
{
@@ -1679,6 +1687,8 @@
(macop_t)mac_te_create_devfs_device },
{ MAC_CREATE_DEVFS_DIRECTORY,
(macop_t)mac_te_create_devfs_directory },
+ { MAC_CREATE_DEVFS_SYMLINK,
+ (macop_t)mac_te_create_devfs_symlink },
{ MAC_CREATE_DEVFS_VNODE,
(macop_t)mac_te_create_devfs_vnode },
{ MAC_CREATE_VNODE,
==== //depot/projects/trustedbsd/mac/sys/security/mac_test/mac_test.c#46 (text+ko) ====
@@ -543,6 +543,13 @@
}
static void
+mac_test_create_devfs_symlink(struct ucred *cred, struct devfs_dirent *dd,
+ struct label *ddlabel, struct devfs_dirent *de, struct label *delabel)
+{
+
+}
+
+static void
mac_test_create_devfs_vnode(struct devfs_dirent *devfs_dirent,
struct label *direntlabel, struct vnode *vp, struct label *vnodelabel)
{
@@ -1301,6 +1308,8 @@
(macop_t)mac_test_create_devfs_device },
{ MAC_CREATE_DEVFS_DIRECTORY,
(macop_t)mac_test_create_devfs_directory },
+ { MAC_CREATE_DEVFS_SYMLINK,
+ (macop_t)mac_test_create_devfs_symlink },
{ MAC_CREATE_DEVFS_VNODE,
(macop_t)mac_test_create_devfs_vnode },
{ MAC_CREATE_VNODE,
==== //depot/projects/trustedbsd/mac/sys/sys/mac.h#162 (text+ko) ====
@@ -267,6 +267,8 @@
void mac_create_devfs_device(dev_t dev, struct devfs_dirent *de);
void mac_create_devfs_directory(char *dirname, int dirnamelen,
struct devfs_dirent *de);
+void mac_create_devfs_symlink(struct ucred *cred, struct devfs_dirent *dd,
+ struct devfs_dirent *de);
void mac_create_devfs_vnode(struct devfs_dirent *de, struct vnode *vp);
void mac_create_vnode(struct ucred *cred, struct vnode *parent,
struct vnode *child);
==== //depot/projects/trustedbsd/mac/sys/sys/mac_policy.h#126 (text+ko) ====
@@ -146,6 +146,9 @@
struct label *label);
void (*mpo_create_devfs_directory)(char *dirname, int dirnamelen,
struct devfs_dirent *de, struct label *label);
+ void (*mpo_create_devfs_symlink)(struct ucred *cred,
+ struct devfs_dirent *dd, struct label *ddlabel,
+ struct devfs_dirent *de, struct label *delabel);
void (*mpo_create_devfs_vnode)(struct devfs_dirent *de,
struct label *direntlabel, struct vnode *vp,
struct label *vnodelabel);
@@ -435,6 +438,7 @@
MAC_INTERNALIZE_VNODE_LABEL,
MAC_CREATE_DEVFS_DEVICE,
MAC_CREATE_DEVFS_DIRECTORY,
+ MAC_CREATE_DEVFS_SYMLINK,
MAC_CREATE_DEVFS_VNODE,
MAC_CREATE_VNODE,
MAC_CREATE_MOUNT,
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message
More information about the trustedbsd-cvs
mailing list