|
@@ -70,6 +70,15 @@
|
|
|
#include "ebitmap.h"
|
|
|
#include "audit.h"
|
|
|
|
|
|
+/* Policy capability names */
|
|
|
+char *selinux_policycap_names[__POLICYDB_CAPABILITY_MAX] = {
|
|
|
+ "network_peer_controls",
|
|
|
+ "open_perms",
|
|
|
+ "extended_socket_class",
|
|
|
+ "always_check_network",
|
|
|
+ "cgroup_seclabel"
|
|
|
+};
|
|
|
+
|
|
|
int selinux_policycap_netpeer;
|
|
|
int selinux_policycap_openperm;
|
|
|
int selinux_policycap_extsockclass;
|
|
@@ -1986,6 +1995,9 @@ bad:
|
|
|
|
|
|
static void security_load_policycaps(void)
|
|
|
{
|
|
|
+ unsigned int i;
|
|
|
+ struct ebitmap_node *node;
|
|
|
+
|
|
|
selinux_policycap_netpeer = ebitmap_get_bit(&policydb.policycaps,
|
|
|
POLICYDB_CAPABILITY_NETPEER);
|
|
|
selinux_policycap_openperm = ebitmap_get_bit(&policydb.policycaps,
|
|
@@ -1997,6 +2009,17 @@ static void security_load_policycaps(void)
|
|
|
selinux_policycap_cgroupseclabel =
|
|
|
ebitmap_get_bit(&policydb.policycaps,
|
|
|
POLICYDB_CAPABILITY_CGROUPSECLABEL);
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(selinux_policycap_names); i++)
|
|
|
+ pr_info("SELinux: policy capability %s=%d\n",
|
|
|
+ selinux_policycap_names[i],
|
|
|
+ ebitmap_get_bit(&policydb.policycaps, i));
|
|
|
+
|
|
|
+ ebitmap_for_each_positive_bit(&policydb.policycaps, node, i) {
|
|
|
+ if (i >= ARRAY_SIZE(selinux_policycap_names))
|
|
|
+ pr_info("SELinux: unknown policy capability %u\n",
|
|
|
+ i);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static int security_preserve_bools(struct policydb *p);
|