diff options
| author | Thomas Liu <tliu@redhat.com> | 2009-06-24 17:58:05 -0400 |
|---|---|---|
| committer | James Morris <jmorris@namei.org> | 2009-06-24 18:29:16 -0400 |
| commit | 89c86576ecde504da1eeb4f4882b2189ac2f9c4a (patch) | |
| tree | 94674a48becd9cfde298e9fe6b58db8da28fe238 /security | |
| parent | a893a84e8799270fbec5c3708d001650aab47138 (diff) | |
selinux: clean up avc node cache when disabling selinux
Added a call to free the avc_node_cache when inside selinux_disable because
it should not waste resources allocated during avc_init if SELinux is disabled
and the cache will never be used.
Signed-off-by: Thomas Liu <tliu@redhat.com>
Acked-by: Eric Paris <eparis@redhat.com>
Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'security')
| -rw-r--r-- | security/selinux/avc.c | 6 | ||||
| -rw-r--r-- | security/selinux/hooks.c | 3 | ||||
| -rw-r--r-- | security/selinux/include/avc.h | 3 |
3 files changed, 12 insertions, 0 deletions
diff --git a/security/selinux/avc.c b/security/selinux/avc.c index 7823e84dbe8d..236aaa2ea86d 100644 --- a/security/selinux/avc.c +++ b/security/selinux/avc.c | |||
| @@ -970,3 +970,9 @@ u32 avc_policy_seqno(void) | |||
| 970 | { | 970 | { |
| 971 | return avc_cache.latest_notif; | 971 | return avc_cache.latest_notif; |
| 972 | } | 972 | } |
| 973 | |||
| 974 | void avc_disable(void) | ||
| 975 | { | ||
| 976 | if (avc_node_cachep) | ||
| 977 | kmem_cache_destroy(avc_node_cachep); | ||
| 978 | } | ||
diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c index e3b4f3083dd7..2081055f6783 100644 --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c | |||
| @@ -5683,6 +5683,9 @@ int selinux_disable(void) | |||
| 5683 | selinux_disabled = 1; | 5683 | selinux_disabled = 1; |
| 5684 | selinux_enabled = 0; | 5684 | selinux_enabled = 0; |
| 5685 | 5685 | ||
| 5686 | /* Try to destroy the avc node cache */ | ||
| 5687 | avc_disable(); | ||
| 5688 | |||
| 5686 | /* Reset security_ops to the secondary module, dummy or capability. */ | 5689 | /* Reset security_ops to the secondary module, dummy or capability. */ |
| 5687 | security_ops = secondary_ops; | 5690 | security_ops = secondary_ops; |
| 5688 | 5691 | ||
diff --git a/security/selinux/include/avc.h b/security/selinux/include/avc.h index 46a940d9af67..ae4c3a0e2c1a 100644 --- a/security/selinux/include/avc.h +++ b/security/selinux/include/avc.h | |||
| @@ -131,6 +131,9 @@ int avc_add_callback(int (*callback)(u32 event, u32 ssid, u32 tsid, | |||
| 131 | int avc_get_hash_stats(char *page); | 131 | int avc_get_hash_stats(char *page); |
| 132 | extern unsigned int avc_cache_threshold; | 132 | extern unsigned int avc_cache_threshold; |
| 133 | 133 | ||
| 134 | /* Attempt to free avc node cache */ | ||
| 135 | void avc_disable(void); | ||
| 136 | |||
| 134 | #ifdef CONFIG_SECURITY_SELINUX_AVC_STATS | 137 | #ifdef CONFIG_SECURITY_SELINUX_AVC_STATS |
| 135 | DECLARE_PER_CPU(struct avc_cache_stats, avc_cache_stats); | 138 | DECLARE_PER_CPU(struct avc_cache_stats, avc_cache_stats); |
| 136 | #endif | 139 | #endif |
