aboutsummaryrefslogtreecommitdiffstats
path: root/net/netlabel/netlabel_mgmt.c
diff options
context:
space:
mode:
authorPaul Moore <paul.moore@hp.com>2007-07-18 12:28:45 -0400
committerJames Morris <jmorris@namei.org>2007-07-19 10:21:11 -0400
commit23bcdc1adebd3cb47d5666f2e9ecada95c0134e4 (patch)
tree71caf0ac9fa86e4a9cf423d968a2486656c2e196 /net/netlabel/netlabel_mgmt.c
parent589f1e81bde732dd0b1bc5d01b6bddd4bcb4527b (diff)
SELinux: enable dynamic activation/deactivation of NetLabel/SELinux enforcement
Create a new NetLabel KAPI interface, netlbl_enabled(), which reports on the current runtime status of NetLabel based on the existing configuration. LSMs that make use of NetLabel, i.e. SELinux, can use this new function to determine if they should perform NetLabel access checks. This patch changes the NetLabel/SELinux glue code such that SELinux only enforces NetLabel related access checks when netlbl_enabled() returns true. At present NetLabel is considered to be enabled when there is at least one labeled protocol configuration present. The result is that by default NetLabel is considered to be disabled, however, as soon as an administrator configured a CIPSO DOI definition NetLabel is enabled and SELinux starts enforcing NetLabel related access controls - including unlabeled packet controls. This patch also tries to consolidate the multiple "#ifdef CONFIG_NETLABEL" blocks into a single block to ease future review as recommended by Linus. Signed-off-by: Paul Moore <paul.moore@hp.com> Signed-off-by: James Morris <jmorris@namei.org>
Diffstat (limited to 'net/netlabel/netlabel_mgmt.c')
-rw-r--r--net/netlabel/netlabel_mgmt.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/net/netlabel/netlabel_mgmt.c b/net/netlabel/netlabel_mgmt.c
index e00fc219c72b..5315dacc5222 100644
--- a/net/netlabel/netlabel_mgmt.c
+++ b/net/netlabel/netlabel_mgmt.c
@@ -42,6 +42,10 @@
42#include "netlabel_user.h" 42#include "netlabel_user.h"
43#include "netlabel_mgmt.h" 43#include "netlabel_mgmt.h"
44 44
45/* NetLabel configured protocol count */
46static DEFINE_SPINLOCK(netlabel_mgmt_protocount_lock);
47static u32 netlabel_mgmt_protocount = 0;
48
45/* Argument struct for netlbl_domhsh_walk() */ 49/* Argument struct for netlbl_domhsh_walk() */
46struct netlbl_domhsh_walk_arg { 50struct netlbl_domhsh_walk_arg {
47 struct netlink_callback *nl_cb; 51 struct netlink_callback *nl_cb;
@@ -67,6 +71,67 @@ static const struct nla_policy netlbl_mgmt_genl_policy[NLBL_MGMT_A_MAX + 1] = {
67}; 71};
68 72
69/* 73/*
74 * NetLabel Misc Managment Functions
75 */
76
77/**
78 * netlbl_mgmt_protocount_inc - Increment the configured labeled protocol count
79 *
80 * Description:
81 * Increment the number of labeled protocol configurations in the current
82 * NetLabel configuration. Keep track of this for use in determining if
83 * NetLabel label enforcement should be active/enabled or not in the LSM.
84 *
85 */
86void netlbl_mgmt_protocount_inc(void)
87{
88 rcu_read_lock();
89 spin_lock(&netlabel_mgmt_protocount_lock);
90 netlabel_mgmt_protocount++;
91 spin_unlock(&netlabel_mgmt_protocount_lock);
92 rcu_read_unlock();
93}
94
95/**
96 * netlbl_mgmt_protocount_dec - Decrement the configured labeled protocol count
97 *
98 * Description:
99 * Decrement the number of labeled protocol configurations in the current
100 * NetLabel configuration. Keep track of this for use in determining if
101 * NetLabel label enforcement should be active/enabled or not in the LSM.
102 *
103 */
104void netlbl_mgmt_protocount_dec(void)
105{
106 rcu_read_lock();
107 spin_lock(&netlabel_mgmt_protocount_lock);
108 if (netlabel_mgmt_protocount > 0)
109 netlabel_mgmt_protocount--;
110 spin_unlock(&netlabel_mgmt_protocount_lock);
111 rcu_read_unlock();
112}
113
114/**
115 * netlbl_mgmt_protocount_value - Return the number of configured protocols
116 *
117 * Description:
118 * Return the number of labeled protocols in the current NetLabel
119 * configuration. This value is useful in determining if NetLabel label
120 * enforcement should be active/enabled or not in the LSM.
121 *
122 */
123u32 netlbl_mgmt_protocount_value(void)
124{
125 u32 val;
126
127 rcu_read_lock();
128 val = netlabel_mgmt_protocount;
129 rcu_read_unlock();
130
131 return val;
132}
133
134/*
70 * NetLabel Command Handlers 135 * NetLabel Command Handlers
71 */ 136 */
72 137