diff options
Diffstat (limited to 'security')
35 files changed, 76 insertions, 37 deletions
diff --git a/security/device_cgroup.c b/security/device_cgroup.c index 6cf8fd2b79e8..f77c60423992 100644 --- a/security/device_cgroup.c +++ b/security/device_cgroup.c | |||
@@ -10,6 +10,7 @@ | |||
10 | #include <linux/list.h> | 10 | #include <linux/list.h> |
11 | #include <linux/uaccess.h> | 11 | #include <linux/uaccess.h> |
12 | #include <linux/seq_file.h> | 12 | #include <linux/seq_file.h> |
13 | #include <linux/slab.h> | ||
13 | #include <linux/rcupdate.h> | 14 | #include <linux/rcupdate.h> |
14 | #include <linux/mutex.h> | 15 | #include <linux/mutex.h> |
15 | 16 | ||
diff --git a/security/inode.c b/security/inode.c index c3a793881d04..1c812e874504 100644 --- a/security/inode.c +++ b/security/inode.c | |||
@@ -161,13 +161,13 @@ static int create_by_name(const char *name, mode_t mode, | |||
161 | 161 | ||
162 | mutex_lock(&parent->d_inode->i_mutex); | 162 | mutex_lock(&parent->d_inode->i_mutex); |
163 | *dentry = lookup_one_len(name, parent, strlen(name)); | 163 | *dentry = lookup_one_len(name, parent, strlen(name)); |
164 | if (!IS_ERR(dentry)) { | 164 | if (!IS_ERR(*dentry)) { |
165 | if ((mode & S_IFMT) == S_IFDIR) | 165 | if ((mode & S_IFMT) == S_IFDIR) |
166 | error = mkdir(parent->d_inode, *dentry, mode); | 166 | error = mkdir(parent->d_inode, *dentry, mode); |
167 | else | 167 | else |
168 | error = create(parent->d_inode, *dentry, mode); | 168 | error = create(parent->d_inode, *dentry, mode); |
169 | } else | 169 | } else |
170 | error = PTR_ERR(dentry); | 170 | error = PTR_ERR(*dentry); |
171 | mutex_unlock(&parent->d_inode->i_mutex); | 171 | mutex_unlock(&parent->d_inode->i_mutex); |
172 | 172 | ||
173 | return error; | 173 | return error; |
diff --git a/security/integrity/ima/ima_api.c b/security/integrity/ima/ima_api.c index 2a5e0bcf3887..52015d098fdf 100644 --- a/security/integrity/ima/ima_api.c +++ b/security/integrity/ima/ima_api.c | |||
@@ -13,6 +13,7 @@ | |||
13 | * and store_template. | 13 | * and store_template. |
14 | */ | 14 | */ |
15 | #include <linux/module.h> | 15 | #include <linux/module.h> |
16 | #include <linux/slab.h> | ||
16 | 17 | ||
17 | #include "ima.h" | 18 | #include "ima.h" |
18 | static const char *IMA_TEMPLATE_NAME = "ima"; | 19 | static const char *IMA_TEMPLATE_NAME = "ima"; |
diff --git a/security/integrity/ima/ima_audit.c b/security/integrity/ima/ima_audit.c index ff513ff737f5..5af76340470c 100644 --- a/security/integrity/ima/ima_audit.c +++ b/security/integrity/ima/ima_audit.c | |||
@@ -11,6 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/fs.h> | 13 | #include <linux/fs.h> |
14 | #include <linux/gfp.h> | ||
14 | #include <linux/audit.h> | 15 | #include <linux/audit.h> |
15 | #include "ima.h" | 16 | #include "ima.h" |
16 | 17 | ||
diff --git a/security/integrity/ima/ima_crypto.c b/security/integrity/ima/ima_crypto.c index 46642a19bc78..952e51373f58 100644 --- a/security/integrity/ima/ima_crypto.c +++ b/security/integrity/ima/ima_crypto.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <linux/crypto.h> | 18 | #include <linux/crypto.h> |
19 | #include <linux/scatterlist.h> | 19 | #include <linux/scatterlist.h> |
20 | #include <linux/err.h> | 20 | #include <linux/err.h> |
21 | #include <linux/slab.h> | ||
21 | #include "ima.h" | 22 | #include "ima.h" |
22 | 23 | ||
23 | static int init_desc(struct hash_desc *desc) | 24 | static int init_desc(struct hash_desc *desc) |
diff --git a/security/integrity/ima/ima_fs.c b/security/integrity/ima/ima_fs.c index 0c72c9c38956..07cb9c338cc4 100644 --- a/security/integrity/ima/ima_fs.c +++ b/security/integrity/ima/ima_fs.c | |||
@@ -16,6 +16,7 @@ | |||
16 | * current measurement list and IMA statistics | 16 | * current measurement list and IMA statistics |
17 | */ | 17 | */ |
18 | #include <linux/fcntl.h> | 18 | #include <linux/fcntl.h> |
19 | #include <linux/slab.h> | ||
19 | #include <linux/module.h> | 20 | #include <linux/module.h> |
20 | #include <linux/seq_file.h> | 21 | #include <linux/seq_file.h> |
21 | #include <linux/rculist.h> | 22 | #include <linux/rculist.h> |
diff --git a/security/integrity/ima/ima_iint.c b/security/integrity/ima/ima_iint.c index 2d4d05d92fda..2c744d488014 100644 --- a/security/integrity/ima/ima_iint.c +++ b/security/integrity/ima/ima_iint.c | |||
@@ -14,6 +14,7 @@ | |||
14 | * - cache integrity information associated with an inode | 14 | * - cache integrity information associated with an inode |
15 | * using a radix tree. | 15 | * using a radix tree. |
16 | */ | 16 | */ |
17 | #include <linux/slab.h> | ||
17 | #include <linux/module.h> | 18 | #include <linux/module.h> |
18 | #include <linux/spinlock.h> | 19 | #include <linux/spinlock.h> |
19 | #include <linux/radix-tree.h> | 20 | #include <linux/radix-tree.h> |
diff --git a/security/integrity/ima/ima_init.c b/security/integrity/ima/ima_init.c index a40da7ae5900..b1bcb702a27c 100644 --- a/security/integrity/ima/ima_init.c +++ b/security/integrity/ima/ima_init.c | |||
@@ -16,6 +16,7 @@ | |||
16 | */ | 16 | */ |
17 | #include <linux/module.h> | 17 | #include <linux/module.h> |
18 | #include <linux/scatterlist.h> | 18 | #include <linux/scatterlist.h> |
19 | #include <linux/slab.h> | ||
19 | #include <linux/err.h> | 20 | #include <linux/err.h> |
20 | #include "ima.h" | 21 | #include "ima.h" |
21 | 22 | ||
diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index 294b005d6520..b2c89d9de2a4 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/binfmts.h> | 21 | #include <linux/binfmts.h> |
22 | #include <linux/mount.h> | 22 | #include <linux/mount.h> |
23 | #include <linux/mman.h> | 23 | #include <linux/mman.h> |
24 | #include <linux/slab.h> | ||
24 | 25 | ||
25 | #include "ima.h" | 26 | #include "ima.h" |
26 | 27 | ||
diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c index 4759d0f99335..8643a93c5963 100644 --- a/security/integrity/ima/ima_policy.c +++ b/security/integrity/ima/ima_policy.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/security.h> | 15 | #include <linux/security.h> |
16 | #include <linux/magic.h> | 16 | #include <linux/magic.h> |
17 | #include <linux/parser.h> | 17 | #include <linux/parser.h> |
18 | #include <linux/slab.h> | ||
18 | 19 | ||
19 | #include "ima.h" | 20 | #include "ima.h" |
20 | 21 | ||
diff --git a/security/integrity/ima/ima_queue.c b/security/integrity/ima/ima_queue.c index a0880e9c8e05..46ba62b1adf5 100644 --- a/security/integrity/ima/ima_queue.c +++ b/security/integrity/ima/ima_queue.c | |||
@@ -20,6 +20,7 @@ | |||
20 | */ | 20 | */ |
21 | #include <linux/module.h> | 21 | #include <linux/module.h> |
22 | #include <linux/rculist.h> | 22 | #include <linux/rculist.h> |
23 | #include <linux/slab.h> | ||
23 | #include "ima.h" | 24 | #include "ima.h" |
24 | 25 | ||
25 | LIST_HEAD(ima_measurements); /* list of all measurements */ | 26 | LIST_HEAD(ima_measurements); /* list of all measurements */ |
diff --git a/security/keys/gc.c b/security/keys/gc.c index 19902319d097..a46e825cbf02 100644 --- a/security/keys/gc.c +++ b/security/keys/gc.c | |||
@@ -77,10 +77,10 @@ static bool key_gc_keyring(struct key *keyring, time_t limit) | |||
77 | goto dont_gc; | 77 | goto dont_gc; |
78 | 78 | ||
79 | /* scan the keyring looking for dead keys */ | 79 | /* scan the keyring looking for dead keys */ |
80 | klist = rcu_dereference_check(keyring->payload.subscriptions, | 80 | rcu_read_lock(); |
81 | lockdep_is_held(&key_serial_lock)); | 81 | klist = rcu_dereference(keyring->payload.subscriptions); |
82 | if (!klist) | 82 | if (!klist) |
83 | goto dont_gc; | 83 | goto unlock_dont_gc; |
84 | 84 | ||
85 | for (loop = klist->nkeys - 1; loop >= 0; loop--) { | 85 | for (loop = klist->nkeys - 1; loop >= 0; loop--) { |
86 | key = klist->keys[loop]; | 86 | key = klist->keys[loop]; |
@@ -89,11 +89,14 @@ static bool key_gc_keyring(struct key *keyring, time_t limit) | |||
89 | goto do_gc; | 89 | goto do_gc; |
90 | } | 90 | } |
91 | 91 | ||
92 | unlock_dont_gc: | ||
93 | rcu_read_unlock(); | ||
92 | dont_gc: | 94 | dont_gc: |
93 | kleave(" = false"); | 95 | kleave(" = false"); |
94 | return false; | 96 | return false; |
95 | 97 | ||
96 | do_gc: | 98 | do_gc: |
99 | rcu_read_unlock(); | ||
97 | key_gc_cursor = keyring->serial; | 100 | key_gc_cursor = keyring->serial; |
98 | key_get(keyring); | 101 | key_get(keyring); |
99 | spin_unlock(&key_serial_lock); | 102 | spin_unlock(&key_serial_lock); |
diff --git a/security/keys/keyring.c b/security/keys/keyring.c index e814d2109f8e..1e4b0037935c 100644 --- a/security/keys/keyring.c +++ b/security/keys/keyring.c | |||
@@ -20,6 +20,11 @@ | |||
20 | #include <asm/uaccess.h> | 20 | #include <asm/uaccess.h> |
21 | #include "internal.h" | 21 | #include "internal.h" |
22 | 22 | ||
23 | #define rcu_dereference_locked_keyring(keyring) \ | ||
24 | (rcu_dereference_protected( \ | ||
25 | (keyring)->payload.subscriptions, \ | ||
26 | rwsem_is_locked((struct rw_semaphore *)&(keyring)->sem))) | ||
27 | |||
23 | /* | 28 | /* |
24 | * when plumbing the depths of the key tree, this sets a hard limit set on how | 29 | * when plumbing the depths of the key tree, this sets a hard limit set on how |
25 | * deep we're willing to go | 30 | * deep we're willing to go |
@@ -201,8 +206,7 @@ static long keyring_read(const struct key *keyring, | |||
201 | int loop, ret; | 206 | int loop, ret; |
202 | 207 | ||
203 | ret = 0; | 208 | ret = 0; |
204 | klist = rcu_dereference(keyring->payload.subscriptions); | 209 | klist = rcu_dereference_locked_keyring(keyring); |
205 | |||
206 | if (klist) { | 210 | if (klist) { |
207 | /* calculate how much data we could return */ | 211 | /* calculate how much data we could return */ |
208 | qty = klist->nkeys * sizeof(key_serial_t); | 212 | qty = klist->nkeys * sizeof(key_serial_t); |
@@ -526,9 +530,8 @@ struct key *find_keyring_by_name(const char *name, bool skip_perm_check) | |||
526 | struct key *keyring; | 530 | struct key *keyring; |
527 | int bucket; | 531 | int bucket; |
528 | 532 | ||
529 | keyring = ERR_PTR(-EINVAL); | ||
530 | if (!name) | 533 | if (!name) |
531 | goto error; | 534 | return ERR_PTR(-EINVAL); |
532 | 535 | ||
533 | bucket = keyring_hash(name); | 536 | bucket = keyring_hash(name); |
534 | 537 | ||
@@ -555,17 +558,18 @@ struct key *find_keyring_by_name(const char *name, bool skip_perm_check) | |||
555 | KEY_SEARCH) < 0) | 558 | KEY_SEARCH) < 0) |
556 | continue; | 559 | continue; |
557 | 560 | ||
558 | /* we've got a match */ | 561 | /* we've got a match but we might end up racing with |
559 | atomic_inc(&keyring->usage); | 562 | * key_cleanup() if the keyring is currently 'dead' |
560 | read_unlock(&keyring_name_lock); | 563 | * (ie. it has a zero usage count) */ |
561 | goto error; | 564 | if (!atomic_inc_not_zero(&keyring->usage)) |
565 | continue; | ||
566 | goto out; | ||
562 | } | 567 | } |
563 | } | 568 | } |
564 | 569 | ||
565 | read_unlock(&keyring_name_lock); | ||
566 | keyring = ERR_PTR(-ENOKEY); | 570 | keyring = ERR_PTR(-ENOKEY); |
567 | 571 | out: | |
568 | error: | 572 | read_unlock(&keyring_name_lock); |
569 | return keyring; | 573 | return keyring; |
570 | 574 | ||
571 | } /* end find_keyring_by_name() */ | 575 | } /* end find_keyring_by_name() */ |
@@ -720,8 +724,7 @@ int __key_link(struct key *keyring, struct key *key) | |||
720 | } | 724 | } |
721 | 725 | ||
722 | /* see if there's a matching key we can displace */ | 726 | /* see if there's a matching key we can displace */ |
723 | klist = keyring->payload.subscriptions; | 727 | klist = rcu_dereference_locked_keyring(keyring); |
724 | |||
725 | if (klist && klist->nkeys > 0) { | 728 | if (klist && klist->nkeys > 0) { |
726 | struct key_type *type = key->type; | 729 | struct key_type *type = key->type; |
727 | 730 | ||
@@ -765,8 +768,6 @@ int __key_link(struct key *keyring, struct key *key) | |||
765 | if (ret < 0) | 768 | if (ret < 0) |
766 | goto error2; | 769 | goto error2; |
767 | 770 | ||
768 | klist = keyring->payload.subscriptions; | ||
769 | |||
770 | if (klist && klist->nkeys < klist->maxkeys) { | 771 | if (klist && klist->nkeys < klist->maxkeys) { |
771 | /* there's sufficient slack space to add directly */ | 772 | /* there's sufficient slack space to add directly */ |
772 | atomic_inc(&key->usage); | 773 | atomic_inc(&key->usage); |
@@ -868,7 +869,7 @@ int key_unlink(struct key *keyring, struct key *key) | |||
868 | 869 | ||
869 | down_write(&keyring->sem); | 870 | down_write(&keyring->sem); |
870 | 871 | ||
871 | klist = keyring->payload.subscriptions; | 872 | klist = rcu_dereference_locked_keyring(keyring); |
872 | if (klist) { | 873 | if (klist) { |
873 | /* search the keyring for the key */ | 874 | /* search the keyring for the key */ |
874 | for (loop = 0; loop < klist->nkeys; loop++) | 875 | for (loop = 0; loop < klist->nkeys; loop++) |
@@ -959,7 +960,7 @@ int keyring_clear(struct key *keyring) | |||
959 | /* detach the pointer block with the locks held */ | 960 | /* detach the pointer block with the locks held */ |
960 | down_write(&keyring->sem); | 961 | down_write(&keyring->sem); |
961 | 962 | ||
962 | klist = keyring->payload.subscriptions; | 963 | klist = rcu_dereference_locked_keyring(keyring); |
963 | if (klist) { | 964 | if (klist) { |
964 | /* adjust the quota */ | 965 | /* adjust the quota */ |
965 | key_payload_reserve(keyring, | 966 | key_payload_reserve(keyring, |
@@ -991,7 +992,9 @@ EXPORT_SYMBOL(keyring_clear); | |||
991 | */ | 992 | */ |
992 | static void keyring_revoke(struct key *keyring) | 993 | static void keyring_revoke(struct key *keyring) |
993 | { | 994 | { |
994 | struct keyring_list *klist = keyring->payload.subscriptions; | 995 | struct keyring_list *klist; |
996 | |||
997 | klist = rcu_dereference_locked_keyring(keyring); | ||
995 | 998 | ||
996 | /* adjust the quota */ | 999 | /* adjust the quota */ |
997 | key_payload_reserve(keyring, 0); | 1000 | key_payload_reserve(keyring, 0); |
@@ -1025,7 +1028,7 @@ void keyring_gc(struct key *keyring, time_t limit) | |||
1025 | 1028 | ||
1026 | down_write(&keyring->sem); | 1029 | down_write(&keyring->sem); |
1027 | 1030 | ||
1028 | klist = keyring->payload.subscriptions; | 1031 | klist = rcu_dereference_locked_keyring(keyring); |
1029 | if (!klist) | 1032 | if (!klist) |
1030 | goto no_klist; | 1033 | goto no_klist; |
1031 | 1034 | ||
diff --git a/security/keys/proc.c b/security/keys/proc.c index 9d01021ca0c8..706d63f4f185 100644 --- a/security/keys/proc.c +++ b/security/keys/proc.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
15 | #include <linux/slab.h> | ||
16 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
17 | #include <linux/proc_fs.h> | 16 | #include <linux/proc_fs.h> |
18 | #include <linux/seq_file.h> | 17 | #include <linux/seq_file.h> |
diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c index 5c23afb31ece..06c2ccf26ed3 100644 --- a/security/keys/process_keys.c +++ b/security/keys/process_keys.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/init.h> | 13 | #include <linux/init.h> |
14 | #include <linux/sched.h> | 14 | #include <linux/sched.h> |
15 | #include <linux/slab.h> | ||
16 | #include <linux/keyctl.h> | 15 | #include <linux/keyctl.h> |
17 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
18 | #include <linux/err.h> | 17 | #include <linux/err.h> |
diff --git a/security/keys/request_key.c b/security/keys/request_key.c index 03fe63ed55bd..d8c1a6a0fb08 100644 --- a/security/keys/request_key.c +++ b/security/keys/request_key.c | |||
@@ -68,7 +68,8 @@ static int call_sbin_request_key(struct key_construction *cons, | |||
68 | { | 68 | { |
69 | const struct cred *cred = current_cred(); | 69 | const struct cred *cred = current_cred(); |
70 | key_serial_t prkey, sskey; | 70 | key_serial_t prkey, sskey; |
71 | struct key *key = cons->key, *authkey = cons->authkey, *keyring; | 71 | struct key *key = cons->key, *authkey = cons->authkey, *keyring, |
72 | *session; | ||
72 | char *argv[9], *envp[3], uid_str[12], gid_str[12]; | 73 | char *argv[9], *envp[3], uid_str[12], gid_str[12]; |
73 | char key_str[12], keyring_str[3][12]; | 74 | char key_str[12], keyring_str[3][12]; |
74 | char desc[20]; | 75 | char desc[20]; |
@@ -93,7 +94,7 @@ static int call_sbin_request_key(struct key_construction *cons, | |||
93 | } | 94 | } |
94 | 95 | ||
95 | /* attach the auth key to the session keyring */ | 96 | /* attach the auth key to the session keyring */ |
96 | ret = __key_link(keyring, authkey); | 97 | ret = key_link(keyring, authkey); |
97 | if (ret < 0) | 98 | if (ret < 0) |
98 | goto error_link; | 99 | goto error_link; |
99 | 100 | ||
@@ -112,10 +113,12 @@ static int call_sbin_request_key(struct key_construction *cons, | |||
112 | if (cred->tgcred->process_keyring) | 113 | if (cred->tgcred->process_keyring) |
113 | prkey = cred->tgcred->process_keyring->serial; | 114 | prkey = cred->tgcred->process_keyring->serial; |
114 | 115 | ||
115 | if (cred->tgcred->session_keyring) | 116 | rcu_read_lock(); |
116 | sskey = rcu_dereference(cred->tgcred->session_keyring)->serial; | 117 | session = rcu_dereference(cred->tgcred->session_keyring); |
117 | else | 118 | if (!session) |
118 | sskey = cred->user->session_keyring->serial; | 119 | session = cred->user->session_keyring; |
120 | sskey = session->serial; | ||
121 | rcu_read_unlock(); | ||
119 | 122 | ||
120 | sprintf(keyring_str[2], "%d", sskey); | 123 | sprintf(keyring_str[2], "%d", sskey); |
121 | 124 | ||
@@ -336,8 +339,10 @@ static int construct_alloc_key(struct key_type *type, | |||
336 | 339 | ||
337 | key_already_present: | 340 | key_already_present: |
338 | mutex_unlock(&key_construction_mutex); | 341 | mutex_unlock(&key_construction_mutex); |
339 | if (dest_keyring) | 342 | if (dest_keyring) { |
343 | __key_link(dest_keyring, key_ref_to_ptr(key_ref)); | ||
340 | up_write(&dest_keyring->sem); | 344 | up_write(&dest_keyring->sem); |
345 | } | ||
341 | mutex_unlock(&user->cons_lock); | 346 | mutex_unlock(&user->cons_lock); |
342 | key_put(key); | 347 | key_put(key); |
343 | *_key = key = key_ref_to_ptr(key_ref); | 348 | *_key = key = key_ref_to_ptr(key_ref); |
@@ -428,6 +433,11 @@ struct key *request_key_and_link(struct key_type *type, | |||
428 | 433 | ||
429 | if (!IS_ERR(key_ref)) { | 434 | if (!IS_ERR(key_ref)) { |
430 | key = key_ref_to_ptr(key_ref); | 435 | key = key_ref_to_ptr(key_ref); |
436 | if (dest_keyring) { | ||
437 | construct_get_dest_keyring(&dest_keyring); | ||
438 | key_link(dest_keyring, key); | ||
439 | key_put(dest_keyring); | ||
440 | } | ||
431 | } else if (PTR_ERR(key_ref) != -EAGAIN) { | 441 | } else if (PTR_ERR(key_ref) != -EAGAIN) { |
432 | key = ERR_CAST(key_ref); | 442 | key = ERR_CAST(key_ref); |
433 | } else { | 443 | } else { |
diff --git a/security/keys/user_defined.c b/security/keys/user_defined.c index 7c687d568221..e9aa07929656 100644 --- a/security/keys/user_defined.c +++ b/security/keys/user_defined.c | |||
@@ -199,7 +199,8 @@ long user_read(const struct key *key, char __user *buffer, size_t buflen) | |||
199 | struct user_key_payload *upayload; | 199 | struct user_key_payload *upayload; |
200 | long ret; | 200 | long ret; |
201 | 201 | ||
202 | upayload = rcu_dereference(key->payload.data); | 202 | upayload = rcu_dereference_protected( |
203 | key->payload.data, rwsem_is_locked(&((struct key *)key)->sem)); | ||
203 | ret = upayload->datalen; | 204 | ret = upayload->datalen; |
204 | 205 | ||
205 | /* we can return the data as is */ | 206 | /* we can return the data as is */ |
diff --git a/security/lsm_audit.c b/security/lsm_audit.c index acba3dfc8d29..893365b79a29 100644 --- a/security/lsm_audit.c +++ b/security/lsm_audit.c | |||
@@ -14,6 +14,7 @@ | |||
14 | #include <linux/types.h> | 14 | #include <linux/types.h> |
15 | #include <linux/stddef.h> | 15 | #include <linux/stddef.h> |
16 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
17 | #include <linux/gfp.h> | ||
17 | #include <linux/fs.h> | 18 | #include <linux/fs.h> |
18 | #include <linux/init.h> | 19 | #include <linux/init.h> |
19 | #include <net/sock.h> | 20 | #include <net/sock.h> |
diff --git a/security/min_addr.c b/security/min_addr.c index e86f297522bf..f728728f193b 100644 --- a/security/min_addr.c +++ b/security/min_addr.c | |||
@@ -33,7 +33,7 @@ int mmap_min_addr_handler(struct ctl_table *table, int write, | |||
33 | { | 33 | { |
34 | int ret; | 34 | int ret; |
35 | 35 | ||
36 | if (!capable(CAP_SYS_RAWIO)) | 36 | if (write && !capable(CAP_SYS_RAWIO)) |
37 | return -EPERM; | 37 | return -EPERM; |
38 | 38 | ||
39 | ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos); | 39 | ret = proc_doulongvec_minmax(table, write, buffer, lenp, ppos); |
diff --git a/security/selinux/netif.c b/security/selinux/netif.c index b4e14bc0bf32..d6095d63d831 100644 --- a/security/selinux/netif.c +++ b/security/selinux/netif.c | |||
@@ -16,6 +16,7 @@ | |||
16 | */ | 16 | */ |
17 | #include <linux/init.h> | 17 | #include <linux/init.h> |
18 | #include <linux/types.h> | 18 | #include <linux/types.h> |
19 | #include <linux/slab.h> | ||
19 | #include <linux/stddef.h> | 20 | #include <linux/stddef.h> |
20 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
21 | #include <linux/list.h> | 22 | #include <linux/list.h> |
diff --git a/security/selinux/netlabel.c b/security/selinux/netlabel.c index 2534400317c5..628da72ee763 100644 --- a/security/selinux/netlabel.c +++ b/security/selinux/netlabel.c | |||
@@ -29,6 +29,7 @@ | |||
29 | 29 | ||
30 | #include <linux/spinlock.h> | 30 | #include <linux/spinlock.h> |
31 | #include <linux/rcupdate.h> | 31 | #include <linux/rcupdate.h> |
32 | #include <linux/gfp.h> | ||
32 | #include <linux/ip.h> | 33 | #include <linux/ip.h> |
33 | #include <linux/ipv6.h> | 34 | #include <linux/ipv6.h> |
34 | #include <net/sock.h> | 35 | #include <net/sock.h> |
diff --git a/security/selinux/netlink.c b/security/selinux/netlink.c index 1ae556446e65..0e147b6914ad 100644 --- a/security/selinux/netlink.c +++ b/security/selinux/netlink.c | |||
@@ -11,6 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | #include <linux/init.h> | 12 | #include <linux/init.h> |
13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
14 | #include <linux/slab.h> | ||
14 | #include <linux/stddef.h> | 15 | #include <linux/stddef.h> |
15 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
16 | #include <linux/list.h> | 17 | #include <linux/list.h> |
diff --git a/security/selinux/netnode.c b/security/selinux/netnode.c index 7100072bb1b0..dc92792271f1 100644 --- a/security/selinux/netnode.c +++ b/security/selinux/netnode.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <linux/types.h> | 31 | #include <linux/types.h> |
32 | #include <linux/rcupdate.h> | 32 | #include <linux/rcupdate.h> |
33 | #include <linux/list.h> | 33 | #include <linux/list.h> |
34 | #include <linux/slab.h> | ||
34 | #include <linux/spinlock.h> | 35 | #include <linux/spinlock.h> |
35 | #include <linux/in.h> | 36 | #include <linux/in.h> |
36 | #include <linux/in6.h> | 37 | #include <linux/in6.h> |
diff --git a/security/selinux/netport.c b/security/selinux/netport.c index fe7fba67f19f..cfe2d72d3fb7 100644 --- a/security/selinux/netport.c +++ b/security/selinux/netport.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/types.h> | 30 | #include <linux/types.h> |
31 | #include <linux/rcupdate.h> | 31 | #include <linux/rcupdate.h> |
32 | #include <linux/list.h> | 32 | #include <linux/list.h> |
33 | #include <linux/slab.h> | ||
33 | #include <linux/spinlock.h> | 34 | #include <linux/spinlock.h> |
34 | #include <linux/in.h> | 35 | #include <linux/in.h> |
35 | #include <linux/in6.h> | 36 | #include <linux/in6.h> |
diff --git a/security/selinux/ss/avtab.h b/security/selinux/ss/avtab.h index 8da6a8428086..cd4f734e2749 100644 --- a/security/selinux/ss/avtab.h +++ b/security/selinux/ss/avtab.h | |||
@@ -82,7 +82,7 @@ struct avtab_node *avtab_search_node_next(struct avtab_node *node, int specified | |||
82 | void avtab_cache_init(void); | 82 | void avtab_cache_init(void); |
83 | void avtab_cache_destroy(void); | 83 | void avtab_cache_destroy(void); |
84 | 84 | ||
85 | #define MAX_AVTAB_HASH_BITS 13 | 85 | #define MAX_AVTAB_HASH_BITS 11 |
86 | #define MAX_AVTAB_HASH_BUCKETS (1 << MAX_AVTAB_HASH_BITS) | 86 | #define MAX_AVTAB_HASH_BUCKETS (1 << MAX_AVTAB_HASH_BITS) |
87 | #define MAX_AVTAB_HASH_MASK (MAX_AVTAB_HASH_BUCKETS-1) | 87 | #define MAX_AVTAB_HASH_MASK (MAX_AVTAB_HASH_BUCKETS-1) |
88 | #define MAX_AVTAB_SIZE MAX_AVTAB_HASH_BUCKETS | 88 | #define MAX_AVTAB_SIZE MAX_AVTAB_HASH_BUCKETS |
diff --git a/security/selinux/ss/symtab.c b/security/selinux/ss/symtab.c index 837658a98a54..bcf9f620426e 100644 --- a/security/selinux/ss/symtab.c +++ b/security/selinux/ss/symtab.c | |||
@@ -4,7 +4,6 @@ | |||
4 | * Author : Stephen Smalley, <sds@epoch.ncsc.mil> | 4 | * Author : Stephen Smalley, <sds@epoch.ncsc.mil> |
5 | */ | 5 | */ |
6 | #include <linux/kernel.h> | 6 | #include <linux/kernel.h> |
7 | #include <linux/slab.h> | ||
8 | #include <linux/string.h> | 7 | #include <linux/string.h> |
9 | #include <linux/errno.h> | 8 | #include <linux/errno.h> |
10 | #include "symtab.h" | 9 | #include "symtab.h" |
diff --git a/security/selinux/xfrm.c b/security/selinux/xfrm.c index f3cb9ed731a9..fff78d3b51a2 100644 --- a/security/selinux/xfrm.c +++ b/security/selinux/xfrm.c | |||
@@ -38,6 +38,7 @@ | |||
38 | #include <linux/netfilter.h> | 38 | #include <linux/netfilter.h> |
39 | #include <linux/netfilter_ipv4.h> | 39 | #include <linux/netfilter_ipv4.h> |
40 | #include <linux/netfilter_ipv6.h> | 40 | #include <linux/netfilter_ipv6.h> |
41 | #include <linux/slab.h> | ||
41 | #include <linux/ip.h> | 42 | #include <linux/ip.h> |
42 | #include <linux/tcp.h> | 43 | #include <linux/tcp.h> |
43 | #include <linux/skbuff.h> | 44 | #include <linux/skbuff.h> |
diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c index 0f9ac8146900..f4fac64c4da8 100644 --- a/security/smack/smack_access.c +++ b/security/smack/smack_access.c | |||
@@ -11,6 +11,7 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/types.h> | 13 | #include <linux/types.h> |
14 | #include <linux/slab.h> | ||
14 | #include <linux/fs.h> | 15 | #include <linux/fs.h> |
15 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
16 | #include "smack.h" | 17 | #include "smack.h" |
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index 5225e668dbf0..fdfeaa2f28ec 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/ip.h> | 25 | #include <linux/ip.h> |
26 | #include <linux/tcp.h> | 26 | #include <linux/tcp.h> |
27 | #include <linux/udp.h> | 27 | #include <linux/udp.h> |
28 | #include <linux/slab.h> | ||
28 | #include <linux/mutex.h> | 29 | #include <linux/mutex.h> |
29 | #include <linux/pipe_fs_i.h> | 30 | #include <linux/pipe_fs_i.h> |
30 | #include <net/netlabel.h> | 31 | #include <net/netlabel.h> |
diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c index aeead7585093..a2b72d77f926 100644 --- a/security/smack/smackfs.c +++ b/security/smack/smackfs.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/vmalloc.h> | 20 | #include <linux/vmalloc.h> |
21 | #include <linux/security.h> | 21 | #include <linux/security.h> |
22 | #include <linux/mutex.h> | 22 | #include <linux/mutex.h> |
23 | #include <linux/slab.h> | ||
23 | #include <net/net_namespace.h> | 24 | #include <net/net_namespace.h> |
24 | #include <net/netlabel.h> | 25 | #include <net/netlabel.h> |
25 | #include <net/cipso_ipv4.h> | 26 | #include <net/cipso_ipv4.h> |
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c index ef89947a774b..975c45d88baa 100644 --- a/security/tomoyo/common.c +++ b/security/tomoyo/common.c | |||
@@ -10,6 +10,7 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/uaccess.h> | 12 | #include <linux/uaccess.h> |
13 | #include <linux/slab.h> | ||
13 | #include <linux/security.h> | 14 | #include <linux/security.h> |
14 | #include <linux/hardirq.h> | 15 | #include <linux/hardirq.h> |
15 | #include "common.h" | 16 | #include "common.h" |
diff --git a/security/tomoyo/domain.c b/security/tomoyo/domain.c index 66caaa1b842a..acb8c397d5cf 100644 --- a/security/tomoyo/domain.c +++ b/security/tomoyo/domain.c | |||
@@ -11,6 +11,7 @@ | |||
11 | 11 | ||
12 | #include "common.h" | 12 | #include "common.h" |
13 | #include <linux/binfmts.h> | 13 | #include <linux/binfmts.h> |
14 | #include <linux/slab.h> | ||
14 | 15 | ||
15 | /* Variables definitions.*/ | 16 | /* Variables definitions.*/ |
16 | 17 | ||
diff --git a/security/tomoyo/file.c b/security/tomoyo/file.c index 1b24304edb7d..6f3fe76a1fde 100644 --- a/security/tomoyo/file.c +++ b/security/tomoyo/file.c | |||
@@ -10,6 +10,7 @@ | |||
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include "common.h" | 12 | #include "common.h" |
13 | #include <linux/slab.h> | ||
13 | 14 | ||
14 | /* Keyword array for single path operations. */ | 15 | /* Keyword array for single path operations. */ |
15 | static const char *tomoyo_path_keyword[TOMOYO_MAX_PATH_OPERATION] = { | 16 | static const char *tomoyo_path_keyword[TOMOYO_MAX_PATH_OPERATION] = { |
diff --git a/security/tomoyo/gc.c b/security/tomoyo/gc.c index 9645525ccdd4..d9ad35bc7fa8 100644 --- a/security/tomoyo/gc.c +++ b/security/tomoyo/gc.c | |||
@@ -9,6 +9,7 @@ | |||
9 | 9 | ||
10 | #include "common.h" | 10 | #include "common.h" |
11 | #include <linux/kthread.h> | 11 | #include <linux/kthread.h> |
12 | #include <linux/slab.h> | ||
12 | 13 | ||
13 | enum tomoyo_gc_id { | 14 | enum tomoyo_gc_id { |
14 | TOMOYO_ID_DOMAIN_INITIALIZER, | 15 | TOMOYO_ID_DOMAIN_INITIALIZER, |
diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c index cf7d61f781b9..c225c65ce426 100644 --- a/security/tomoyo/realpath.c +++ b/security/tomoyo/realpath.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/fs_struct.h> | 15 | #include <linux/fs_struct.h> |
16 | #include <linux/hash.h> | 16 | #include <linux/hash.h> |
17 | #include <linux/magic.h> | 17 | #include <linux/magic.h> |
18 | #include <linux/slab.h> | ||
18 | #include "common.h" | 19 | #include "common.h" |
19 | 20 | ||
20 | /** | 21 | /** |