Loading include/linux/lsm_audit.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -59,6 +59,7 @@ struct common_audit_data { #define LSM_AUDIT_DATA_INODE 9 #define LSM_AUDIT_DATA_INODE 9 #define LSM_AUDIT_DATA_DENTRY 10 #define LSM_AUDIT_DATA_DENTRY 10 #define LSM_AUDIT_DATA_IOCTL_OP 11 #define LSM_AUDIT_DATA_IOCTL_OP 11 #define LSM_AUDIT_DATA_FILE 12 union { union { struct path path; struct path path; struct dentry *dentry; struct dentry *dentry; Loading @@ -75,6 +76,7 @@ struct common_audit_data { #endif #endif char *kmod_name; char *kmod_name; struct lsm_ioctlop_audit *op; struct lsm_ioctlop_audit *op; struct file *file; } u; } u; /* this union contains LSM specific data */ /* this union contains LSM specific data */ union { union { Loading security/lsm_audit.c +13 −0 Original line number Original line Diff line number Diff line Loading @@ -245,6 +245,19 @@ static void dump_common_audit_data(struct audit_buffer *ab, } } break; break; } } case LSM_AUDIT_DATA_FILE: { struct inode *inode; audit_log_d_path(ab, " path=", &a->u.file->f_path); inode = file_inode(a->u.file); if (inode) { audit_log_format(ab, " dev="); audit_log_untrustedstring(ab, inode->i_sb->s_id); audit_log_format(ab, " ino=%lu", inode->i_ino); } break; } case LSM_AUDIT_DATA_IOCTL_OP: { case LSM_AUDIT_DATA_IOCTL_OP: { struct inode *inode; struct inode *inode; Loading security/selinux/hooks.c +8 −8 Original line number Original line Diff line number Diff line Loading @@ -1761,8 +1761,8 @@ static inline int file_path_has_perm(const struct cred *cred, { { struct common_audit_data ad; struct common_audit_data ad; ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = file->f_path; ad.u.file = file; return inode_has_perm(cred, file_inode(file), av, &ad); return inode_has_perm(cred, file_inode(file), av, &ad); } } Loading @@ -1784,8 +1784,8 @@ static int file_has_perm(const struct cred *cred, u32 sid = cred_sid(cred); u32 sid = cred_sid(cred); int rc; int rc; ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = file->f_path; ad.u.file = file; if (sid != fsec->sid) { if (sid != fsec->sid) { rc = avc_has_perm(sid, fsec->sid, rc = avc_has_perm(sid, fsec->sid, Loading Loading @@ -2365,8 +2365,8 @@ static int selinux_bprm_set_creds(struct linux_binprm *bprm) new_tsec->sid = old_tsec->sid; new_tsec->sid = old_tsec->sid; } } ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = bprm->file->f_path; ad.u.file = bprm->file; if (new_tsec->sid == old_tsec->sid) { if (new_tsec->sid == old_tsec->sid) { rc = avc_has_perm(old_tsec->sid, isec->sid, rc = avc_has_perm(old_tsec->sid, isec->sid, Loading Loading @@ -3833,8 +3833,8 @@ static int selinux_kernel_module_from_file(struct file *file) /* finit_module */ /* finit_module */ ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = file->f_path; ad.u.file = file; fsec = file->f_security; fsec = file->f_security; if (sid != fsec->sid) { if (sid != fsec->sid) { Loading Loading
include/linux/lsm_audit.h +2 −0 Original line number Original line Diff line number Diff line Loading @@ -59,6 +59,7 @@ struct common_audit_data { #define LSM_AUDIT_DATA_INODE 9 #define LSM_AUDIT_DATA_INODE 9 #define LSM_AUDIT_DATA_DENTRY 10 #define LSM_AUDIT_DATA_DENTRY 10 #define LSM_AUDIT_DATA_IOCTL_OP 11 #define LSM_AUDIT_DATA_IOCTL_OP 11 #define LSM_AUDIT_DATA_FILE 12 union { union { struct path path; struct path path; struct dentry *dentry; struct dentry *dentry; Loading @@ -75,6 +76,7 @@ struct common_audit_data { #endif #endif char *kmod_name; char *kmod_name; struct lsm_ioctlop_audit *op; struct lsm_ioctlop_audit *op; struct file *file; } u; } u; /* this union contains LSM specific data */ /* this union contains LSM specific data */ union { union { Loading
security/lsm_audit.c +13 −0 Original line number Original line Diff line number Diff line Loading @@ -245,6 +245,19 @@ static void dump_common_audit_data(struct audit_buffer *ab, } } break; break; } } case LSM_AUDIT_DATA_FILE: { struct inode *inode; audit_log_d_path(ab, " path=", &a->u.file->f_path); inode = file_inode(a->u.file); if (inode) { audit_log_format(ab, " dev="); audit_log_untrustedstring(ab, inode->i_sb->s_id); audit_log_format(ab, " ino=%lu", inode->i_ino); } break; } case LSM_AUDIT_DATA_IOCTL_OP: { case LSM_AUDIT_DATA_IOCTL_OP: { struct inode *inode; struct inode *inode; Loading
security/selinux/hooks.c +8 −8 Original line number Original line Diff line number Diff line Loading @@ -1761,8 +1761,8 @@ static inline int file_path_has_perm(const struct cred *cred, { { struct common_audit_data ad; struct common_audit_data ad; ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = file->f_path; ad.u.file = file; return inode_has_perm(cred, file_inode(file), av, &ad); return inode_has_perm(cred, file_inode(file), av, &ad); } } Loading @@ -1784,8 +1784,8 @@ static int file_has_perm(const struct cred *cred, u32 sid = cred_sid(cred); u32 sid = cred_sid(cred); int rc; int rc; ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = file->f_path; ad.u.file = file; if (sid != fsec->sid) { if (sid != fsec->sid) { rc = avc_has_perm(sid, fsec->sid, rc = avc_has_perm(sid, fsec->sid, Loading Loading @@ -2365,8 +2365,8 @@ static int selinux_bprm_set_creds(struct linux_binprm *bprm) new_tsec->sid = old_tsec->sid; new_tsec->sid = old_tsec->sid; } } ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = bprm->file->f_path; ad.u.file = bprm->file; if (new_tsec->sid == old_tsec->sid) { if (new_tsec->sid == old_tsec->sid) { rc = avc_has_perm(old_tsec->sid, isec->sid, rc = avc_has_perm(old_tsec->sid, isec->sid, Loading Loading @@ -3833,8 +3833,8 @@ static int selinux_kernel_module_from_file(struct file *file) /* finit_module */ /* finit_module */ ad.type = LSM_AUDIT_DATA_PATH; ad.type = LSM_AUDIT_DATA_FILE; ad.u.path = file->f_path; ad.u.file = file; fsec = file->f_security; fsec = file->f_security; if (sid != fsec->sid) { if (sid != fsec->sid) { Loading