diff options
Diffstat (limited to 'security/tomoyo/common.h')
-rw-r--r-- | security/tomoyo/common.h | 189 |
1 files changed, 178 insertions, 11 deletions
diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h index f7fbaa66e443..ed311d7a8ce0 100644 --- a/security/tomoyo/common.h +++ b/security/tomoyo/common.h | |||
@@ -3,7 +3,7 @@ | |||
3 | * | 3 | * |
4 | * Header file for TOMOYO. | 4 | * Header file for TOMOYO. |
5 | * | 5 | * |
6 | * Copyright (C) 2005-2010 NTT DATA CORPORATION | 6 | * Copyright (C) 2005-2011 NTT DATA CORPORATION |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef _SECURITY_TOMOYO_COMMON_H | 9 | #ifndef _SECURITY_TOMOYO_COMMON_H |
@@ -23,6 +23,16 @@ | |||
23 | #include <linux/poll.h> | 23 | #include <linux/poll.h> |
24 | #include <linux/binfmts.h> | 24 | #include <linux/binfmts.h> |
25 | #include <linux/highmem.h> | 25 | #include <linux/highmem.h> |
26 | #include <linux/net.h> | ||
27 | #include <linux/inet.h> | ||
28 | #include <linux/in.h> | ||
29 | #include <linux/in6.h> | ||
30 | #include <linux/un.h> | ||
31 | #include <net/sock.h> | ||
32 | #include <net/af_unix.h> | ||
33 | #include <net/ip.h> | ||
34 | #include <net/ipv6.h> | ||
35 | #include <net/udp.h> | ||
26 | 36 | ||
27 | /********** Constants definitions. **********/ | 37 | /********** Constants definitions. **********/ |
28 | 38 | ||
@@ -34,8 +44,17 @@ | |||
34 | #define TOMOYO_HASH_BITS 8 | 44 | #define TOMOYO_HASH_BITS 8 |
35 | #define TOMOYO_MAX_HASH (1u<<TOMOYO_HASH_BITS) | 45 | #define TOMOYO_MAX_HASH (1u<<TOMOYO_HASH_BITS) |
36 | 46 | ||
47 | /* | ||
48 | * TOMOYO checks only SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_SEQPACKET. | ||
49 | * Therefore, we don't need SOCK_MAX. | ||
50 | */ | ||
51 | #define TOMOYO_SOCK_MAX 6 | ||
52 | |||
37 | #define TOMOYO_EXEC_TMPSIZE 4096 | 53 | #define TOMOYO_EXEC_TMPSIZE 4096 |
38 | 54 | ||
55 | /* Garbage collector is trying to kfree() this element. */ | ||
56 | #define TOMOYO_GC_IN_PROGRESS -1 | ||
57 | |||
39 | /* Profile number is an integer between 0 and 255. */ | 58 | /* Profile number is an integer between 0 and 255. */ |
40 | #define TOMOYO_MAX_PROFILES 256 | 59 | #define TOMOYO_MAX_PROFILES 256 |
41 | 60 | ||
@@ -136,6 +155,7 @@ enum tomoyo_mode_index { | |||
136 | /* Index numbers for entry type. */ | 155 | /* Index numbers for entry type. */ |
137 | enum tomoyo_policy_id { | 156 | enum tomoyo_policy_id { |
138 | TOMOYO_ID_GROUP, | 157 | TOMOYO_ID_GROUP, |
158 | TOMOYO_ID_ADDRESS_GROUP, | ||
139 | TOMOYO_ID_PATH_GROUP, | 159 | TOMOYO_ID_PATH_GROUP, |
140 | TOMOYO_ID_NUMBER_GROUP, | 160 | TOMOYO_ID_NUMBER_GROUP, |
141 | TOMOYO_ID_TRANSITION_CONTROL, | 161 | TOMOYO_ID_TRANSITION_CONTROL, |
@@ -162,10 +182,21 @@ enum tomoyo_domain_info_flags_index { | |||
162 | TOMOYO_MAX_DOMAIN_INFO_FLAGS | 182 | TOMOYO_MAX_DOMAIN_INFO_FLAGS |
163 | }; | 183 | }; |
164 | 184 | ||
185 | /* Index numbers for audit type. */ | ||
186 | enum tomoyo_grant_log { | ||
187 | /* Follow profile's configuration. */ | ||
188 | TOMOYO_GRANTLOG_AUTO, | ||
189 | /* Do not generate grant log. */ | ||
190 | TOMOYO_GRANTLOG_NO, | ||
191 | /* Generate grant_log. */ | ||
192 | TOMOYO_GRANTLOG_YES, | ||
193 | }; | ||
194 | |||
165 | /* Index numbers for group entries. */ | 195 | /* Index numbers for group entries. */ |
166 | enum tomoyo_group_id { | 196 | enum tomoyo_group_id { |
167 | TOMOYO_PATH_GROUP, | 197 | TOMOYO_PATH_GROUP, |
168 | TOMOYO_NUMBER_GROUP, | 198 | TOMOYO_NUMBER_GROUP, |
199 | TOMOYO_ADDRESS_GROUP, | ||
169 | TOMOYO_MAX_GROUP | 200 | TOMOYO_MAX_GROUP |
170 | }; | 201 | }; |
171 | 202 | ||
@@ -196,6 +227,10 @@ enum tomoyo_acl_entry_type_index { | |||
196 | TOMOYO_TYPE_PATH_NUMBER_ACL, | 227 | TOMOYO_TYPE_PATH_NUMBER_ACL, |
197 | TOMOYO_TYPE_MKDEV_ACL, | 228 | TOMOYO_TYPE_MKDEV_ACL, |
198 | TOMOYO_TYPE_MOUNT_ACL, | 229 | TOMOYO_TYPE_MOUNT_ACL, |
230 | TOMOYO_TYPE_INET_ACL, | ||
231 | TOMOYO_TYPE_UNIX_ACL, | ||
232 | TOMOYO_TYPE_ENV_ACL, | ||
233 | TOMOYO_TYPE_MANUAL_TASK_ACL, | ||
199 | }; | 234 | }; |
200 | 235 | ||
201 | /* Index numbers for access controls with one pathname. */ | 236 | /* Index numbers for access controls with one pathname. */ |
@@ -228,6 +263,15 @@ enum tomoyo_mkdev_acl_index { | |||
228 | TOMOYO_MAX_MKDEV_OPERATION | 263 | TOMOYO_MAX_MKDEV_OPERATION |
229 | }; | 264 | }; |
230 | 265 | ||
266 | /* Index numbers for socket operations. */ | ||
267 | enum tomoyo_network_acl_index { | ||
268 | TOMOYO_NETWORK_BIND, /* bind() operation. */ | ||
269 | TOMOYO_NETWORK_LISTEN, /* listen() operation. */ | ||
270 | TOMOYO_NETWORK_CONNECT, /* connect() operation. */ | ||
271 | TOMOYO_NETWORK_SEND, /* send() operation. */ | ||
272 | TOMOYO_MAX_NETWORK_OPERATION | ||
273 | }; | ||
274 | |||
231 | /* Index numbers for access controls with two pathnames. */ | 275 | /* Index numbers for access controls with two pathnames. */ |
232 | enum tomoyo_path2_acl_index { | 276 | enum tomoyo_path2_acl_index { |
233 | TOMOYO_TYPE_LINK, | 277 | TOMOYO_TYPE_LINK, |
@@ -255,7 +299,6 @@ enum tomoyo_securityfs_interface_index { | |||
255 | TOMOYO_EXCEPTIONPOLICY, | 299 | TOMOYO_EXCEPTIONPOLICY, |
256 | TOMOYO_PROCESS_STATUS, | 300 | TOMOYO_PROCESS_STATUS, |
257 | TOMOYO_STAT, | 301 | TOMOYO_STAT, |
258 | TOMOYO_SELFDOMAIN, | ||
259 | TOMOYO_AUDIT, | 302 | TOMOYO_AUDIT, |
260 | TOMOYO_VERSION, | 303 | TOMOYO_VERSION, |
261 | TOMOYO_PROFILE, | 304 | TOMOYO_PROFILE, |
@@ -300,12 +343,30 @@ enum tomoyo_mac_index { | |||
300 | TOMOYO_MAC_FILE_MOUNT, | 343 | TOMOYO_MAC_FILE_MOUNT, |
301 | TOMOYO_MAC_FILE_UMOUNT, | 344 | TOMOYO_MAC_FILE_UMOUNT, |
302 | TOMOYO_MAC_FILE_PIVOT_ROOT, | 345 | TOMOYO_MAC_FILE_PIVOT_ROOT, |
346 | TOMOYO_MAC_NETWORK_INET_STREAM_BIND, | ||
347 | TOMOYO_MAC_NETWORK_INET_STREAM_LISTEN, | ||
348 | TOMOYO_MAC_NETWORK_INET_STREAM_CONNECT, | ||
349 | TOMOYO_MAC_NETWORK_INET_DGRAM_BIND, | ||
350 | TOMOYO_MAC_NETWORK_INET_DGRAM_SEND, | ||
351 | TOMOYO_MAC_NETWORK_INET_RAW_BIND, | ||
352 | TOMOYO_MAC_NETWORK_INET_RAW_SEND, | ||
353 | TOMOYO_MAC_NETWORK_UNIX_STREAM_BIND, | ||
354 | TOMOYO_MAC_NETWORK_UNIX_STREAM_LISTEN, | ||
355 | TOMOYO_MAC_NETWORK_UNIX_STREAM_CONNECT, | ||
356 | TOMOYO_MAC_NETWORK_UNIX_DGRAM_BIND, | ||
357 | TOMOYO_MAC_NETWORK_UNIX_DGRAM_SEND, | ||
358 | TOMOYO_MAC_NETWORK_UNIX_SEQPACKET_BIND, | ||
359 | TOMOYO_MAC_NETWORK_UNIX_SEQPACKET_LISTEN, | ||
360 | TOMOYO_MAC_NETWORK_UNIX_SEQPACKET_CONNECT, | ||
361 | TOMOYO_MAC_ENVIRON, | ||
303 | TOMOYO_MAX_MAC_INDEX | 362 | TOMOYO_MAX_MAC_INDEX |
304 | }; | 363 | }; |
305 | 364 | ||
306 | /* Index numbers for category of functionality. */ | 365 | /* Index numbers for category of functionality. */ |
307 | enum tomoyo_mac_category_index { | 366 | enum tomoyo_mac_category_index { |
308 | TOMOYO_MAC_CATEGORY_FILE, | 367 | TOMOYO_MAC_CATEGORY_FILE, |
368 | TOMOYO_MAC_CATEGORY_NETWORK, | ||
369 | TOMOYO_MAC_CATEGORY_MISC, | ||
309 | TOMOYO_MAX_MAC_CATEGORY_INDEX | 370 | TOMOYO_MAX_MAC_CATEGORY_INDEX |
310 | }; | 371 | }; |
311 | 372 | ||
@@ -340,7 +401,7 @@ enum tomoyo_pref_index { | |||
340 | /* Common header for holding ACL entries. */ | 401 | /* Common header for holding ACL entries. */ |
341 | struct tomoyo_acl_head { | 402 | struct tomoyo_acl_head { |
342 | struct list_head list; | 403 | struct list_head list; |
343 | bool is_deleted; | 404 | s8 is_deleted; /* true or false or TOMOYO_GC_IN_PROGRESS */ |
344 | } __packed; | 405 | } __packed; |
345 | 406 | ||
346 | /* Common header for shared entries. */ | 407 | /* Common header for shared entries. */ |
@@ -397,13 +458,36 @@ struct tomoyo_request_info { | |||
397 | u8 operation; | 458 | u8 operation; |
398 | } path_number; | 459 | } path_number; |
399 | struct { | 460 | struct { |
461 | const struct tomoyo_path_info *name; | ||
462 | } environ; | ||
463 | struct { | ||
464 | const __be32 *address; | ||
465 | u16 port; | ||
466 | /* One of values smaller than TOMOYO_SOCK_MAX. */ | ||
467 | u8 protocol; | ||
468 | /* One of values in "enum tomoyo_network_acl_index". */ | ||
469 | u8 operation; | ||
470 | bool is_ipv6; | ||
471 | } inet_network; | ||
472 | struct { | ||
473 | const struct tomoyo_path_info *address; | ||
474 | /* One of values smaller than TOMOYO_SOCK_MAX. */ | ||
475 | u8 protocol; | ||
476 | /* One of values in "enum tomoyo_network_acl_index". */ | ||
477 | u8 operation; | ||
478 | } unix_network; | ||
479 | struct { | ||
400 | const struct tomoyo_path_info *type; | 480 | const struct tomoyo_path_info *type; |
401 | const struct tomoyo_path_info *dir; | 481 | const struct tomoyo_path_info *dir; |
402 | const struct tomoyo_path_info *dev; | 482 | const struct tomoyo_path_info *dev; |
403 | unsigned long flags; | 483 | unsigned long flags; |
404 | int need_dev; | 484 | int need_dev; |
405 | } mount; | 485 | } mount; |
486 | struct { | ||
487 | const struct tomoyo_path_info *domainname; | ||
488 | } task; | ||
406 | } param; | 489 | } param; |
490 | struct tomoyo_acl_info *matched_acl; | ||
407 | u8 param_type; | 491 | u8 param_type; |
408 | bool granted; | 492 | bool granted; |
409 | u8 retry; | 493 | u8 retry; |
@@ -442,7 +526,14 @@ struct tomoyo_number_union { | |||
442 | u8 value_type[2]; | 526 | u8 value_type[2]; |
443 | }; | 527 | }; |
444 | 528 | ||
445 | /* Structure for "path_group"/"number_group" directive. */ | 529 | /* Structure for holding an IP address. */ |
530 | struct tomoyo_ipaddr_union { | ||
531 | struct in6_addr ip[2]; /* Big endian. */ | ||
532 | struct tomoyo_group *group; /* Pointer to address group. */ | ||
533 | bool is_ipv6; /* Valid only if @group == NULL. */ | ||
534 | }; | ||
535 | |||
536 | /* Structure for "path_group"/"number_group"/"address_group" directive. */ | ||
446 | struct tomoyo_group { | 537 | struct tomoyo_group { |
447 | struct tomoyo_shared_acl_head head; | 538 | struct tomoyo_shared_acl_head head; |
448 | const struct tomoyo_path_info *group_name; | 539 | const struct tomoyo_path_info *group_name; |
@@ -461,6 +552,13 @@ struct tomoyo_number_group { | |||
461 | struct tomoyo_number_union number; | 552 | struct tomoyo_number_union number; |
462 | }; | 553 | }; |
463 | 554 | ||
555 | /* Structure for "address_group" directive. */ | ||
556 | struct tomoyo_address_group { | ||
557 | struct tomoyo_acl_head head; | ||
558 | /* Structure for holding an IP address. */ | ||
559 | struct tomoyo_ipaddr_union address; | ||
560 | }; | ||
561 | |||
464 | /* Subset of "struct stat". Used by conditional ACL and audit logs. */ | 562 | /* Subset of "struct stat". Used by conditional ACL and audit logs. */ |
465 | struct tomoyo_mini_stat { | 563 | struct tomoyo_mini_stat { |
466 | uid_t uid; | 564 | uid_t uid; |
@@ -520,6 +618,7 @@ struct tomoyo_execve { | |||
520 | struct tomoyo_request_info r; | 618 | struct tomoyo_request_info r; |
521 | struct tomoyo_obj_info obj; | 619 | struct tomoyo_obj_info obj; |
522 | struct linux_binprm *bprm; | 620 | struct linux_binprm *bprm; |
621 | const struct tomoyo_path_info *transition; | ||
523 | /* For dumping argv[] and envp[]. */ | 622 | /* For dumping argv[] and envp[]. */ |
524 | struct tomoyo_page_dump dump; | 623 | struct tomoyo_page_dump dump; |
525 | /* For temporary use. */ | 624 | /* For temporary use. */ |
@@ -554,6 +653,8 @@ struct tomoyo_condition { | |||
554 | u16 names_count; /* Number of "struct tomoyo_name_union names". */ | 653 | u16 names_count; /* Number of "struct tomoyo_name_union names". */ |
555 | u16 argc; /* Number of "struct tomoyo_argv". */ | 654 | u16 argc; /* Number of "struct tomoyo_argv". */ |
556 | u16 envc; /* Number of "struct tomoyo_envp". */ | 655 | u16 envc; /* Number of "struct tomoyo_envp". */ |
656 | u8 grant_log; /* One of values in "enum tomoyo_grant_log". */ | ||
657 | const struct tomoyo_path_info *transit; /* Maybe NULL. */ | ||
557 | /* | 658 | /* |
558 | * struct tomoyo_condition_element condition[condc]; | 659 | * struct tomoyo_condition_element condition[condc]; |
559 | * struct tomoyo_number_union values[numbers_count]; | 660 | * struct tomoyo_number_union values[numbers_count]; |
@@ -567,7 +668,7 @@ struct tomoyo_condition { | |||
567 | struct tomoyo_acl_info { | 668 | struct tomoyo_acl_info { |
568 | struct list_head list; | 669 | struct list_head list; |
569 | struct tomoyo_condition *cond; /* Maybe NULL. */ | 670 | struct tomoyo_condition *cond; /* Maybe NULL. */ |
570 | bool is_deleted; | 671 | s8 is_deleted; /* true or false or TOMOYO_GC_IN_PROGRESS */ |
571 | u8 type; /* One of values in "enum tomoyo_acl_entry_type_index". */ | 672 | u8 type; /* One of values in "enum tomoyo_acl_entry_type_index". */ |
572 | } __packed; | 673 | } __packed; |
573 | 674 | ||
@@ -587,6 +688,15 @@ struct tomoyo_domain_info { | |||
587 | }; | 688 | }; |
588 | 689 | ||
589 | /* | 690 | /* |
691 | * Structure for "task manual_domain_transition" directive. | ||
692 | */ | ||
693 | struct tomoyo_task_acl { | ||
694 | struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_MANUAL_TASK_ACL */ | ||
695 | /* Pointer to domainname. */ | ||
696 | const struct tomoyo_path_info *domainname; | ||
697 | }; | ||
698 | |||
699 | /* | ||
590 | * Structure for "file execute", "file read", "file write", "file append", | 700 | * Structure for "file execute", "file read", "file write", "file append", |
591 | * "file unlink", "file getattr", "file rmdir", "file truncate", | 701 | * "file unlink", "file getattr", "file rmdir", "file truncate", |
592 | * "file symlink", "file chroot" and "file unmount" directive. | 702 | * "file symlink", "file chroot" and "file unmount" directive. |
@@ -638,6 +748,29 @@ struct tomoyo_mount_acl { | |||
638 | struct tomoyo_number_union flags; | 748 | struct tomoyo_number_union flags; |
639 | }; | 749 | }; |
640 | 750 | ||
751 | /* Structure for "misc env" directive in domain policy. */ | ||
752 | struct tomoyo_env_acl { | ||
753 | struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_ENV_ACL */ | ||
754 | const struct tomoyo_path_info *env; /* environment variable */ | ||
755 | }; | ||
756 | |||
757 | /* Structure for "network inet" directive. */ | ||
758 | struct tomoyo_inet_acl { | ||
759 | struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_INET_ACL */ | ||
760 | u8 protocol; | ||
761 | u8 perm; /* Bitmask of values in "enum tomoyo_network_acl_index" */ | ||
762 | struct tomoyo_ipaddr_union address; | ||
763 | struct tomoyo_number_union port; | ||
764 | }; | ||
765 | |||
766 | /* Structure for "network unix" directive. */ | ||
767 | struct tomoyo_unix_acl { | ||
768 | struct tomoyo_acl_info head; /* type = TOMOYO_TYPE_UNIX_ACL */ | ||
769 | u8 protocol; | ||
770 | u8 perm; /* Bitmask of values in "enum tomoyo_network_acl_index" */ | ||
771 | struct tomoyo_name_union name; | ||
772 | }; | ||
773 | |||
641 | /* Structure for holding a line from /sys/kernel/security/tomoyo/ interface. */ | 774 | /* Structure for holding a line from /sys/kernel/security/tomoyo/ interface. */ |
642 | struct tomoyo_acl_param { | 775 | struct tomoyo_acl_param { |
643 | char *data; | 776 | char *data; |
@@ -773,7 +906,7 @@ struct tomoyo_policy_namespace { | |||
773 | struct list_head acl_group[TOMOYO_MAX_ACL_GROUPS]; | 906 | struct list_head acl_group[TOMOYO_MAX_ACL_GROUPS]; |
774 | /* List for connecting to tomoyo_namespace_list list. */ | 907 | /* List for connecting to tomoyo_namespace_list list. */ |
775 | struct list_head namespace_list; | 908 | struct list_head namespace_list; |
776 | /* Profile version. Currently only 20100903 is defined. */ | 909 | /* Profile version. Currently only 20110903 is defined. */ |
777 | unsigned int profile_version; | 910 | unsigned int profile_version; |
778 | /* Name of this namespace (e.g. "<kernel>", "</usr/sbin/httpd>" ). */ | 911 | /* Name of this namespace (e.g. "<kernel>", "</usr/sbin/httpd>" ). */ |
779 | const char *name; | 912 | const char *name; |
@@ -781,6 +914,8 @@ struct tomoyo_policy_namespace { | |||
781 | 914 | ||
782 | /********** Function prototypes. **********/ | 915 | /********** Function prototypes. **********/ |
783 | 916 | ||
917 | bool tomoyo_address_matches_group(const bool is_ipv6, const __be32 *address, | ||
918 | const struct tomoyo_group *group); | ||
784 | bool tomoyo_compare_number_union(const unsigned long value, | 919 | bool tomoyo_compare_number_union(const unsigned long value, |
785 | const struct tomoyo_number_union *ptr); | 920 | const struct tomoyo_number_union *ptr); |
786 | bool tomoyo_condition(struct tomoyo_request_info *r, | 921 | bool tomoyo_condition(struct tomoyo_request_info *r, |
@@ -796,6 +931,8 @@ bool tomoyo_memory_ok(void *ptr); | |||
796 | bool tomoyo_number_matches_group(const unsigned long min, | 931 | bool tomoyo_number_matches_group(const unsigned long min, |
797 | const unsigned long max, | 932 | const unsigned long max, |
798 | const struct tomoyo_group *group); | 933 | const struct tomoyo_group *group); |
934 | bool tomoyo_parse_ipaddr_union(struct tomoyo_acl_param *param, | ||
935 | struct tomoyo_ipaddr_union *ptr); | ||
799 | bool tomoyo_parse_name_union(struct tomoyo_acl_param *param, | 936 | bool tomoyo_parse_name_union(struct tomoyo_acl_param *param, |
800 | struct tomoyo_name_union *ptr); | 937 | struct tomoyo_name_union *ptr); |
801 | bool tomoyo_parse_number_union(struct tomoyo_acl_param *param, | 938 | bool tomoyo_parse_number_union(struct tomoyo_acl_param *param, |
@@ -805,6 +942,7 @@ bool tomoyo_path_matches_pattern(const struct tomoyo_path_info *filename, | |||
805 | bool tomoyo_permstr(const char *string, const char *keyword); | 942 | bool tomoyo_permstr(const char *string, const char *keyword); |
806 | bool tomoyo_str_starts(char **src, const char *find); | 943 | bool tomoyo_str_starts(char **src, const char *find); |
807 | char *tomoyo_encode(const char *str); | 944 | char *tomoyo_encode(const char *str); |
945 | char *tomoyo_encode2(const char *str, int str_len); | ||
808 | char *tomoyo_init_log(struct tomoyo_request_info *r, int len, const char *fmt, | 946 | char *tomoyo_init_log(struct tomoyo_request_info *r, int len, const char *fmt, |
809 | va_list args); | 947 | va_list args); |
810 | char *tomoyo_read_token(struct tomoyo_acl_param *param); | 948 | char *tomoyo_read_token(struct tomoyo_acl_param *param); |
@@ -814,12 +952,17 @@ const char *tomoyo_get_exe(void); | |||
814 | const char *tomoyo_yesno(const unsigned int value); | 952 | const char *tomoyo_yesno(const unsigned int value); |
815 | const struct tomoyo_path_info *tomoyo_compare_name_union | 953 | const struct tomoyo_path_info *tomoyo_compare_name_union |
816 | (const struct tomoyo_path_info *name, const struct tomoyo_name_union *ptr); | 954 | (const struct tomoyo_path_info *name, const struct tomoyo_name_union *ptr); |
955 | const struct tomoyo_path_info *tomoyo_get_domainname | ||
956 | (struct tomoyo_acl_param *param); | ||
817 | const struct tomoyo_path_info *tomoyo_get_name(const char *name); | 957 | const struct tomoyo_path_info *tomoyo_get_name(const char *name); |
818 | const struct tomoyo_path_info *tomoyo_path_matches_group | 958 | const struct tomoyo_path_info *tomoyo_path_matches_group |
819 | (const struct tomoyo_path_info *pathname, const struct tomoyo_group *group); | 959 | (const struct tomoyo_path_info *pathname, const struct tomoyo_group *group); |
820 | int tomoyo_check_open_permission(struct tomoyo_domain_info *domain, | 960 | int tomoyo_check_open_permission(struct tomoyo_domain_info *domain, |
821 | struct path *path, const int flag); | 961 | struct path *path, const int flag); |
822 | int tomoyo_close_control(struct tomoyo_io_buffer *head); | 962 | int tomoyo_close_control(struct tomoyo_io_buffer *head); |
963 | int tomoyo_env_perm(struct tomoyo_request_info *r, const char *env); | ||
964 | int tomoyo_execute_permission(struct tomoyo_request_info *r, | ||
965 | const struct tomoyo_path_info *filename); | ||
823 | int tomoyo_find_next_domain(struct linux_binprm *bprm); | 966 | int tomoyo_find_next_domain(struct linux_binprm *bprm); |
824 | int tomoyo_get_mode(const struct tomoyo_policy_namespace *ns, const u8 profile, | 967 | int tomoyo_get_mode(const struct tomoyo_policy_namespace *ns, const u8 profile, |
825 | const u8 index); | 968 | const u8 index); |
@@ -838,10 +981,15 @@ int tomoyo_path_number_perm(const u8 operation, struct path *path, | |||
838 | unsigned long number); | 981 | unsigned long number); |
839 | int tomoyo_path_perm(const u8 operation, struct path *path, | 982 | int tomoyo_path_perm(const u8 operation, struct path *path, |
840 | const char *target); | 983 | const char *target); |
841 | int tomoyo_path_permission(struct tomoyo_request_info *r, u8 operation, | ||
842 | const struct tomoyo_path_info *filename); | ||
843 | int tomoyo_poll_control(struct file *file, poll_table *wait); | 984 | int tomoyo_poll_control(struct file *file, poll_table *wait); |
844 | int tomoyo_poll_log(struct file *file, poll_table *wait); | 985 | int tomoyo_poll_log(struct file *file, poll_table *wait); |
986 | int tomoyo_socket_bind_permission(struct socket *sock, struct sockaddr *addr, | ||
987 | int addr_len); | ||
988 | int tomoyo_socket_connect_permission(struct socket *sock, | ||
989 | struct sockaddr *addr, int addr_len); | ||
990 | int tomoyo_socket_listen_permission(struct socket *sock); | ||
991 | int tomoyo_socket_sendmsg_permission(struct socket *sock, struct msghdr *msg, | ||
992 | int size); | ||
845 | int tomoyo_supervisor(struct tomoyo_request_info *r, const char *fmt, ...) | 993 | int tomoyo_supervisor(struct tomoyo_request_info *r, const char *fmt, ...) |
846 | __printf(2, 3); | 994 | __printf(2, 3); |
847 | int tomoyo_update_domain(struct tomoyo_acl_info *new_entry, const int size, | 995 | int tomoyo_update_domain(struct tomoyo_acl_info *new_entry, const int size, |
@@ -860,8 +1008,11 @@ int tomoyo_update_policy(struct tomoyo_acl_head *new_entry, const int size, | |||
860 | int tomoyo_write_aggregator(struct tomoyo_acl_param *param); | 1008 | int tomoyo_write_aggregator(struct tomoyo_acl_param *param); |
861 | int tomoyo_write_file(struct tomoyo_acl_param *param); | 1009 | int tomoyo_write_file(struct tomoyo_acl_param *param); |
862 | int tomoyo_write_group(struct tomoyo_acl_param *param, const u8 type); | 1010 | int tomoyo_write_group(struct tomoyo_acl_param *param, const u8 type); |
1011 | int tomoyo_write_misc(struct tomoyo_acl_param *param); | ||
1012 | int tomoyo_write_inet_network(struct tomoyo_acl_param *param); | ||
863 | int tomoyo_write_transition_control(struct tomoyo_acl_param *param, | 1013 | int tomoyo_write_transition_control(struct tomoyo_acl_param *param, |
864 | const u8 type); | 1014 | const u8 type); |
1015 | int tomoyo_write_unix_network(struct tomoyo_acl_param *param); | ||
865 | ssize_t tomoyo_read_control(struct tomoyo_io_buffer *head, char __user *buffer, | 1016 | ssize_t tomoyo_read_control(struct tomoyo_io_buffer *head, char __user *buffer, |
866 | const int buffer_len); | 1017 | const int buffer_len); |
867 | ssize_t tomoyo_write_control(struct tomoyo_io_buffer *head, | 1018 | ssize_t tomoyo_write_control(struct tomoyo_io_buffer *head, |
@@ -891,12 +1042,11 @@ void tomoyo_del_condition(struct list_head *element); | |||
891 | void tomoyo_fill_path_info(struct tomoyo_path_info *ptr); | 1042 | void tomoyo_fill_path_info(struct tomoyo_path_info *ptr); |
892 | void tomoyo_get_attributes(struct tomoyo_obj_info *obj); | 1043 | void tomoyo_get_attributes(struct tomoyo_obj_info *obj); |
893 | void tomoyo_init_policy_namespace(struct tomoyo_policy_namespace *ns); | 1044 | void tomoyo_init_policy_namespace(struct tomoyo_policy_namespace *ns); |
894 | void tomoyo_io_printf(struct tomoyo_io_buffer *head, const char *fmt, ...) | ||
895 | __printf(2, 3); | ||
896 | void tomoyo_load_policy(const char *filename); | 1045 | void tomoyo_load_policy(const char *filename); |
897 | void tomoyo_memory_free(void *ptr); | ||
898 | void tomoyo_normalize_line(unsigned char *buffer); | 1046 | void tomoyo_normalize_line(unsigned char *buffer); |
899 | void tomoyo_notify_gc(struct tomoyo_io_buffer *head, const bool is_register); | 1047 | void tomoyo_notify_gc(struct tomoyo_io_buffer *head, const bool is_register); |
1048 | void tomoyo_print_ip(char *buf, const unsigned int size, | ||
1049 | const struct tomoyo_ipaddr_union *ptr); | ||
900 | void tomoyo_print_ulong(char *buffer, const int buffer_len, | 1050 | void tomoyo_print_ulong(char *buffer, const int buffer_len, |
901 | const unsigned long value, const u8 type); | 1051 | const unsigned long value, const u8 type); |
902 | void tomoyo_put_name_union(struct tomoyo_name_union *ptr); | 1052 | void tomoyo_put_name_union(struct tomoyo_name_union *ptr); |
@@ -919,6 +1069,8 @@ extern const char * const tomoyo_mac_keywords[TOMOYO_MAX_MAC_INDEX | |||
919 | + TOMOYO_MAX_MAC_CATEGORY_INDEX]; | 1069 | + TOMOYO_MAX_MAC_CATEGORY_INDEX]; |
920 | extern const char * const tomoyo_mode[TOMOYO_CONFIG_MAX_MODE]; | 1070 | extern const char * const tomoyo_mode[TOMOYO_CONFIG_MAX_MODE]; |
921 | extern const char * const tomoyo_path_keyword[TOMOYO_MAX_PATH_OPERATION]; | 1071 | extern const char * const tomoyo_path_keyword[TOMOYO_MAX_PATH_OPERATION]; |
1072 | extern const char * const tomoyo_proto_keyword[TOMOYO_SOCK_MAX]; | ||
1073 | extern const char * const tomoyo_socket_keyword[TOMOYO_MAX_NETWORK_OPERATION]; | ||
922 | extern const u8 tomoyo_index2category[TOMOYO_MAX_MAC_INDEX]; | 1074 | extern const u8 tomoyo_index2category[TOMOYO_MAX_MAC_INDEX]; |
923 | extern const u8 tomoyo_pn2mac[TOMOYO_MAX_PATH_NUMBER_OPERATION]; | 1075 | extern const u8 tomoyo_pn2mac[TOMOYO_MAX_PATH_NUMBER_OPERATION]; |
924 | extern const u8 tomoyo_pnnn2mac[TOMOYO_MAX_MKDEV_OPERATION]; | 1076 | extern const u8 tomoyo_pnnn2mac[TOMOYO_MAX_MKDEV_OPERATION]; |
@@ -1098,6 +1250,21 @@ static inline bool tomoyo_same_number_union | |||
1098 | } | 1250 | } |
1099 | 1251 | ||
1100 | /** | 1252 | /** |
1253 | * tomoyo_same_ipaddr_union - Check for duplicated "struct tomoyo_ipaddr_union" entry. | ||
1254 | * | ||
1255 | * @a: Pointer to "struct tomoyo_ipaddr_union". | ||
1256 | * @b: Pointer to "struct tomoyo_ipaddr_union". | ||
1257 | * | ||
1258 | * Returns true if @a == @b, false otherwise. | ||
1259 | */ | ||
1260 | static inline bool tomoyo_same_ipaddr_union | ||
1261 | (const struct tomoyo_ipaddr_union *a, const struct tomoyo_ipaddr_union *b) | ||
1262 | { | ||
1263 | return !memcmp(a->ip, b->ip, sizeof(a->ip)) && a->group == b->group && | ||
1264 | a->is_ipv6 == b->is_ipv6; | ||
1265 | } | ||
1266 | |||
1267 | /** | ||
1101 | * tomoyo_current_namespace - Get "struct tomoyo_policy_namespace" for current thread. | 1268 | * tomoyo_current_namespace - Get "struct tomoyo_policy_namespace" for current thread. |
1102 | * | 1269 | * |
1103 | * Returns pointer to "struct tomoyo_policy_namespace" for current thread. | 1270 | * Returns pointer to "struct tomoyo_policy_namespace" for current thread. |