selinux: change the handling of unknown classes
authorStephen Smalley <sds@tycho.nsa.gov>
Thu, 14 Jan 2010 22:28:10 +0000 (17:28 -0500)
committerJames Morris <jmorris@namei.org>
Sun, 17 Jan 2010 22:54:26 +0000 (09:54 +1100)
commit19439d05b88dafc4e55d9ffce84ccc27cf8b2bcc
treee529e1bbba49f30684c3b88a67df1d62ba3e11b1
parent8d9525048c74786205b99f3fcd05a839721edfb7
selinux: change the handling of unknown classes

If allow_unknown==deny, SELinux treats an undefined kernel security
class as an error condition rather than as a typical permission denial
and thus does not allow permissions on undefined classes even when in
permissive mode.  Change the SELinux logic so that this case is handled
as a typical permission denial, subject to the usual permissive mode and
permissive domain handling.

Also drop the 'requested' argument from security_compute_av() and
helpers as it is a legacy of the original security server interface and
is unused.

Changes:
- Handle permissive domains consistently by moving up the test for a
permissive domain.
- Make security_compute_av_user() consistent with security_compute_av();
the only difference now is that security_compute_av() performs mapping
between the kernel-private class and permission indices and the policy
values.  In the userspace case, this mapping is handled by libselinux.
- Moved avd_init inside the policy lock.

Based in part on a patch by Paul Moore <paul.moore@hp.com>.

Reported-by: Andrew Worsley <amworsley@gmail.com>
Signed-off-by: Stephen D. Smalley <sds@tycho.nsa.gov>
Reviewed-by: Paul Moore <paul.moore@hp.com>
Signed-off-by: James Morris <jmorris@namei.org>
security/selinux/avc.c
security/selinux/include/security.h
security/selinux/selinuxfs.c
security/selinux/ss/services.c