mirror of
https://gitlab.com/apparmor/apparmor.git
synced 2025-03-06 09:21:00 +01:00
47 lines
1.4 KiB
Diff
47 lines
1.4 KiB
Diff
---
|
|
security/apparmor/apparmorfs.c | 20 ++++++++++++++++++++
|
|
1 file changed, 20 insertions(+)
|
|
|
|
--- a/security/apparmor/apparmorfs.c
|
|
+++ b/security/apparmor/apparmorfs.c
|
|
@@ -99,6 +99,22 @@ static struct file_operations apparmorfs
|
|
.read = aa_matching_read,
|
|
};
|
|
|
|
+/* apparmor/features */
|
|
+static ssize_t aa_features_read(struct file *file, char __user *buf,
|
|
+ size_t size, loff_t *ppos)
|
|
+{
|
|
+ const char *features = "file=3.0 capability=1.0 network=1.0 "
|
|
+ "change_hat=1.3 change_profile=1.0 "
|
|
+ "aanamespaces=1.0";
|
|
+
|
|
+ return simple_read_from_buffer(buf, size, ppos, features,
|
|
+ strlen(features));
|
|
+}
|
|
+
|
|
+static struct file_operations apparmorfs_features_fops = {
|
|
+ .read = aa_features_read,
|
|
+};
|
|
+
|
|
/* apparmor/.load */
|
|
static ssize_t aa_profile_load(struct file *f, const char __user *buf,
|
|
size_t size, loff_t *pos)
|
|
@@ -204,6 +220,7 @@ void destroy_apparmorfs(void)
|
|
aafs_remove(".replace");
|
|
aafs_remove(".load");
|
|
aafs_remove("matching");
|
|
+ aafs_remove("features");
|
|
aafs_remove("profiles");
|
|
securityfs_remove(apparmor_dentry);
|
|
apparmor_dentry = NULL;
|
|
@@ -232,6 +249,9 @@ int create_apparmorfs(void)
|
|
error = aafs_create("matching", 0444, &apparmorfs_matching_fops);
|
|
if (error)
|
|
goto error;
|
|
+ error = aafs_create("features", 0444, &apparmorfs_features_fops);
|
|
+ if (error)
|
|
+ goto error;
|
|
error = aafs_create(".load", 0640, &apparmorfs_profile_load);
|
|
if (error)
|
|
goto error;
|