aboutsummaryrefslogtreecommitdiffstats
path: root/security
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 18:18:57 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 18:18:57 -0400
commitc82ffab9a857f8286ed2b559624b7005a367b638 (patch)
treea5d0895a0b55c2db1bf36f517ca273e7e0abdf71 /security
parenta724eada8c2a7b62463b73ccf73fd0bb6e928aeb (diff)
parent5224ee086321fec78970e2f2805892d2b34e8957 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris/security-testing-2.6: SELinux: do not destroy the avc_cache_nodep KEYS: Have the garbage collector set its timer for live expired keys tpm-fixup-pcrs-sysfs-file-update creds_are_invalid() needs to be exported for use by modules: include/linux/cred.h: fix build Fix trivial BUILD_BUG_ON-induced conflicts in drivers/char/tpm/tpm.c
Diffstat (limited to 'security')
-rw-r--r--security/keys/gc.c4
-rw-r--r--security/selinux/avc.c19
2 files changed, 17 insertions, 6 deletions
diff --git a/security/keys/gc.c b/security/keys/gc.c
index 485fc6233c38..4770be375ffe 100644
--- a/security/keys/gc.c
+++ b/security/keys/gc.c
@@ -169,9 +169,9 @@ static void key_garbage_collector(struct work_struct *work)
169 169
170 /* trawl through the keys looking for keyrings */ 170 /* trawl through the keys looking for keyrings */
171 for (;;) { 171 for (;;) {
172 if (key->expiry > now && key->expiry < new_timer) { 172 if (key->expiry > limit && key->expiry < new_timer) {
173 kdebug("will expire %x in %ld", 173 kdebug("will expire %x in %ld",
174 key_serial(key), key->expiry - now); 174 key_serial(key), key->expiry - limit);
175 new_timer = key->expiry; 175 new_timer = key->expiry;
176 } 176 }
177 177
diff --git a/security/selinux/avc.c b/security/selinux/avc.c
index 1ed0f076aadc..b4b5da1c0a42 100644
--- a/security/selinux/avc.c
+++ b/security/selinux/avc.c
@@ -868,8 +868,19 @@ u32 avc_policy_seqno(void)
868 868
869void avc_disable(void) 869void avc_disable(void)
870{ 870{
871 avc_flush(); 871 /*
872 synchronize_rcu(); 872 * If you are looking at this because you have realized that we are
873 if (avc_node_cachep) 873 * not destroying the avc_node_cachep it might be easy to fix, but
874 kmem_cache_destroy(avc_node_cachep); 874 * I don't know the memory barrier semantics well enough to know. It's
875 * possible that some other task dereferenced security_ops when
876 * it still pointed to selinux operations. If that is the case it's
877 * possible that it is about to use the avc and is about to need the
878 * avc_node_cachep. I know I could wrap the security.c security_ops call
879 * in an rcu_lock, but seriously, it's not worth it. Instead I just flush
880 * the cache and get that memory back.
881 */
882 if (avc_node_cachep) {
883 avc_flush();
884 /* kmem_cache_destroy(avc_node_cachep); */
885 }
875} 886}