Loading security/apparmor/apparmorfs.c +36 −61 Original line number Diff line number Diff line Loading @@ -391,7 +391,26 @@ const struct file_operations aa_fs_seq_file_ops = { .release = single_release, }; static int aa_fs_seq_profile_open(struct inode *inode, struct file *file, /* * profile based file operations * policy/profiles/XXXX/profiles/ * */ #define SEQ_PROFILE_FOPS(NAME) \ static int seq_profile_ ##NAME ##_open(struct inode *inode, struct file *file)\ { \ return seq_profile_open(inode, file, seq_profile_ ##NAME ##_show); \ } \ \ static const struct file_operations seq_profile_ ##NAME ##_fops = { \ .owner = THIS_MODULE, \ .open = seq_profile_ ##NAME ##_open, \ .read = seq_read, \ .llseek = seq_lseek, \ .release = seq_profile_release, \ } \ static int seq_profile_open(struct inode *inode, struct file *file, int (*show)(struct seq_file *, void *)) { struct aa_proxy *proxy = aa_get_proxy(inode->i_private); Loading @@ -405,7 +424,7 @@ static int aa_fs_seq_profile_open(struct inode *inode, struct file *file, return error; } static int aa_fs_seq_profile_release(struct inode *inode, struct file *file) static int seq_profile_release(struct inode *inode, struct file *file) { struct seq_file *seq = (struct seq_file *) file->private_data; if (seq) Loading @@ -413,7 +432,7 @@ static int aa_fs_seq_profile_release(struct inode *inode, struct file *file) return single_release(inode, file); } static int aa_fs_seq_profname_show(struct seq_file *seq, void *v) static int seq_profile_name_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -423,20 +442,7 @@ static int aa_fs_seq_profname_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_profname_open(struct inode *inode, struct file *file) { return aa_fs_seq_profile_open(inode, file, aa_fs_seq_profname_show); } static const struct file_operations aa_fs_profname_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_profname_open, .read = seq_read, .llseek = seq_lseek, .release = aa_fs_seq_profile_release, }; static int aa_fs_seq_profmode_show(struct seq_file *seq, void *v) static int seq_profile_mode_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -446,20 +452,7 @@ static int aa_fs_seq_profmode_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_profmode_open(struct inode *inode, struct file *file) { return aa_fs_seq_profile_open(inode, file, aa_fs_seq_profmode_show); } static const struct file_operations aa_fs_profmode_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_profmode_open, .read = seq_read, .llseek = seq_lseek, .release = aa_fs_seq_profile_release, }; static int aa_fs_seq_profattach_show(struct seq_file *seq, void *v) static int seq_profile_attach_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -474,20 +467,7 @@ static int aa_fs_seq_profattach_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_profattach_open(struct inode *inode, struct file *file) { return aa_fs_seq_profile_open(inode, file, aa_fs_seq_profattach_show); } static const struct file_operations aa_fs_profattach_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_profattach_open, .read = seq_read, .llseek = seq_lseek, .release = aa_fs_seq_profile_release, }; static int aa_fs_seq_hash_show(struct seq_file *seq, void *v) static int seq_profile_hash_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -503,18 +483,11 @@ static int aa_fs_seq_hash_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_hash_open(struct inode *inode, struct file *file) { return single_open(file, aa_fs_seq_hash_show, inode->i_private); } SEQ_PROFILE_FOPS(name); SEQ_PROFILE_FOPS(mode); SEQ_PROFILE_FOPS(attach); SEQ_PROFILE_FOPS(hash); static const struct file_operations aa_fs_seq_hash_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_hash_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int aa_fs_seq_show_ns_level(struct seq_file *seq, void *v) Loading Loading @@ -890,25 +863,27 @@ int __aa_fs_profile_mkdir(struct aa_profile *profile, struct dentry *parent) goto fail; prof_dir(profile) = dir = dent; dent = create_profile_file(dir, "name", profile, &aa_fs_profname_fops); dent = create_profile_file(dir, "name", profile, &seq_profile_name_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_NAME] = dent; dent = create_profile_file(dir, "mode", profile, &aa_fs_profmode_fops); dent = create_profile_file(dir, "mode", profile, &seq_profile_mode_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_MODE] = dent; dent = create_profile_file(dir, "attach", profile, &aa_fs_profattach_fops); &seq_profile_attach_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_ATTACH] = dent; if (profile->hash) { dent = create_profile_file(dir, "sha1", profile, &aa_fs_seq_hash_fops); &seq_profile_hash_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_HASH] = dent; Loading Loading
security/apparmor/apparmorfs.c +36 −61 Original line number Diff line number Diff line Loading @@ -391,7 +391,26 @@ const struct file_operations aa_fs_seq_file_ops = { .release = single_release, }; static int aa_fs_seq_profile_open(struct inode *inode, struct file *file, /* * profile based file operations * policy/profiles/XXXX/profiles/ * */ #define SEQ_PROFILE_FOPS(NAME) \ static int seq_profile_ ##NAME ##_open(struct inode *inode, struct file *file)\ { \ return seq_profile_open(inode, file, seq_profile_ ##NAME ##_show); \ } \ \ static const struct file_operations seq_profile_ ##NAME ##_fops = { \ .owner = THIS_MODULE, \ .open = seq_profile_ ##NAME ##_open, \ .read = seq_read, \ .llseek = seq_lseek, \ .release = seq_profile_release, \ } \ static int seq_profile_open(struct inode *inode, struct file *file, int (*show)(struct seq_file *, void *)) { struct aa_proxy *proxy = aa_get_proxy(inode->i_private); Loading @@ -405,7 +424,7 @@ static int aa_fs_seq_profile_open(struct inode *inode, struct file *file, return error; } static int aa_fs_seq_profile_release(struct inode *inode, struct file *file) static int seq_profile_release(struct inode *inode, struct file *file) { struct seq_file *seq = (struct seq_file *) file->private_data; if (seq) Loading @@ -413,7 +432,7 @@ static int aa_fs_seq_profile_release(struct inode *inode, struct file *file) return single_release(inode, file); } static int aa_fs_seq_profname_show(struct seq_file *seq, void *v) static int seq_profile_name_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -423,20 +442,7 @@ static int aa_fs_seq_profname_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_profname_open(struct inode *inode, struct file *file) { return aa_fs_seq_profile_open(inode, file, aa_fs_seq_profname_show); } static const struct file_operations aa_fs_profname_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_profname_open, .read = seq_read, .llseek = seq_lseek, .release = aa_fs_seq_profile_release, }; static int aa_fs_seq_profmode_show(struct seq_file *seq, void *v) static int seq_profile_mode_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -446,20 +452,7 @@ static int aa_fs_seq_profmode_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_profmode_open(struct inode *inode, struct file *file) { return aa_fs_seq_profile_open(inode, file, aa_fs_seq_profmode_show); } static const struct file_operations aa_fs_profmode_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_profmode_open, .read = seq_read, .llseek = seq_lseek, .release = aa_fs_seq_profile_release, }; static int aa_fs_seq_profattach_show(struct seq_file *seq, void *v) static int seq_profile_attach_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -474,20 +467,7 @@ static int aa_fs_seq_profattach_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_profattach_open(struct inode *inode, struct file *file) { return aa_fs_seq_profile_open(inode, file, aa_fs_seq_profattach_show); } static const struct file_operations aa_fs_profattach_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_profattach_open, .read = seq_read, .llseek = seq_lseek, .release = aa_fs_seq_profile_release, }; static int aa_fs_seq_hash_show(struct seq_file *seq, void *v) static int seq_profile_hash_show(struct seq_file *seq, void *v) { struct aa_proxy *proxy = seq->private; struct aa_profile *profile = aa_get_profile_rcu(&proxy->profile); Loading @@ -503,18 +483,11 @@ static int aa_fs_seq_hash_show(struct seq_file *seq, void *v) return 0; } static int aa_fs_seq_hash_open(struct inode *inode, struct file *file) { return single_open(file, aa_fs_seq_hash_show, inode->i_private); } SEQ_PROFILE_FOPS(name); SEQ_PROFILE_FOPS(mode); SEQ_PROFILE_FOPS(attach); SEQ_PROFILE_FOPS(hash); static const struct file_operations aa_fs_seq_hash_fops = { .owner = THIS_MODULE, .open = aa_fs_seq_hash_open, .read = seq_read, .llseek = seq_lseek, .release = single_release, }; static int aa_fs_seq_show_ns_level(struct seq_file *seq, void *v) Loading Loading @@ -890,25 +863,27 @@ int __aa_fs_profile_mkdir(struct aa_profile *profile, struct dentry *parent) goto fail; prof_dir(profile) = dir = dent; dent = create_profile_file(dir, "name", profile, &aa_fs_profname_fops); dent = create_profile_file(dir, "name", profile, &seq_profile_name_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_NAME] = dent; dent = create_profile_file(dir, "mode", profile, &aa_fs_profmode_fops); dent = create_profile_file(dir, "mode", profile, &seq_profile_mode_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_MODE] = dent; dent = create_profile_file(dir, "attach", profile, &aa_fs_profattach_fops); &seq_profile_attach_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_ATTACH] = dent; if (profile->hash) { dent = create_profile_file(dir, "sha1", profile, &aa_fs_seq_hash_fops); &seq_profile_hash_fops); if (IS_ERR(dent)) goto fail; profile->dents[AAFS_PROF_HASH] = dent; Loading