diff options
author | Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp> | 2011-09-25 04:51:06 -0400 |
---|---|---|
committer | James Morris <jmorris@namei.org> | 2011-09-25 20:46:22 -0400 |
commit | a427fd14d3edf6396c4b9638dbc8e2972afaa05b (patch) | |
tree | 2f8fdffa989f6e18f57bfb61f5ecfc4fdcf8d729 /security/tomoyo | |
parent | f9732ea145886786a6f8b0493bc2239e70cbacdb (diff) |
TOMOYO: Remove tomoyo_policy_memory_lock spinlock.
tomoyo_policy_lock mutex already protects it.
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security/tomoyo')
-rw-r--r-- | security/tomoyo/common.h | 1 | ||||
-rw-r--r-- | security/tomoyo/gc.c | 20 | ||||
-rw-r--r-- | security/tomoyo/memory.c | 33 |
3 files changed, 27 insertions, 27 deletions
diff --git a/security/tomoyo/common.h b/security/tomoyo/common.h index a0212fbf60fb..ed311d7a8ce0 100644 --- a/security/tomoyo/common.h +++ b/security/tomoyo/common.h | |||
@@ -1043,7 +1043,6 @@ void tomoyo_fill_path_info(struct tomoyo_path_info *ptr); | |||
1043 | void tomoyo_get_attributes(struct tomoyo_obj_info *obj); | 1043 | void tomoyo_get_attributes(struct tomoyo_obj_info *obj); |
1044 | void tomoyo_init_policy_namespace(struct tomoyo_policy_namespace *ns); | 1044 | void tomoyo_init_policy_namespace(struct tomoyo_policy_namespace *ns); |
1045 | void tomoyo_load_policy(const char *filename); | 1045 | void tomoyo_load_policy(const char *filename); |
1046 | void tomoyo_memory_free(void *ptr); | ||
1047 | void tomoyo_normalize_line(unsigned char *buffer); | 1046 | void tomoyo_normalize_line(unsigned char *buffer); |
1048 | 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); |
1049 | void tomoyo_print_ip(char *buf, const unsigned int size, | 1048 | void tomoyo_print_ip(char *buf, const unsigned int size, |
diff --git a/security/tomoyo/gc.c b/security/tomoyo/gc.c index f2295c65f1e4..c3214b32dbfb 100644 --- a/security/tomoyo/gc.c +++ b/security/tomoyo/gc.c | |||
@@ -8,6 +8,21 @@ | |||
8 | #include <linux/kthread.h> | 8 | #include <linux/kthread.h> |
9 | #include <linux/slab.h> | 9 | #include <linux/slab.h> |
10 | 10 | ||
11 | /** | ||
12 | * tomoyo_memory_free - Free memory for elements. | ||
13 | * | ||
14 | * @ptr: Pointer to allocated memory. | ||
15 | * | ||
16 | * Returns nothing. | ||
17 | * | ||
18 | * Caller holds tomoyo_policy_lock mutex. | ||
19 | */ | ||
20 | static inline void tomoyo_memory_free(void *ptr) | ||
21 | { | ||
22 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] -= ksize(ptr); | ||
23 | kfree(ptr); | ||
24 | } | ||
25 | |||
11 | /* The list for "struct tomoyo_io_buffer". */ | 26 | /* The list for "struct tomoyo_io_buffer". */ |
12 | static LIST_HEAD(tomoyo_io_buffer_list); | 27 | static LIST_HEAD(tomoyo_io_buffer_list); |
13 | /* Lock for protecting tomoyo_io_buffer_list. */ | 28 | /* Lock for protecting tomoyo_io_buffer_list. */ |
@@ -215,6 +230,8 @@ static void tomoyo_del_acl(struct list_head *element) | |||
215 | * @element: Pointer to "struct list_head". | 230 | * @element: Pointer to "struct list_head". |
216 | * | 231 | * |
217 | * Returns nothing. | 232 | * Returns nothing. |
233 | * | ||
234 | * Caller holds tomoyo_policy_lock mutex. | ||
218 | */ | 235 | */ |
219 | static inline void tomoyo_del_domain(struct list_head *element) | 236 | static inline void tomoyo_del_domain(struct list_head *element) |
220 | { | 237 | { |
@@ -416,12 +433,13 @@ static void tomoyo_try_to_gc(const enum tomoyo_policy_id type, | |||
416 | (element, typeof(struct tomoyo_domain_info), | 433 | (element, typeof(struct tomoyo_domain_info), |
417 | list)->users)) | 434 | list)->users)) |
418 | goto reinject; | 435 | goto reinject; |
419 | tomoyo_del_domain(element); | ||
420 | break; | 436 | break; |
421 | case TOMOYO_MAX_POLICY: | 437 | case TOMOYO_MAX_POLICY: |
422 | break; | 438 | break; |
423 | } | 439 | } |
424 | mutex_lock(&tomoyo_policy_lock); | 440 | mutex_lock(&tomoyo_policy_lock); |
441 | if (type == TOMOYO_ID_DOMAIN) | ||
442 | tomoyo_del_domain(element); | ||
425 | tomoyo_memory_free(element); | 443 | tomoyo_memory_free(element); |
426 | return; | 444 | return; |
427 | reinject: | 445 | reinject: |
diff --git a/security/tomoyo/memory.c b/security/tomoyo/memory.c index 277b9ade4408..0e995716cc25 100644 --- a/security/tomoyo/memory.c +++ b/security/tomoyo/memory.c | |||
@@ -27,8 +27,6 @@ void tomoyo_warn_oom(const char *function) | |||
27 | panic("MAC Initialization failed.\n"); | 27 | panic("MAC Initialization failed.\n"); |
28 | } | 28 | } |
29 | 29 | ||
30 | /* Lock for protecting tomoyo_memory_used. */ | ||
31 | static DEFINE_SPINLOCK(tomoyo_policy_memory_lock); | ||
32 | /* Memoy currently used by policy/audit log/query. */ | 30 | /* Memoy currently used by policy/audit log/query. */ |
33 | unsigned int tomoyo_memory_used[TOMOYO_MAX_MEMORY_STAT]; | 31 | unsigned int tomoyo_memory_used[TOMOYO_MAX_MEMORY_STAT]; |
34 | /* Memory quota for "policy"/"audit log"/"query". */ | 32 | /* Memory quota for "policy"/"audit log"/"query". */ |
@@ -42,22 +40,19 @@ unsigned int tomoyo_memory_quota[TOMOYO_MAX_MEMORY_STAT]; | |||
42 | * Returns true on success, false otherwise. | 40 | * Returns true on success, false otherwise. |
43 | * | 41 | * |
44 | * Returns true if @ptr is not NULL and quota not exceeded, false otherwise. | 42 | * Returns true if @ptr is not NULL and quota not exceeded, false otherwise. |
43 | * | ||
44 | * Caller holds tomoyo_policy_lock mutex. | ||
45 | */ | 45 | */ |
46 | bool tomoyo_memory_ok(void *ptr) | 46 | bool tomoyo_memory_ok(void *ptr) |
47 | { | 47 | { |
48 | if (ptr) { | 48 | if (ptr) { |
49 | const size_t s = ksize(ptr); | 49 | const size_t s = ksize(ptr); |
50 | bool result; | ||
51 | spin_lock(&tomoyo_policy_memory_lock); | ||
52 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] += s; | 50 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] += s; |
53 | result = !tomoyo_memory_quota[TOMOYO_MEMORY_POLICY] || | 51 | if (!tomoyo_memory_quota[TOMOYO_MEMORY_POLICY] || |
54 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] <= | 52 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] <= |
55 | tomoyo_memory_quota[TOMOYO_MEMORY_POLICY]; | 53 | tomoyo_memory_quota[TOMOYO_MEMORY_POLICY]) |
56 | if (!result) | ||
57 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] -= s; | ||
58 | spin_unlock(&tomoyo_policy_memory_lock); | ||
59 | if (result) | ||
60 | return true; | 54 | return true; |
55 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] -= s; | ||
61 | } | 56 | } |
62 | tomoyo_warn_oom(__func__); | 57 | tomoyo_warn_oom(__func__); |
63 | return false; | 58 | return false; |
@@ -71,6 +66,8 @@ bool tomoyo_memory_ok(void *ptr) | |||
71 | * | 66 | * |
72 | * Returns pointer to allocated memory on success, NULL otherwise. | 67 | * Returns pointer to allocated memory on success, NULL otherwise. |
73 | * @data is zero-cleared on success. | 68 | * @data is zero-cleared on success. |
69 | * | ||
70 | * Caller holds tomoyo_policy_lock mutex. | ||
74 | */ | 71 | */ |
75 | void *tomoyo_commit_ok(void *data, const unsigned int size) | 72 | void *tomoyo_commit_ok(void *data, const unsigned int size) |
76 | { | 73 | { |
@@ -85,20 +82,6 @@ void *tomoyo_commit_ok(void *data, const unsigned int size) | |||
85 | } | 82 | } |
86 | 83 | ||
87 | /** | 84 | /** |
88 | * tomoyo_memory_free - Free memory for elements. | ||
89 | * | ||
90 | * @ptr: Pointer to allocated memory. | ||
91 | */ | ||
92 | void tomoyo_memory_free(void *ptr) | ||
93 | { | ||
94 | size_t s = ksize(ptr); | ||
95 | spin_lock(&tomoyo_policy_memory_lock); | ||
96 | tomoyo_memory_used[TOMOYO_MEMORY_POLICY] -= s; | ||
97 | spin_unlock(&tomoyo_policy_memory_lock); | ||
98 | kfree(ptr); | ||
99 | } | ||
100 | |||
101 | /** | ||
102 | * tomoyo_get_group - Allocate memory for "struct tomoyo_path_group"/"struct tomoyo_number_group". | 85 | * tomoyo_get_group - Allocate memory for "struct tomoyo_path_group"/"struct tomoyo_number_group". |
103 | * | 86 | * |
104 | * @param: Pointer to "struct tomoyo_acl_param". | 87 | * @param: Pointer to "struct tomoyo_acl_param". |