diff options
author | Eric Paris <eparis@redhat.com> | 2007-09-21 14:37:10 -0400 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2007-10-16 18:59:33 -0400 |
commit | 3f12070e27b4a213d62607d2bff139793089a77d (patch) | |
tree | b6b614737f916c7c3102f66e6ad9e682b9c9bf04 /security/selinux/ss/policydb.c | |
parent | 788e7dd4c22e6f41b3a118fd8c291f831f6fddbb (diff) |
SELinux: policy selectable handling of unknown classes and perms
Allow policy to select, in much the same way as it selects MLS support, how
the kernel should handle access decisions which contain either unknown
classes or unknown permissions in known classes. The three choices for the
policy flags are
0 - Deny unknown security access. (default)
2 - reject loading policy if it does not contain all definitions
4 - allow unknown security access
The policy's choice is exported through 2 booleans in
selinuxfs. /selinux/deny_unknown and /selinux/reject_unknown.
Signed-off-by: Eric Paris <eparis@redhat.com>
Acked-by: Stephen Smalley <sds@tycho.nsa.gov>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security/selinux/ss/policydb.c')
-rw-r--r-- | security/selinux/ss/policydb.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/security/selinux/ss/policydb.c b/security/selinux/ss/policydb.c index 5ecbad7d8b9f..539828b229b2 100644 --- a/security/selinux/ss/policydb.c +++ b/security/selinux/ss/policydb.c | |||
@@ -674,6 +674,8 @@ void policydb_destroy(struct policydb *p) | |||
674 | } | 674 | } |
675 | kfree(p->type_attr_map); | 675 | kfree(p->type_attr_map); |
676 | 676 | ||
677 | kfree(p->undefined_perms); | ||
678 | |||
677 | return; | 679 | return; |
678 | } | 680 | } |
679 | 681 | ||
@@ -1527,6 +1529,8 @@ int policydb_read(struct policydb *p, void *fp) | |||
1527 | goto bad; | 1529 | goto bad; |
1528 | } | 1530 | } |
1529 | } | 1531 | } |
1532 | p->reject_unknown = !!(le32_to_cpu(buf[1]) & REJECT_UNKNOWN); | ||
1533 | p->allow_unknown = !!(le32_to_cpu(buf[1]) & ALLOW_UNKNOWN); | ||
1530 | 1534 | ||
1531 | info = policydb_lookup_compat(p->policyvers); | 1535 | info = policydb_lookup_compat(p->policyvers); |
1532 | if (!info) { | 1536 | if (!info) { |