Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 99217
b: refs/heads/master
c: 811f379
h: refs/heads/master
i:
  99215: eb5236c
v: v3
  • Loading branch information
Eric Paris authored and James Morris committed Jul 14, 2008
1 parent 83cb2eb commit ee8d091
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 65fc7668006b537f7ae8451990c0ed9ec882544e
refs/heads/master: 811f3799279e567aa354c649ce22688d949ac7a9
22 changes: 17 additions & 5 deletions trunk/security/selinux/hooks.c
Original file line number Diff line number Diff line change
Expand Up @@ -556,13 +556,15 @@ static int selinux_set_mnt_opts(struct super_block *sb,
struct task_security_struct *tsec = current->security;
struct superblock_security_struct *sbsec = sb->s_security;
const char *name = sb->s_type->name;
struct inode *inode = sbsec->sb->s_root->d_inode;
struct inode_security_struct *root_isec = inode->i_security;
struct dentry *root = sb->s_root;
struct inode *root_inode = root->d_inode;
struct inode_security_struct *root_isec = root_inode->i_security;
u32 fscontext_sid = 0, context_sid = 0, rootcontext_sid = 0;
u32 defcontext_sid = 0;
char **mount_options = opts->mnt_opts;
int *flags = opts->mnt_opts_flags;
int num_opts = opts->num_mnt_opts;
bool can_xattr = false;

mutex_lock(&sbsec->lock);

Expand Down Expand Up @@ -666,14 +668,24 @@ static int selinux_set_mnt_opts(struct super_block *sb,
goto out;
}

if (strcmp(sb->s_type->name, "proc") == 0)
if (strcmp(name, "proc") == 0)
sbsec->proc = 1;

/*
* test if the fs supports xattrs, fs_use might make use of this if the
* fs has no definition in policy.
*/
if (root_inode->i_op->getxattr) {
rc = root_inode->i_op->getxattr(root, XATTR_NAME_SELINUX, NULL, 0);
if (rc >= 0 || rc == -ENODATA)
can_xattr = true;
}

/* Determine the labeling behavior to use for this filesystem type. */
rc = security_fs_use(sb->s_type->name, &sbsec->behavior, &sbsec->sid);
rc = security_fs_use(name, &sbsec->behavior, &sbsec->sid, can_xattr);
if (rc) {
printk(KERN_WARNING "%s: security_fs_use(%s) returned %d\n",
__func__, sb->s_type->name, rc);
__func__, name, rc);
goto out;
}

Expand Down
2 changes: 1 addition & 1 deletion trunk/security/selinux/include/security.h
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ int security_get_allow_unknown(void);
#define SECURITY_FS_USE_MNTPOINT 6 /* use mountpoint labeling */

int security_fs_use(const char *fstype, unsigned int *behavior,
u32 *sid);
u32 *sid, bool can_xattr);

int security_genfs_sid(const char *fstype, char *name, u16 sclass,
u32 *sid);
Expand Down
27 changes: 19 additions & 8 deletions trunk/security/selinux/ss/services.c
Original file line number Diff line number Diff line change
Expand Up @@ -1934,7 +1934,8 @@ int security_genfs_sid(const char *fstype,
int security_fs_use(
const char *fstype,
unsigned int *behavior,
u32 *sid)
u32 *sid,
bool can_xattr)
{
int rc = 0;
struct ocontext *c;
Expand All @@ -1948,6 +1949,7 @@ int security_fs_use(
c = c->next;
}

/* look for labeling behavior defined in policy */
if (c) {
*behavior = c->v.behavior;
if (!c->sid[0]) {
Expand All @@ -1958,14 +1960,23 @@ int security_fs_use(
goto out;
}
*sid = c->sid[0];
goto out;
}

/* labeling behavior not in policy, use xattrs if possible */
if (can_xattr) {
*behavior = SECURITY_FS_USE_XATTR;
*sid = SECINITSID_FS;
goto out;
}

/* no behavior in policy and can't use xattrs, try GENFS */
rc = security_genfs_sid(fstype, "/", SECCLASS_DIR, sid);
if (rc) {
*behavior = SECURITY_FS_USE_NONE;
rc = 0;
} else {
rc = security_genfs_sid(fstype, "/", SECCLASS_DIR, sid);
if (rc) {
*behavior = SECURITY_FS_USE_NONE;
rc = 0;
} else {
*behavior = SECURITY_FS_USE_GENFS;
}
*behavior = SECURITY_FS_USE_GENFS;
}

out:
Expand Down

0 comments on commit ee8d091

Please sign in to comment.