diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /security/selinux/include | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'security/selinux/include')
-rw-r--r-- | security/selinux/include/avc.h | 20 | ||||
-rw-r--r-- | security/selinux/include/classmap.h | 11 | ||||
-rw-r--r-- | security/selinux/include/security.h | 36 | ||||
-rw-r--r-- | security/selinux/include/xfrm.h | 2 |
4 files changed, 52 insertions, 17 deletions
diff --git a/security/selinux/include/avc.h b/security/selinux/include/avc.h index e94e82f73818..47fda963495d 100644 --- a/security/selinux/include/avc.h +++ b/security/selinux/include/avc.h | |||
@@ -15,7 +15,6 @@ | |||
15 | #include <linux/audit.h> | 15 | #include <linux/audit.h> |
16 | #include <linux/lsm_audit.h> | 16 | #include <linux/lsm_audit.h> |
17 | #include <linux/in6.h> | 17 | #include <linux/in6.h> |
18 | #include <linux/path.h> | ||
19 | #include <asm/system.h> | 18 | #include <asm/system.h> |
20 | #include "flask.h" | 19 | #include "flask.h" |
21 | #include "av_permissions.h" | 20 | #include "av_permissions.h" |
@@ -42,7 +41,6 @@ struct sk_buff; | |||
42 | */ | 41 | */ |
43 | struct avc_cache_stats { | 42 | struct avc_cache_stats { |
44 | unsigned int lookups; | 43 | unsigned int lookups; |
45 | unsigned int hits; | ||
46 | unsigned int misses; | 44 | unsigned int misses; |
47 | unsigned int allocations; | 45 | unsigned int allocations; |
48 | unsigned int reclaims; | 46 | unsigned int reclaims; |
@@ -55,11 +53,11 @@ struct avc_cache_stats { | |||
55 | 53 | ||
56 | void __init avc_init(void); | 54 | void __init avc_init(void); |
57 | 55 | ||
58 | void avc_audit(u32 ssid, u32 tsid, | 56 | int avc_audit(u32 ssid, u32 tsid, |
59 | u16 tclass, u32 requested, | 57 | u16 tclass, u32 requested, |
60 | struct av_decision *avd, | 58 | struct av_decision *avd, |
61 | int result, | 59 | int result, |
62 | struct common_audit_data *a); | 60 | struct common_audit_data *a, unsigned flags); |
63 | 61 | ||
64 | #define AVC_STRICT 1 /* Ignore permissive mode. */ | 62 | #define AVC_STRICT 1 /* Ignore permissive mode. */ |
65 | int avc_has_perm_noaudit(u32 ssid, u32 tsid, | 63 | int avc_has_perm_noaudit(u32 ssid, u32 tsid, |
@@ -67,9 +65,17 @@ int avc_has_perm_noaudit(u32 ssid, u32 tsid, | |||
67 | unsigned flags, | 65 | unsigned flags, |
68 | struct av_decision *avd); | 66 | struct av_decision *avd); |
69 | 67 | ||
70 | int avc_has_perm(u32 ssid, u32 tsid, | 68 | int avc_has_perm_flags(u32 ssid, u32 tsid, |
71 | u16 tclass, u32 requested, | 69 | u16 tclass, u32 requested, |
72 | struct common_audit_data *auditdata); | 70 | struct common_audit_data *auditdata, |
71 | unsigned); | ||
72 | |||
73 | static inline int avc_has_perm(u32 ssid, u32 tsid, | ||
74 | u16 tclass, u32 requested, | ||
75 | struct common_audit_data *auditdata) | ||
76 | { | ||
77 | return avc_has_perm_flags(ssid, tsid, tclass, requested, auditdata, 0); | ||
78 | } | ||
73 | 79 | ||
74 | u32 avc_policy_seqno(void); | 80 | u32 avc_policy_seqno(void); |
75 | 81 | ||
diff --git a/security/selinux/include/classmap.h b/security/selinux/include/classmap.h index b4c9eb4bd6f9..b8c53723e09b 100644 --- a/security/selinux/include/classmap.h +++ b/security/selinux/include/classmap.h | |||
@@ -12,12 +12,16 @@ | |||
12 | #define COMMON_IPC_PERMS "create", "destroy", "getattr", "setattr", "read", \ | 12 | #define COMMON_IPC_PERMS "create", "destroy", "getattr", "setattr", "read", \ |
13 | "write", "associate", "unix_read", "unix_write" | 13 | "write", "associate", "unix_read", "unix_write" |
14 | 14 | ||
15 | /* | ||
16 | * Note: The name for any socket class should be suffixed by "socket", | ||
17 | * and doesn't contain more than one substr of "socket". | ||
18 | */ | ||
15 | struct security_class_mapping secclass_map[] = { | 19 | struct security_class_mapping secclass_map[] = { |
16 | { "security", | 20 | { "security", |
17 | { "compute_av", "compute_create", "compute_member", | 21 | { "compute_av", "compute_create", "compute_member", |
18 | "check_context", "load_policy", "compute_relabel", | 22 | "check_context", "load_policy", "compute_relabel", |
19 | "compute_user", "setenforce", "setbool", "setsecparam", | 23 | "compute_user", "setenforce", "setbool", "setsecparam", |
20 | "setcheckreqprot", NULL } }, | 24 | "setcheckreqprot", "read_policy", NULL } }, |
21 | { "process", | 25 | { "process", |
22 | { "fork", "transition", "sigchld", "sigkill", | 26 | { "fork", "transition", "sigchld", "sigkill", |
23 | "sigstop", "signull", "signal", "ptrace", "getsched", "setsched", | 27 | "sigstop", "signull", "signal", "ptrace", "getsched", "setsched", |
@@ -132,8 +136,7 @@ struct security_class_mapping secclass_map[] = { | |||
132 | { "appletalk_socket", | 136 | { "appletalk_socket", |
133 | { COMMON_SOCK_PERMS, NULL } }, | 137 | { COMMON_SOCK_PERMS, NULL } }, |
134 | { "packet", | 138 | { "packet", |
135 | { "send", "recv", "relabelto", "flow_in", "flow_out", | 139 | { "send", "recv", "relabelto", "forward_in", "forward_out", NULL } }, |
136 | "forward_in", "forward_out", NULL } }, | ||
137 | { "key", | 140 | { "key", |
138 | { "view", "read", "write", "search", "link", "setattr", "create", | 141 | { "view", "read", "write", "search", "link", "setattr", "create", |
139 | NULL } }, | 142 | NULL } }, |
@@ -142,7 +145,7 @@ struct security_class_mapping secclass_map[] = { | |||
142 | "node_bind", "name_connect", NULL } }, | 145 | "node_bind", "name_connect", NULL } }, |
143 | { "memprotect", { "mmap_zero", NULL } }, | 146 | { "memprotect", { "mmap_zero", NULL } }, |
144 | { "peer", { "recv", NULL } }, | 147 | { "peer", { "recv", NULL } }, |
145 | { "capability2", { "mac_override", "mac_admin", NULL } }, | 148 | { "capability2", { "mac_override", "mac_admin", "syslog", NULL } }, |
146 | { "kernel_service", { "use_as_override", "create_files_as", NULL } }, | 149 | { "kernel_service", { "use_as_override", "create_files_as", NULL } }, |
147 | { "tun_socket", | 150 | { "tun_socket", |
148 | { COMMON_SOCK_PERMS, NULL } }, | 151 | { COMMON_SOCK_PERMS, NULL } }, |
diff --git a/security/selinux/include/security.h b/security/selinux/include/security.h index 1f7c2491d3dc..3ba4feba048a 100644 --- a/security/selinux/include/security.h +++ b/security/selinux/include/security.h | |||
@@ -8,7 +8,9 @@ | |||
8 | #ifndef _SELINUX_SECURITY_H_ | 8 | #ifndef _SELINUX_SECURITY_H_ |
9 | #define _SELINUX_SECURITY_H_ | 9 | #define _SELINUX_SECURITY_H_ |
10 | 10 | ||
11 | #include <linux/dcache.h> | ||
11 | #include <linux/magic.h> | 12 | #include <linux/magic.h> |
13 | #include <linux/types.h> | ||
12 | #include "flask.h" | 14 | #include "flask.h" |
13 | 15 | ||
14 | #define SECSID_NULL 0x00000000 /* unspecified SID */ | 16 | #define SECSID_NULL 0x00000000 /* unspecified SID */ |
@@ -27,13 +29,15 @@ | |||
27 | #define POLICYDB_VERSION_POLCAP 22 | 29 | #define POLICYDB_VERSION_POLCAP 22 |
28 | #define POLICYDB_VERSION_PERMISSIVE 23 | 30 | #define POLICYDB_VERSION_PERMISSIVE 23 |
29 | #define POLICYDB_VERSION_BOUNDARY 24 | 31 | #define POLICYDB_VERSION_BOUNDARY 24 |
32 | #define POLICYDB_VERSION_FILENAME_TRANS 25 | ||
33 | #define POLICYDB_VERSION_ROLETRANS 26 | ||
30 | 34 | ||
31 | /* Range of policy versions we understand*/ | 35 | /* Range of policy versions we understand*/ |
32 | #define POLICYDB_VERSION_MIN POLICYDB_VERSION_BASE | 36 | #define POLICYDB_VERSION_MIN POLICYDB_VERSION_BASE |
33 | #ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX | 37 | #ifdef CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX |
34 | #define POLICYDB_VERSION_MAX CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE | 38 | #define POLICYDB_VERSION_MAX CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX_VALUE |
35 | #else | 39 | #else |
36 | #define POLICYDB_VERSION_MAX POLICYDB_VERSION_BOUNDARY | 40 | #define POLICYDB_VERSION_MAX POLICYDB_VERSION_ROLETRANS |
37 | #endif | 41 | #endif |
38 | 42 | ||
39 | /* Mask for just the mount related flags */ | 43 | /* Mask for just the mount related flags */ |
@@ -82,6 +86,8 @@ extern int selinux_policycap_openperm; | |||
82 | int security_mls_enabled(void); | 86 | int security_mls_enabled(void); |
83 | 87 | ||
84 | int security_load_policy(void *data, size_t len); | 88 | int security_load_policy(void *data, size_t len); |
89 | int security_read_policy(void **data, size_t *len); | ||
90 | size_t security_policydb_len(void); | ||
85 | 91 | ||
86 | int security_policycap_supported(unsigned int req_cap); | 92 | int security_policycap_supported(unsigned int req_cap); |
87 | 93 | ||
@@ -103,11 +109,11 @@ void security_compute_av(u32 ssid, u32 tsid, | |||
103 | void security_compute_av_user(u32 ssid, u32 tsid, | 109 | void security_compute_av_user(u32 ssid, u32 tsid, |
104 | u16 tclass, struct av_decision *avd); | 110 | u16 tclass, struct av_decision *avd); |
105 | 111 | ||
106 | int security_transition_sid(u32 ssid, u32 tsid, | 112 | int security_transition_sid(u32 ssid, u32 tsid, u16 tclass, |
107 | u16 tclass, u32 *out_sid); | 113 | const struct qstr *qstr, u32 *out_sid); |
108 | 114 | ||
109 | int security_transition_sid_user(u32 ssid, u32 tsid, | 115 | int security_transition_sid_user(u32 ssid, u32 tsid, u16 tclass, |
110 | u16 tclass, u32 *out_sid); | 116 | const char *objname, u32 *out_sid); |
111 | 117 | ||
112 | int security_member_sid(u32 ssid, u32 tsid, | 118 | int security_member_sid(u32 ssid, u32 tsid, |
113 | u16 tclass, u32 *out_sid); | 119 | u16 tclass, u32 *out_sid); |
@@ -191,5 +197,25 @@ static inline int security_netlbl_sid_to_secattr(u32 sid, | |||
191 | 197 | ||
192 | const char *security_get_initial_sid_context(u32 sid); | 198 | const char *security_get_initial_sid_context(u32 sid); |
193 | 199 | ||
200 | /* | ||
201 | * status notifier using mmap interface | ||
202 | */ | ||
203 | extern struct page *selinux_kernel_status_page(void); | ||
204 | |||
205 | #define SELINUX_KERNEL_STATUS_VERSION 1 | ||
206 | struct selinux_kernel_status { | ||
207 | u32 version; /* version number of thie structure */ | ||
208 | u32 sequence; /* sequence number of seqlock logic */ | ||
209 | u32 enforcing; /* current setting of enforcing mode */ | ||
210 | u32 policyload; /* times of policy reloaded */ | ||
211 | u32 deny_unknown; /* current setting of deny_unknown */ | ||
212 | /* | ||
213 | * The version > 0 supports above members. | ||
214 | */ | ||
215 | } __attribute__((packed)); | ||
216 | |||
217 | extern void selinux_status_update_setenforce(int enforcing); | ||
218 | extern void selinux_status_update_policyload(int seqno); | ||
219 | |||
194 | #endif /* _SELINUX_SECURITY_H_ */ | 220 | #endif /* _SELINUX_SECURITY_H_ */ |
195 | 221 | ||
diff --git a/security/selinux/include/xfrm.h b/security/selinux/include/xfrm.h index 13128f9a3e5a..b43813c9e049 100644 --- a/security/selinux/include/xfrm.h +++ b/security/selinux/include/xfrm.h | |||
@@ -19,7 +19,7 @@ void selinux_xfrm_state_free(struct xfrm_state *x); | |||
19 | int selinux_xfrm_state_delete(struct xfrm_state *x); | 19 | int selinux_xfrm_state_delete(struct xfrm_state *x); |
20 | int selinux_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); | 20 | int selinux_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid, u8 dir); |
21 | int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x, | 21 | int selinux_xfrm_state_pol_flow_match(struct xfrm_state *x, |
22 | struct xfrm_policy *xp, struct flowi *fl); | 22 | struct xfrm_policy *xp, const struct flowi *fl); |
23 | 23 | ||
24 | /* | 24 | /* |
25 | * Extract the security blob from the sock (it's actually on the socket) | 25 | * Extract the security blob from the sock (it's actually on the socket) |