diff options
-rw-r--r-- | security/selinux/include/security.h | 2 | ||||
-rw-r--r-- | security/selinux/selinuxfs.c | 13 | ||||
-rw-r--r-- | security/selinux/ss/services.c | 23 |
3 files changed, 27 insertions, 11 deletions
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h index f979c35e037e..c4224bbf9f4e 100644 --- a/security/selinux/include/security.h +++ b/security/selinux/include/security.h | |||
@@ -76,6 +76,8 @@ enum { | |||
76 | }; | 76 | }; |
77 | #define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1) | 77 | #define POLICYDB_CAPABILITY_MAX (__POLICYDB_CAPABILITY_MAX - 1) |
78 | 78 | ||
79 | extern char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX]; | ||
80 | |||
79 | extern int selinux_policycap_netpeer; | 81 | extern int selinux_policycap_netpeer; |
80 | extern int selinux_policycap_openperm; | 82 | extern int selinux_policycap_openperm; |
81 | extern int selinux_policycap_extsockclass; | 83 | extern int selinux_policycap_extsockclass; |
diff --git a/security/selinux/selinuxfs.c b/security/selinux/selinuxfs.c index 50062e70140d..82adb78a58f7 100644 --- a/security/selinux/selinuxfs.c +++ b/security/selinux/selinuxfs.c | |||
@@ -41,15 +41,6 @@ | |||
41 | #include "objsec.h" | 41 | #include "objsec.h" |
42 | #include "conditional.h" | 42 | #include "conditional.h" |
43 | 43 | ||
44 | /* Policy capability filenames */ | ||
45 | static char *policycap_names[] = { | ||
46 | "network_peer_controls", | ||
47 | "open_perms", | ||
48 | "extended_socket_class", | ||
49 | "always_check_network", | ||
50 | "cgroup_seclabel" | ||
51 | }; | ||
52 | |||
53 | unsigned int selinux_checkreqprot = CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE; | 44 | unsigned int selinux_checkreqprot = CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE; |
54 | 45 | ||
55 | static int __init checkreqprot_setup(char *str) | 46 | static int __init checkreqprot_setup(char *str) |
@@ -1750,9 +1741,9 @@ static int sel_make_policycap(void) | |||
1750 | sel_remove_entries(policycap_dir); | 1741 | sel_remove_entries(policycap_dir); |
1751 | 1742 | ||
1752 | for (iter = 0; iter <= POLICYDB_CAPABILITY_MAX; iter++) { | 1743 | for (iter = 0; iter <= POLICYDB_CAPABILITY_MAX; iter++) { |
1753 | if (iter < ARRAY_SIZE(policycap_names)) | 1744 | if (iter < ARRAY_SIZE(selinux_policycap_names)) |
1754 | dentry = d_alloc_name(policycap_dir, | 1745 | dentry = d_alloc_name(policycap_dir, |
1755 | policycap_names[iter]); | 1746 | selinux_policycap_names[iter]); |
1756 | else | 1747 | else |
1757 | dentry = d_alloc_name(policycap_dir, "unknown"); | 1748 | dentry = d_alloc_name(policycap_dir, "unknown"); |
1758 | 1749 | ||
diff --git a/security/selinux/ss/services.c b/security/selinux/ss/services.c index 60d9b0252321..2dccba4851f8 100644 --- a/security/selinux/ss/services.c +++ b/security/selinux/ss/services.c | |||
@@ -70,6 +70,15 @@ | |||
70 | #include "ebitmap.h" | 70 | #include "ebitmap.h" |
71 | #include "audit.h" | 71 | #include "audit.h" |
72 | 72 | ||
73 | /* Policy capability names */ | ||
74 | char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX] = { | ||
75 | "network_peer_controls", | ||
76 | "open_perms", | ||
77 | "extended_socket_class", | ||
78 | "always_check_network", | ||
79 | "cgroup_seclabel" | ||
80 | }; | ||
81 | |||
73 | int selinux_policycap_netpeer; | 82 | int selinux_policycap_netpeer; |
74 | int selinux_policycap_openperm; | 83 | int selinux_policycap_openperm; |
75 | int selinux_policycap_extsockclass; | 84 | int selinux_policycap_extsockclass; |
@@ -1986,6 +1995,9 @@ bad: | |||
1986 | 1995 | ||
1987 | static void security_load_policycaps(void) | 1996 | static void security_load_policycaps(void) |
1988 | { | 1997 | { |
1998 | unsigned int i; | ||
1999 | struct ebitmap_node *node; | ||
2000 | |||
1989 | selinux_policycap_netpeer = ebitmap_get_bit(&policydb.policycaps, | 2001 | selinux_policycap_netpeer = ebitmap_get_bit(&policydb.policycaps, |
1990 | POLICYDB_CAPABILITY_NETPEER); | 2002 | POLICYDB_CAPABILITY_NETPEER); |
1991 | selinux_policycap_openperm = ebitmap_get_bit(&policydb.policycaps, | 2003 | selinux_policycap_openperm = ebitmap_get_bit(&policydb.policycaps, |
@@ -1997,6 +2009,17 @@ static void security_load_policycaps(void) | |||
1997 | selinux_policycap_cgroupseclabel = | 2009 | selinux_policycap_cgroupseclabel = |
1998 | ebitmap_get_bit(&policydb.policycaps, | 2010 | ebitmap_get_bit(&policydb.policycaps, |
1999 | POLICYDB_CAPABILITY_CGROUPSECLABEL); | 2011 | POLICYDB_CAPABILITY_CGROUPSECLABEL); |
2012 | |||
2013 | for (i = 0; i < ARRAY_SIZE(selinux_policycap_names); i++) | ||
2014 | pr_info("SELinux: policy capability %s=%d\n", | ||
2015 | selinux_policycap_names[i], | ||
2016 | ebitmap_get_bit(&policydb.policycaps, i)); | ||
2017 | |||
2018 | ebitmap_for_each_positive_bit(&policydb.policycaps, node, i) { | ||
2019 | if (i >= ARRAY_SIZE(selinux_policycap_names)) | ||
2020 | pr_info("SELinux: unknown policy capability %u\n", | ||
2021 | i); | ||
2022 | } | ||
2000 | } | 2023 | } |
2001 | 2024 | ||
2002 | static int security_preserve_bools(struct policydb *p); | 2025 | static int security_preserve_bools(struct policydb *p); |