38 |
#ifdef CONFIG_TOMOYO |
#ifdef CONFIG_TOMOYO |
39 |
|
|
40 |
/* Domain creation lock. */ |
/* Domain creation lock. */ |
41 |
static DEFINE_MUTEX(new_domain_assign_lock); |
static DEFINE_MUTEX(domain_list_lock); |
42 |
|
|
43 |
/* Structure for "initialize_domain" and "no_initialize_domain" keyword. */ |
/* Structure for "initialize_domain" and "no_initialize_domain" keyword. */ |
44 |
struct domain_initializer_entry { |
struct domain_initializer_entry { |
88 |
void ccs_set_domain_flag(struct domain_info *domain, const bool is_delete, |
void ccs_set_domain_flag(struct domain_info *domain, const bool is_delete, |
89 |
const u8 flags) |
const u8 flags) |
90 |
{ |
{ |
91 |
mutex_lock(&new_domain_assign_lock); |
mutex_lock(&domain_list_lock); |
92 |
if (!is_delete) |
if (!is_delete) |
93 |
domain->flags |= flags; |
domain->flags |= flags; |
94 |
else |
else |
95 |
domain->flags &= ~flags; |
domain->flags &= ~flags; |
96 |
mutex_unlock(&new_domain_assign_lock); |
mutex_unlock(&domain_list_lock); |
97 |
} |
} |
98 |
|
|
99 |
/** |
/** |
717 |
struct path_info name; |
struct path_info name; |
718 |
name.name = domainname; |
name.name = domainname; |
719 |
ccs_fill_path_info(&name); |
ccs_fill_path_info(&name); |
720 |
mutex_lock(&new_domain_assign_lock); |
mutex_lock(&domain_list_lock); |
721 |
#ifdef DEBUG_DOMAIN_UNDELETE |
#ifdef DEBUG_DOMAIN_UNDELETE |
722 |
printk(KERN_DEBUG "ccs_delete_domain %s\n", domainname); |
printk(KERN_DEBUG "ccs_delete_domain %s\n", domainname); |
723 |
list1_for_each_entry(domain, &domain_list, list) { |
list1_for_each_entry(domain, &domain_list, list) { |
755 |
#endif |
#endif |
756 |
break; |
break; |
757 |
} |
} |
758 |
mutex_unlock(&new_domain_assign_lock); |
mutex_unlock(&domain_list_lock); |
759 |
return 0; |
return 0; |
760 |
} |
} |
761 |
|
|
773 |
struct path_info name; |
struct path_info name; |
774 |
name.name = domainname; |
name.name = domainname; |
775 |
ccs_fill_path_info(&name); |
ccs_fill_path_info(&name); |
776 |
mutex_lock(&new_domain_assign_lock); |
mutex_lock(&domain_list_lock); |
777 |
#ifdef DEBUG_DOMAIN_UNDELETE |
#ifdef DEBUG_DOMAIN_UNDELETE |
778 |
printk(KERN_DEBUG "ccs_undelete_domain %s\n", domainname); |
printk(KERN_DEBUG "ccs_undelete_domain %s\n", domainname); |
779 |
list1_for_each_entry(domain, &domain_list, list) { |
list1_for_each_entry(domain, &domain_list, list) { |
804 |
printk(KERN_DEBUG "%p was undeleted.\n", candidate_domain); |
printk(KERN_DEBUG "%p was undeleted.\n", candidate_domain); |
805 |
#endif |
#endif |
806 |
} |
} |
807 |
mutex_unlock(&new_domain_assign_lock); |
mutex_unlock(&domain_list_lock); |
808 |
return candidate_domain; |
return candidate_domain; |
809 |
} |
} |
810 |
|
|
821 |
{ |
{ |
822 |
struct domain_info *domain = NULL; |
struct domain_info *domain = NULL; |
823 |
const struct path_info *saved_domainname; |
const struct path_info *saved_domainname; |
824 |
mutex_lock(&new_domain_assign_lock); |
mutex_lock(&domain_list_lock); |
825 |
domain = ccs_find_domain(domainname); |
domain = ccs_find_domain(domainname); |
826 |
if (domain) |
if (domain) |
827 |
goto out; |
goto out; |
860 |
} |
} |
861 |
/* |
/* |
862 |
* Don't use ccs_set_domain_flag() because |
* Don't use ccs_set_domain_flag() because |
863 |
* new_domain_assign_lock is held. |
* domain_list_lock is held. |
864 |
*/ |
*/ |
865 |
domain->flags = 0; |
domain->flags = 0; |
866 |
domain->profile = profile; |
domain->profile = profile; |
878 |
list1_add_tail_mb(&domain->list, &domain_list); |
list1_add_tail_mb(&domain->list, &domain_list); |
879 |
} |
} |
880 |
out: |
out: |
881 |
mutex_unlock(&new_domain_assign_lock); |
mutex_unlock(&domain_list_lock); |
882 |
return domain; |
return domain; |
883 |
} |
} |
884 |
|
|