113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include <selinux/selinux.h>
28c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley#include <pthread.h>
313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle#include "dso.h"
413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_mkload_policy)
61629d2f89a8c5f758413b87b94740aaaa5f21144Daniel J Walsh    hidden_proto(fini_selinuxmnt)
713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(set_selinuxmnt)
8b3b19fdce58ff6ddfa6dfb8e5576c922c96e1e45Eric Paris    hidden_proto(selinuxfs_exists)
913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_disable)
1013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_policyvers)
1113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_load_policy)
1213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_get_boolean_active)
1313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_get_boolean_names)
1413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_set_boolean)
1513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_commit_booleans)
1613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_check_context)
1713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_check_context_raw)
1813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_canonicalize_context)
1913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_canonicalize_context_raw)
2013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_av)
2113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_av_raw)
2255ed6e7fa6b7d55c628fa04508521920e60a43f7KaiGai Kohei    hidden_proto(security_compute_av_flags)
2355ed6e7fa6b7d55c628fa04508521920e60a43f7KaiGai Kohei    hidden_proto(security_compute_av_flags_raw)
2413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_user)
2513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_user_raw)
2613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_create)
2713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_create_raw)
282b5a0530e7c06150c84fc233fbfab40c57130f84Kohei KaiGai    hidden_proto(security_compute_create_name)
292b5a0530e7c06150c84fc233fbfab40c57130f84Kohei KaiGai    hidden_proto(security_compute_create_name_raw)
3013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_member_raw)
3113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_compute_relabel_raw)
3213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(is_selinux_enabled)
3313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(is_selinux_mls_enabled)
3413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(freecon)
3513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(freeconary)
3613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getprevcon)
3713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getprevcon_raw)
3813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getcon)
3913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getcon_raw)
4013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setcon_raw)
4113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getpeercon_raw)
4213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getpidcon_raw)
4313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getexeccon_raw)
4413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getfilecon)
4513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getfilecon_raw)
4613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(lgetfilecon_raw)
4713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(fgetfilecon_raw)
4813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setfilecon_raw)
4913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(lsetfilecon_raw)
5013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(fsetfilecon_raw)
5113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setexeccon)
5213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setexeccon_raw)
5313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getfscreatecon_raw)
5413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getkeycreatecon_raw)
5513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(getsockcreatecon_raw)
5613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setfscreatecon_raw)
5713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setkeycreatecon_raw)
5813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(setsockcreatecon_raw)
5913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_getenforce)
6013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(security_setenforce)
61433a99d4032706af724ff779d8d9d539f20793f8KaiGai Kohei    hidden_proto(security_deny_unknown)
62ee6901618c9da360515474145504c7b58258441fDan Walsh    hidden_proto(selinux_boolean_sub)
637eec00a5be8b5cebcbbc9a30b42b34f4a623c587Dan Walsh    hidden_proto(selinux_current_policy_path)
6413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_binary_policy_path)
6588c35241535803247bd3044187c6c3b3c7f02c79Eric Paris    hidden_proto(selinux_booleans_subs_path)
6613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_default_context_path)
6713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_securetty_types_path)
6813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_failsafe_context_path)
6913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_removable_context_path)
7020271d94ed2b26b94b052ba6ed90b63566cecbb7Daniel J Walsh    hidden_proto(selinux_virtual_domain_context_path)
7120271d94ed2b26b94b052ba6ed90b63566cecbb7Daniel J Walsh    hidden_proto(selinux_virtual_image_context_path)
72c802d4a6d53120a7c067c29625a17b09f922f4d3Dan Walsh    hidden_proto(selinux_lxc_contexts_path)
7313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_file_context_path)
7413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_file_context_homedir_path)
7513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_file_context_local_path)
7620b43b3fd3d392c4f12a963a4e46c264e7ed5163Daniel J Walsh    hidden_proto(selinux_file_context_subs_dist_path)
7720271d94ed2b26b94b052ba6ed90b63566cecbb7Daniel J Walsh    hidden_proto(selinux_file_context_subs_path)
7813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_netfilter_context_path)
7913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_homedir_context_path)
8013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_user_contexts_path)
8113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_booleans_path)
8213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_customizable_types_path)
8313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_media_context_path)
8413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_x_context_path)
8570aeeb918aa721ad90ed8e1b433a55c8ecf2cb83Eamon Walsh    hidden_proto(selinux_sepgsql_context_path)
86ce2a8848ad45e375cfdb58cebe28bc12431bb3dbDan Walsh    hidden_proto(selinux_systemd_contexts_path)
8713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_path)
8813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_check_passwd_access)
8913cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_check_securetty_context)
9013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(matchpathcon_init_prefix)
9113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_users_path)
9213cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle    hidden_proto(selinux_usersconf_path);
9313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_translations_path);
94f9b1f1a2a17298b60a94780ab5899a8d91cbf100Eamon Walshhidden_proto(selinux_colors_path);
9513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_getenforcemode);
9613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_getpolicytype);
9713cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_raw_to_trans_context);
9813cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(selinux_trans_to_raw_context);
99cfa3cb6fa5d0cc00fde75ee74ec2da577f62e141Eamon Walsh    hidden_proto(selinux_raw_context_to_color);
10013cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(security_get_initial_context);
10113cd4c8960688af11ad23b4c946149015c80d54Joshua Brindlehidden_proto(security_get_initial_context_raw);
1027d19f9df510daef5dc929df5854c2dda2a64f475Chad Sellershidden_proto(selinux_reset_config);
10313cd4c8960688af11ad23b4c946149015c80d54Joshua Brindle
10413cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int load_setlocaldefs hidden;
10513cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int require_seusers hidden;
10613cd4c8960688af11ad23b4c946149015c80d54Joshua Brindleextern int selinux_page_size hidden;
1078c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley
1088c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley/* Make pthread_once optional */
1098c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley#pragma weak pthread_once
110a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#pragma weak pthread_key_create
111f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh#pragma weak pthread_key_delete
112a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#pragma weak pthread_setspecific
1138c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley
1148c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley/* Call handler iff the first call.  */
1158c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley#define __selinux_once(ONCE_CONTROL, INIT_FUNCTION)	\
1168c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley	do {						\
1178c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley		if (pthread_once != NULL)		\
1188c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley			pthread_once (&(ONCE_CONTROL), (INIT_FUNCTION));  \
1198c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley		else if ((ONCE_CONTROL) == PTHREAD_ONCE_INIT) {		  \
1208c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley			INIT_FUNCTION ();		\
1218c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley			(ONCE_CONTROL) = 2;		\
1228c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley		}					\
1238c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley	} while (0)
1248c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley
125a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh/* Pthread key macros */
126a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#define __selinux_key_create(KEY, DESTRUCTOR)			\
1271629d2f89a8c5f758413b87b94740aaaa5f21144Daniel J Walsh	(pthread_key_create != NULL ? pthread_key_create(KEY, DESTRUCTOR) : -1)
1288c372f665db44cf753bb299e2ee7dcf6143b9e9eStephen Smalley
129f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh#define __selinux_key_delete(KEY)				\
130f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh	do {							\
131f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh		if (pthread_key_delete != NULL)			\
132f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh			pthread_key_delete(KEY);		\
133f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh	} while (0)
134f0b3127ca3c99ae218dba43a6e3f7430081c412bEamon Walsh
135a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh#define __selinux_setspecific(KEY, VALUE)			\
136a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh	do {							\
137a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh		if (pthread_setspecific != NULL)		\
138a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh			pthread_setspecific(KEY, VALUE);	\
139a29ff33baf366825c0fbe721d30b12b5b96a64e1Eamon Walsh	} while (0)
140