diff options
Diffstat (limited to 'net/netlabel/netlabel_mgmt.c')
-rw-r--r-- | net/netlabel/netlabel_mgmt.c | 65 |
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 */ | ||
46 | static DEFINE_SPINLOCK(netlabel_mgmt_protocount_lock); | ||
47 | static u32 netlabel_mgmt_protocount = 0; | ||
48 | |||
45 | /* Argument struct for netlbl_domhsh_walk() */ | 49 | /* Argument struct for netlbl_domhsh_walk() */ |
46 | struct netlbl_domhsh_walk_arg { | 50 | struct 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 | */ | ||
86 | void 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 | */ | ||
104 | void 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 | */ | ||
123 | u32 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 | ||