diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 18:18:57 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 18:18:57 -0400 |
commit | c82ffab9a857f8286ed2b559624b7005a367b638 (patch) | |
tree | a5d0895a0b55c2db1bf36f517ca273e7e0abdf71 /security | |
parent | a724eada8c2a7b62463b73ccf73fd0bb6e928aeb (diff) | |
parent | 5224ee086321fec78970e2f2805892d2b34e8957 (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.c | 4 | ||||
-rw-r--r-- | security/selinux/avc.c | 19 |
2 files changed, 17 insertions, 6 deletions
diff --git a/security/keys/gc.c b/security/keys/gc.c index 485fc6233c3..4770be375ff 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 1ed0f076aad..b4b5da1c0a4 100644 --- a/security/selinux/avc.c +++ b/security/selinux/avc.c | |||
@@ -868,8 +868,19 @@ u32 avc_policy_seqno(void) | |||
868 | 868 | ||
869 | void avc_disable(void) | 869 | void 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 | } |