diff options
Diffstat (limited to 'security/smack/smack.h')
-rw-r--r-- | security/smack/smack.h | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/security/smack/smack.h b/security/smack/smack.h index 244e035e5a99..fff0c612bbb7 100644 --- a/security/smack/smack.h +++ b/security/smack/smack.h | |||
@@ -17,12 +17,27 @@ | |||
17 | #include <linux/spinlock.h> | 17 | #include <linux/spinlock.h> |
18 | #include <linux/lsm_hooks.h> | 18 | #include <linux/lsm_hooks.h> |
19 | #include <linux/in.h> | 19 | #include <linux/in.h> |
20 | #if IS_ENABLED(CONFIG_IPV6) | ||
21 | #include <linux/in6.h> | ||
22 | #endif /* CONFIG_IPV6 */ | ||
20 | #include <net/netlabel.h> | 23 | #include <net/netlabel.h> |
21 | #include <linux/list.h> | 24 | #include <linux/list.h> |
22 | #include <linux/rculist.h> | 25 | #include <linux/rculist.h> |
23 | #include <linux/lsm_audit.h> | 26 | #include <linux/lsm_audit.h> |
24 | 27 | ||
25 | /* | 28 | /* |
29 | * Use IPv6 port labeling if IPv6 is enabled and secmarks | ||
30 | * are not being used. | ||
31 | */ | ||
32 | #if IS_ENABLED(CONFIG_IPV6) && !defined(CONFIG_SECURITY_SMACK_NETFILTER) | ||
33 | #define SMACK_IPV6_PORT_LABELING 1 | ||
34 | #endif | ||
35 | |||
36 | #if IS_ENABLED(CONFIG_IPV6) && defined(CONFIG_SECURITY_SMACK_NETFILTER) | ||
37 | #define SMACK_IPV6_SECMARK_LABELING 1 | ||
38 | #endif | ||
39 | |||
40 | /* | ||
26 | * Smack labels were limited to 23 characters for a long time. | 41 | * Smack labels were limited to 23 characters for a long time. |
27 | */ | 42 | */ |
28 | #define SMK_LABELLEN 24 | 43 | #define SMK_LABELLEN 24 |
@@ -118,15 +133,30 @@ struct smack_rule { | |||
118 | }; | 133 | }; |
119 | 134 | ||
120 | /* | 135 | /* |
121 | * An entry in the table identifying hosts. | 136 | * An entry in the table identifying IPv4 hosts. |
122 | */ | 137 | */ |
123 | struct smk_netlbladdr { | 138 | struct smk_net4addr { |
124 | struct list_head list; | 139 | struct list_head list; |
125 | struct sockaddr_in smk_host; /* network address */ | 140 | struct in_addr smk_host; /* network address */ |
126 | struct in_addr smk_mask; /* network mask */ | 141 | struct in_addr smk_mask; /* network mask */ |
142 | int smk_masks; /* mask size */ | ||
143 | struct smack_known *smk_label; /* label */ | ||
144 | }; | ||
145 | |||
146 | #if IS_ENABLED(CONFIG_IPV6) | ||
147 | /* | ||
148 | * An entry in the table identifying IPv6 hosts. | ||
149 | */ | ||
150 | struct smk_net6addr { | ||
151 | struct list_head list; | ||
152 | struct in6_addr smk_host; /* network address */ | ||
153 | struct in6_addr smk_mask; /* network mask */ | ||
154 | int smk_masks; /* mask size */ | ||
127 | struct smack_known *smk_label; /* label */ | 155 | struct smack_known *smk_label; /* label */ |
128 | }; | 156 | }; |
157 | #endif /* CONFIG_IPV6 */ | ||
129 | 158 | ||
159 | #ifdef SMACK_IPV6_PORT_LABELING | ||
130 | /* | 160 | /* |
131 | * An entry in the table identifying ports. | 161 | * An entry in the table identifying ports. |
132 | */ | 162 | */ |
@@ -137,12 +167,31 @@ struct smk_port_label { | |||
137 | struct smack_known *smk_in; /* inbound label */ | 167 | struct smack_known *smk_in; /* inbound label */ |
138 | struct smack_known *smk_out; /* outgoing label */ | 168 | struct smack_known *smk_out; /* outgoing label */ |
139 | }; | 169 | }; |
170 | #endif /* SMACK_IPV6_PORT_LABELING */ | ||
140 | 171 | ||
141 | struct smack_onlycap { | 172 | struct smack_onlycap { |
142 | struct list_head list; | 173 | struct list_head list; |
143 | struct smack_known *smk_label; | 174 | struct smack_known *smk_label; |
144 | }; | 175 | }; |
145 | 176 | ||
177 | /* Super block security struct flags for mount options */ | ||
178 | #define FSDEFAULT_MNT 0x01 | ||
179 | #define FSFLOOR_MNT 0x02 | ||
180 | #define FSHAT_MNT 0x04 | ||
181 | #define FSROOT_MNT 0x08 | ||
182 | #define FSTRANS_MNT 0x10 | ||
183 | |||
184 | #define NUM_SMK_MNT_OPTS 5 | ||
185 | |||
186 | enum { | ||
187 | Opt_error = -1, | ||
188 | Opt_fsdefault = 1, | ||
189 | Opt_fsfloor = 2, | ||
190 | Opt_fshat = 3, | ||
191 | Opt_fsroot = 4, | ||
192 | Opt_fstransmute = 5, | ||
193 | }; | ||
194 | |||
146 | /* | 195 | /* |
147 | * Mount options | 196 | * Mount options |
148 | */ | 197 | */ |
@@ -152,6 +201,7 @@ struct smack_onlycap { | |||
152 | #define SMK_FSROOT "smackfsroot=" | 201 | #define SMK_FSROOT "smackfsroot=" |
153 | #define SMK_FSTRANS "smackfstransmute=" | 202 | #define SMK_FSTRANS "smackfstransmute=" |
154 | 203 | ||
204 | #define SMACK_DELETE_OPTION "-DELETE" | ||
155 | #define SMACK_CIPSO_OPTION "-CIPSO" | 205 | #define SMACK_CIPSO_OPTION "-CIPSO" |
156 | 206 | ||
157 | /* | 207 | /* |
@@ -234,10 +284,6 @@ struct smk_audit_info { | |||
234 | struct smack_audit_data sad; | 284 | struct smack_audit_data sad; |
235 | #endif | 285 | #endif |
236 | }; | 286 | }; |
237 | /* | ||
238 | * These functions are in smack_lsm.c | ||
239 | */ | ||
240 | struct inode_smack *new_inode_smack(struct smack_known *); | ||
241 | 287 | ||
242 | /* | 288 | /* |
243 | * These functions are in smack_access.c | 289 | * These functions are in smack_access.c |
@@ -267,7 +313,6 @@ extern struct smack_known *smack_syslog_label; | |||
267 | #ifdef CONFIG_SECURITY_SMACK_BRINGUP | 313 | #ifdef CONFIG_SECURITY_SMACK_BRINGUP |
268 | extern struct smack_known *smack_unconfined; | 314 | extern struct smack_known *smack_unconfined; |
269 | #endif | 315 | #endif |
270 | extern struct smack_known smack_cipso_option; | ||
271 | extern int smack_ptrace_rule; | 316 | extern int smack_ptrace_rule; |
272 | 317 | ||
273 | extern struct smack_known smack_known_floor; | 318 | extern struct smack_known smack_known_floor; |
@@ -279,7 +324,10 @@ extern struct smack_known smack_known_web; | |||
279 | 324 | ||
280 | extern struct mutex smack_known_lock; | 325 | extern struct mutex smack_known_lock; |
281 | extern struct list_head smack_known_list; | 326 | extern struct list_head smack_known_list; |
282 | extern struct list_head smk_netlbladdr_list; | 327 | extern struct list_head smk_net4addr_list; |
328 | #if IS_ENABLED(CONFIG_IPV6) | ||
329 | extern struct list_head smk_net6addr_list; | ||
330 | #endif /* CONFIG_IPV6 */ | ||
283 | 331 | ||
284 | extern struct mutex smack_onlycap_lock; | 332 | extern struct mutex smack_onlycap_lock; |
285 | extern struct list_head smack_onlycap_list; | 333 | extern struct list_head smack_onlycap_list; |