You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
d_path: Use struct path in struct avc_audit_data
audit_log_d_path() is a d_path() wrapper that is used by the audit code. To use a struct path in audit_log_d_path() I need to embed it into struct avc_audit_data. [akpm@linux-foundation.org: coding-style fixes] Signed-off-by: Jan Blunck <jblunck@suse.de> Acked-by: Christoph Hellwig <hch@infradead.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: Neil Brown <neilb@suse.de> Cc: Stephen Smalley <sds@tycho.nsa.gov> Cc: James Morris <jmorris@namei.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
a03a8a709a
commit
44707fdf59
+10
-5
@@ -568,10 +568,11 @@ void avc_audit(u32 ssid, u32 tsid,
|
||||
audit_log_format(ab, " capability=%d", a->u.cap);
|
||||
break;
|
||||
case AVC_AUDIT_DATA_FS:
|
||||
if (a->u.fs.dentry) {
|
||||
struct dentry *dentry = a->u.fs.dentry;
|
||||
if (a->u.fs.mnt) {
|
||||
audit_log_d_path(ab, "path=", dentry, a->u.fs.mnt);
|
||||
if (a->u.fs.path.dentry) {
|
||||
struct dentry *dentry = a->u.fs.path.dentry;
|
||||
if (a->u.fs.path.mnt) {
|
||||
audit_log_d_path(ab, "path=",
|
||||
&a->u.fs.path);
|
||||
} else {
|
||||
audit_log_format(ab, " name=");
|
||||
audit_log_untrustedstring(ab, dentry->d_name.name);
|
||||
@@ -626,8 +627,12 @@ void avc_audit(u32 ssid, u32 tsid,
|
||||
case AF_UNIX:
|
||||
u = unix_sk(sk);
|
||||
if (u->dentry) {
|
||||
struct path path = {
|
||||
.dentry = u->dentry,
|
||||
.mnt = u->mnt
|
||||
};
|
||||
audit_log_d_path(ab, "path=",
|
||||
u->dentry, u->mnt);
|
||||
&path);
|
||||
break;
|
||||
}
|
||||
if (!u->addr)
|
||||
|
||||
+12
-16
@@ -1356,8 +1356,8 @@ static inline int dentry_has_perm(struct task_struct *tsk,
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct avc_audit_data ad;
|
||||
AVC_AUDIT_DATA_INIT(&ad,FS);
|
||||
ad.u.fs.mnt = mnt;
|
||||
ad.u.fs.dentry = dentry;
|
||||
ad.u.fs.path.mnt = mnt;
|
||||
ad.u.fs.path.dentry = dentry;
|
||||
return inode_has_perm(tsk, inode, av, &ad);
|
||||
}
|
||||
|
||||
@@ -1375,15 +1375,12 @@ static int file_has_perm(struct task_struct *tsk,
|
||||
{
|
||||
struct task_security_struct *tsec = tsk->security;
|
||||
struct file_security_struct *fsec = file->f_security;
|
||||
struct vfsmount *mnt = file->f_path.mnt;
|
||||
struct dentry *dentry = file->f_path.dentry;
|
||||
struct inode *inode = dentry->d_inode;
|
||||
struct inode *inode = file->f_path.dentry->d_inode;
|
||||
struct avc_audit_data ad;
|
||||
int rc;
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad, FS);
|
||||
ad.u.fs.mnt = mnt;
|
||||
ad.u.fs.dentry = dentry;
|
||||
ad.u.fs.path = file->f_path;
|
||||
|
||||
if (tsec->sid != fsec->sid) {
|
||||
rc = avc_has_perm(tsec->sid, fsec->sid,
|
||||
@@ -1418,7 +1415,7 @@ static int may_create(struct inode *dir,
|
||||
sbsec = dir->i_sb->s_security;
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad, FS);
|
||||
ad.u.fs.dentry = dentry;
|
||||
ad.u.fs.path.dentry = dentry;
|
||||
|
||||
rc = avc_has_perm(tsec->sid, dsec->sid, SECCLASS_DIR,
|
||||
DIR__ADD_NAME | DIR__SEARCH,
|
||||
@@ -1476,7 +1473,7 @@ static int may_link(struct inode *dir,
|
||||
isec = dentry->d_inode->i_security;
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad, FS);
|
||||
ad.u.fs.dentry = dentry;
|
||||
ad.u.fs.path.dentry = dentry;
|
||||
|
||||
av = DIR__SEARCH;
|
||||
av |= (kind ? DIR__REMOVE_NAME : DIR__ADD_NAME);
|
||||
@@ -1523,7 +1520,7 @@ static inline int may_rename(struct inode *old_dir,
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad, FS);
|
||||
|
||||
ad.u.fs.dentry = old_dentry;
|
||||
ad.u.fs.path.dentry = old_dentry;
|
||||
rc = avc_has_perm(tsec->sid, old_dsec->sid, SECCLASS_DIR,
|
||||
DIR__REMOVE_NAME | DIR__SEARCH, &ad);
|
||||
if (rc)
|
||||
@@ -1539,7 +1536,7 @@ static inline int may_rename(struct inode *old_dir,
|
||||
return rc;
|
||||
}
|
||||
|
||||
ad.u.fs.dentry = new_dentry;
|
||||
ad.u.fs.path.dentry = new_dentry;
|
||||
av = DIR__ADD_NAME | DIR__SEARCH;
|
||||
if (new_dentry->d_inode)
|
||||
av |= DIR__REMOVE_NAME;
|
||||
@@ -1918,8 +1915,7 @@ static int selinux_bprm_set_security(struct linux_binprm *bprm)
|
||||
}
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad, FS);
|
||||
ad.u.fs.mnt = bprm->file->f_path.mnt;
|
||||
ad.u.fs.dentry = bprm->file->f_path.dentry;
|
||||
ad.u.fs.path = bprm->file->f_path;
|
||||
|
||||
if (bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID)
|
||||
newsid = tsec->sid;
|
||||
@@ -2315,7 +2311,7 @@ static int selinux_sb_kern_mount(struct super_block *sb, void *data)
|
||||
return rc;
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad,FS);
|
||||
ad.u.fs.dentry = sb->s_root;
|
||||
ad.u.fs.path.dentry = sb->s_root;
|
||||
return superblock_has_perm(current, sb, FILESYSTEM__MOUNT, &ad);
|
||||
}
|
||||
|
||||
@@ -2324,7 +2320,7 @@ static int selinux_sb_statfs(struct dentry *dentry)
|
||||
struct avc_audit_data ad;
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad,FS);
|
||||
ad.u.fs.dentry = dentry->d_sb->s_root;
|
||||
ad.u.fs.path.dentry = dentry->d_sb->s_root;
|
||||
return superblock_has_perm(current, dentry->d_sb, FILESYSTEM__GETATTR, &ad);
|
||||
}
|
||||
|
||||
@@ -2587,7 +2583,7 @@ static int selinux_inode_setxattr(struct dentry *dentry, char *name, void *value
|
||||
return -EPERM;
|
||||
|
||||
AVC_AUDIT_DATA_INIT(&ad,FS);
|
||||
ad.u.fs.dentry = dentry;
|
||||
ad.u.fs.path.dentry = dentry;
|
||||
|
||||
rc = avc_has_perm(tsec->sid, isec->sid, isec->sclass,
|
||||
FILE__RELABELFROM, &ad);
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/path.h>
|
||||
#include <asm/system.h>
|
||||
#include "flask.h"
|
||||
#include "av_permissions.h"
|
||||
@@ -30,8 +31,6 @@ extern int selinux_enforcing;
|
||||
struct avc_entry;
|
||||
|
||||
struct task_struct;
|
||||
struct vfsmount;
|
||||
struct dentry;
|
||||
struct inode;
|
||||
struct sock;
|
||||
struct sk_buff;
|
||||
@@ -46,8 +45,7 @@ struct avc_audit_data {
|
||||
struct task_struct *tsk;
|
||||
union {
|
||||
struct {
|
||||
struct vfsmount *mnt;
|
||||
struct dentry *dentry;
|
||||
struct path path;
|
||||
struct inode *inode;
|
||||
} fs;
|
||||
struct {
|
||||
|
||||
Reference in New Issue
Block a user