diff options
| author | Eric Paris <eparis@redhat.com> | 2011-04-25 12:54:27 -0400 | 
|---|---|---|
| committer | Eric Paris <eparis@redhat.com> | 2011-04-25 18:13:15 -0400 | 
| commit | f48b7399840b453e7282b523f535561fe9638a2d (patch) | |
| tree | 29eed009469d35473367708ea60b9c5b01fc0c5f /security/selinux/hooks.c | |
| parent | 0dc1ba24f7fff659725eecbba2c9ad679a0954cd (diff) | |
| download | olio-linux-3.10-f48b7399840b453e7282b523f535561fe9638a2d.tar.xz olio-linux-3.10-f48b7399840b453e7282b523f535561fe9638a2d.zip  | |
LSM: split LSM_AUDIT_DATA_FS into _PATH and _INODE
The lsm common audit code has wacky contortions making sure which pieces
of information are set based on if it was given a path, dentry, or
inode.  Split this into path and inode to get rid of some of the code
complexity.
Signed-off-by: Eric Paris <eparis@redhat.com>
Acked-by: Casey Schaufler <casey@schaufler-ca.com>
Diffstat (limited to 'security/selinux/hooks.c')
| -rw-r--r-- | security/selinux/hooks.c | 50 | 
1 files changed, 25 insertions, 25 deletions
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index ed5f29aa0a3..ad664d3056e 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@ -1488,8 +1488,8 @@ static int inode_has_perm(const struct cred *cred,  	if (!adp) {  		adp = &ad; -		COMMON_AUDIT_DATA_INIT(&ad, FS); -		ad.u.fs.inode = inode; +		COMMON_AUDIT_DATA_INIT(&ad, INODE); +		ad.u.inode = inode;  	}  	return avc_has_perm_flags(sid, isec->sid, isec->sclass, perms, adp, flags); @@ -1506,9 +1506,9 @@ static inline int dentry_has_perm(const struct cred *cred,  	struct inode *inode = dentry->d_inode;  	struct common_audit_data ad; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path.mnt = mnt; -	ad.u.fs.path.dentry = dentry; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path.mnt = mnt; +	ad.u.path.dentry = dentry;  	return inode_has_perm(cred, inode, av, &ad, 0);  } @@ -1530,8 +1530,8 @@ static int file_has_perm(const struct cred *cred,  	u32 sid = cred_sid(cred);  	int rc; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path = file->f_path; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path = file->f_path;  	if (sid != fsec->sid) {  		rc = avc_has_perm(sid, fsec->sid, @@ -1569,8 +1569,8 @@ static int may_create(struct inode *dir,  	sid = tsec->sid;  	newsid = tsec->create_sid; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path.dentry = dentry; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path.dentry = dentry;  	rc = avc_has_perm(sid, dsec->sid, SECCLASS_DIR,  			  DIR__ADD_NAME | DIR__SEARCH, @@ -1621,8 +1621,8 @@ static int may_link(struct inode *dir,  	dsec = dir->i_security;  	isec = dentry->d_inode->i_security; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path.dentry = dentry; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path.dentry = dentry;  	av = DIR__SEARCH;  	av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME); @@ -1667,9 +1667,9 @@ static inline int may_rename(struct inode *old_dir,  	old_is_dir = S_ISDIR(old_dentry->d_inode->i_mode);  	new_dsec = new_dir->i_security; -	COMMON_AUDIT_DATA_INIT(&ad, FS); +	COMMON_AUDIT_DATA_INIT(&ad, PATH); -	ad.u.fs.path.dentry = old_dentry; +	ad.u.path.dentry = old_dentry;  	rc = avc_has_perm(sid, old_dsec->sid, SECCLASS_DIR,  			  DIR__REMOVE_NAME | DIR__SEARCH, &ad);  	if (rc) @@ -1685,7 +1685,7 @@ static inline int may_rename(struct inode *old_dir,  			return rc;  	} -	ad.u.fs.path.dentry = new_dentry; +	ad.u.path.dentry = new_dentry;  	av = DIR__ADD_NAME | DIR__SEARCH;  	if (new_dentry->d_inode)  		av |= DIR__REMOVE_NAME; @@ -1991,8 +1991,8 @@ static int selinux_bprm_set_creds(struct linux_binprm *bprm)  			return rc;  	} -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path = bprm->file->f_path; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path = bprm->file->f_path;  	if (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)  		new_tsec->sid = old_tsec->sid; @@ -2120,7 +2120,7 @@ static inline void flush_unauthorized_files(const struct cred *cred,  	/* Revalidate access to inherited open files. */ -	COMMON_AUDIT_DATA_INIT(&ad, FS); +	COMMON_AUDIT_DATA_INIT(&ad, INODE);  	spin_lock(&files->file_lock);  	for (;;) { @@ -2468,8 +2468,8 @@ static int selinux_sb_kern_mount(struct super_block *sb, int flags, void *data)  	if (flags & MS_KERNMOUNT)  		return 0; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path.dentry = sb->s_root; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path.dentry = sb->s_root;  	return superblock_has_perm(cred, sb, FILESYSTEM__MOUNT, &ad);  } @@ -2478,8 +2478,8 @@ static int selinux_sb_statfs(struct dentry *dentry)  	const struct cred *cred = current_cred();  	struct common_audit_data ad; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path.dentry = dentry->d_sb->s_root; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path.dentry = dentry->d_sb->s_root;  	return superblock_has_perm(cred, dentry->d_sb, FILESYSTEM__GETATTR, &ad);  } @@ -2653,8 +2653,8 @@ static int selinux_inode_permission(struct inode *inode, int mask, unsigned flag  	if (!mask)  		return 0; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.inode = inode; +	COMMON_AUDIT_DATA_INIT(&ad, INODE); +	ad.u.inode = inode;  	if (from_access)  		ad.selinux_audit_data.auditdeny |= FILE__AUDIT_ACCESS; @@ -2732,8 +2732,8 @@ static int selinux_inode_setxattr(struct dentry *dentry, const char *name,  	if (!is_owner_or_cap(inode))  		return -EPERM; -	COMMON_AUDIT_DATA_INIT(&ad, FS); -	ad.u.fs.path.dentry = dentry; +	COMMON_AUDIT_DATA_INIT(&ad, PATH); +	ad.u.path.dentry = dentry;  	rc = avc_has_perm(sid, isec->sid, isec->sclass,  			  FILE__RELABELFROM, &ad);  |