This source file includes following definitions.
- evm_set_fixmode
- evm_init_config
- evm_key_loaded
- evm_find_protected_xattrs
- evm_verify_hmac
- evm_protected_xattr
- evm_verifyxattr
- evm_verify_current_integrity
- evm_protect_xattr
- evm_inode_setxattr
- evm_inode_removexattr
- evm_reset_status
- evm_inode_post_setxattr
- evm_inode_post_removexattr
- evm_inode_setattr
- evm_inode_post_setattr
- evm_inode_init_security
- evm_load_x509
- init_evm
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
15
16 #include <linux/init.h>
17 #include <linux/crypto.h>
18 #include <linux/audit.h>
19 #include <linux/xattr.h>
20 #include <linux/integrity.h>
21 #include <linux/evm.h>
22 #include <linux/magic.h>
23
24 #include <crypto/hash.h>
25 #include <crypto/hash_info.h>
26 #include <crypto/algapi.h>
27 #include "evm.h"
28
29 int evm_initialized;
30
31 static const char * const integrity_status_msg[] = {
32 "pass", "pass_immutable", "fail", "no_label", "no_xattrs", "unknown"
33 };
34 int evm_hmac_attrs;
35
36 static struct xattr_list evm_config_default_xattrnames[] = {
37 #ifdef CONFIG_SECURITY_SELINUX
38 {.name = XATTR_NAME_SELINUX},
39 #endif
40 #ifdef CONFIG_SECURITY_SMACK
41 {.name = XATTR_NAME_SMACK},
42 #ifdef CONFIG_EVM_EXTRA_SMACK_XATTRS
43 {.name = XATTR_NAME_SMACKEXEC},
44 {.name = XATTR_NAME_SMACKTRANSMUTE},
45 {.name = XATTR_NAME_SMACKMMAP},
46 #endif
47 #endif
48 #ifdef CONFIG_SECURITY_APPARMOR
49 {.name = XATTR_NAME_APPARMOR},
50 #endif
51 #ifdef CONFIG_IMA_APPRAISE
52 {.name = XATTR_NAME_IMA},
53 #endif
54 {.name = XATTR_NAME_CAPS},
55 };
56
57 LIST_HEAD(evm_config_xattrnames);
58
59 static int evm_fixmode;
60 static int __init evm_set_fixmode(char *str)
61 {
62 if (strncmp(str, "fix", 3) == 0)
63 evm_fixmode = 1;
64 return 0;
65 }
66 __setup("evm=", evm_set_fixmode);
67
68 static void __init evm_init_config(void)
69 {
70 int i, xattrs;
71
72 xattrs = ARRAY_SIZE(evm_config_default_xattrnames);
73
74 pr_info("Initialising EVM extended attributes:\n");
75 for (i = 0; i < xattrs; i++) {
76 pr_info("%s\n", evm_config_default_xattrnames[i].name);
77 list_add_tail(&evm_config_default_xattrnames[i].list,
78 &evm_config_xattrnames);
79 }
80
81 #ifdef CONFIG_EVM_ATTR_FSUUID
82 evm_hmac_attrs |= EVM_ATTR_FSUUID;
83 #endif
84 pr_info("HMAC attrs: 0x%x\n", evm_hmac_attrs);
85 }
86
87 static bool evm_key_loaded(void)
88 {
89 return (bool)(evm_initialized & EVM_KEY_MASK);
90 }
91
92 static int evm_find_protected_xattrs(struct dentry *dentry)
93 {
94 struct inode *inode = d_backing_inode(dentry);
95 struct xattr_list *xattr;
96 int error;
97 int count = 0;
98
99 if (!(inode->i_opflags & IOP_XATTR))
100 return -EOPNOTSUPP;
101
102 list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
103 error = __vfs_getxattr(dentry, inode, xattr->name, NULL, 0);
104 if (error < 0) {
105 if (error == -ENODATA)
106 continue;
107 return error;
108 }
109 count++;
110 }
111
112 return count;
113 }
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128 static enum integrity_status evm_verify_hmac(struct dentry *dentry,
129 const char *xattr_name,
130 char *xattr_value,
131 size_t xattr_value_len,
132 struct integrity_iint_cache *iint)
133 {
134 struct evm_ima_xattr_data *xattr_data = NULL;
135 struct signature_v2_hdr *hdr;
136 enum integrity_status evm_status = INTEGRITY_PASS;
137 struct evm_digest digest;
138 struct inode *inode;
139 int rc, xattr_len;
140
141 if (iint && (iint->evm_status == INTEGRITY_PASS ||
142 iint->evm_status == INTEGRITY_PASS_IMMUTABLE))
143 return iint->evm_status;
144
145
146
147
148 rc = vfs_getxattr_alloc(dentry, XATTR_NAME_EVM, (char **)&xattr_data, 0,
149 GFP_NOFS);
150 if (rc <= 0) {
151 evm_status = INTEGRITY_FAIL;
152 if (rc == -ENODATA) {
153 rc = evm_find_protected_xattrs(dentry);
154 if (rc > 0)
155 evm_status = INTEGRITY_NOLABEL;
156 else if (rc == 0)
157 evm_status = INTEGRITY_NOXATTRS;
158 } else if (rc == -EOPNOTSUPP) {
159 evm_status = INTEGRITY_UNKNOWN;
160 }
161 goto out;
162 }
163
164 xattr_len = rc;
165
166
167 switch (xattr_data->type) {
168 case EVM_XATTR_HMAC:
169 if (xattr_len != sizeof(struct evm_xattr)) {
170 evm_status = INTEGRITY_FAIL;
171 goto out;
172 }
173
174 digest.hdr.algo = HASH_ALGO_SHA1;
175 rc = evm_calc_hmac(dentry, xattr_name, xattr_value,
176 xattr_value_len, &digest);
177 if (rc)
178 break;
179 rc = crypto_memneq(xattr_data->data, digest.digest,
180 SHA1_DIGEST_SIZE);
181 if (rc)
182 rc = -EINVAL;
183 break;
184 case EVM_IMA_XATTR_DIGSIG:
185 case EVM_XATTR_PORTABLE_DIGSIG:
186 hdr = (struct signature_v2_hdr *)xattr_data;
187 digest.hdr.algo = hdr->hash_algo;
188 rc = evm_calc_hash(dentry, xattr_name, xattr_value,
189 xattr_value_len, xattr_data->type, &digest);
190 if (rc)
191 break;
192 rc = integrity_digsig_verify(INTEGRITY_KEYRING_EVM,
193 (const char *)xattr_data, xattr_len,
194 digest.digest, digest.hdr.length);
195 if (!rc) {
196 inode = d_backing_inode(dentry);
197
198 if (xattr_data->type == EVM_XATTR_PORTABLE_DIGSIG) {
199 if (iint)
200 iint->flags |= EVM_IMMUTABLE_DIGSIG;
201 evm_status = INTEGRITY_PASS_IMMUTABLE;
202 } else if (!IS_RDONLY(inode) &&
203 !(inode->i_sb->s_readonly_remount) &&
204 !IS_IMMUTABLE(inode)) {
205 evm_update_evmxattr(dentry, xattr_name,
206 xattr_value,
207 xattr_value_len);
208 }
209 }
210 break;
211 default:
212 rc = -EINVAL;
213 break;
214 }
215
216 if (rc)
217 evm_status = (rc == -ENODATA) ?
218 INTEGRITY_NOXATTRS : INTEGRITY_FAIL;
219 out:
220 if (iint)
221 iint->evm_status = evm_status;
222 kfree(xattr_data);
223 return evm_status;
224 }
225
226 static int evm_protected_xattr(const char *req_xattr_name)
227 {
228 int namelen;
229 int found = 0;
230 struct xattr_list *xattr;
231
232 namelen = strlen(req_xattr_name);
233 list_for_each_entry_lockless(xattr, &evm_config_xattrnames, list) {
234 if ((strlen(xattr->name) == namelen)
235 && (strncmp(req_xattr_name, xattr->name, namelen) == 0)) {
236 found = 1;
237 break;
238 }
239 if (strncmp(req_xattr_name,
240 xattr->name + XATTR_SECURITY_PREFIX_LEN,
241 strlen(req_xattr_name)) == 0) {
242 found = 1;
243 break;
244 }
245 }
246
247 return found;
248 }
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266 enum integrity_status evm_verifyxattr(struct dentry *dentry,
267 const char *xattr_name,
268 void *xattr_value, size_t xattr_value_len,
269 struct integrity_iint_cache *iint)
270 {
271 if (!evm_key_loaded() || !evm_protected_xattr(xattr_name))
272 return INTEGRITY_UNKNOWN;
273
274 if (!iint) {
275 iint = integrity_iint_find(d_backing_inode(dentry));
276 if (!iint)
277 return INTEGRITY_UNKNOWN;
278 }
279 return evm_verify_hmac(dentry, xattr_name, xattr_value,
280 xattr_value_len, iint);
281 }
282 EXPORT_SYMBOL_GPL(evm_verifyxattr);
283
284
285
286
287
288
289
290
291 static enum integrity_status evm_verify_current_integrity(struct dentry *dentry)
292 {
293 struct inode *inode = d_backing_inode(dentry);
294
295 if (!evm_key_loaded() || !S_ISREG(inode->i_mode) || evm_fixmode)
296 return 0;
297 return evm_verify_hmac(dentry, NULL, NULL, 0, NULL);
298 }
299
300
301
302
303
304
305
306
307
308
309
310
311
312 static int evm_protect_xattr(struct dentry *dentry, const char *xattr_name,
313 const void *xattr_value, size_t xattr_value_len)
314 {
315 enum integrity_status evm_status;
316
317 if (strcmp(xattr_name, XATTR_NAME_EVM) == 0) {
318 if (!capable(CAP_SYS_ADMIN))
319 return -EPERM;
320 } else if (!evm_protected_xattr(xattr_name)) {
321 if (!posix_xattr_acl(xattr_name))
322 return 0;
323 evm_status = evm_verify_current_integrity(dentry);
324 if ((evm_status == INTEGRITY_PASS) ||
325 (evm_status == INTEGRITY_NOXATTRS))
326 return 0;
327 goto out;
328 }
329
330 evm_status = evm_verify_current_integrity(dentry);
331 if (evm_status == INTEGRITY_NOXATTRS) {
332 struct integrity_iint_cache *iint;
333
334 iint = integrity_iint_find(d_backing_inode(dentry));
335 if (iint && (iint->flags & IMA_NEW_FILE))
336 return 0;
337
338
339 if (dentry->d_sb->s_magic == TMPFS_MAGIC
340 || dentry->d_sb->s_magic == SYSFS_MAGIC)
341 return 0;
342
343 integrity_audit_msg(AUDIT_INTEGRITY_METADATA,
344 dentry->d_inode, dentry->d_name.name,
345 "update_metadata",
346 integrity_status_msg[evm_status],
347 -EPERM, 0);
348 }
349 out:
350 if (evm_status != INTEGRITY_PASS)
351 integrity_audit_msg(AUDIT_INTEGRITY_METADATA, d_backing_inode(dentry),
352 dentry->d_name.name, "appraise_metadata",
353 integrity_status_msg[evm_status],
354 -EPERM, 0);
355 return evm_status == INTEGRITY_PASS ? 0 : -EPERM;
356 }
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371 int evm_inode_setxattr(struct dentry *dentry, const char *xattr_name,
372 const void *xattr_value, size_t xattr_value_len)
373 {
374 const struct evm_ima_xattr_data *xattr_data = xattr_value;
375
376
377
378
379 if (evm_initialized & EVM_ALLOW_METADATA_WRITES)
380 return 0;
381
382 if (strcmp(xattr_name, XATTR_NAME_EVM) == 0) {
383 if (!xattr_value_len)
384 return -EINVAL;
385 if (xattr_data->type != EVM_IMA_XATTR_DIGSIG &&
386 xattr_data->type != EVM_XATTR_PORTABLE_DIGSIG)
387 return -EPERM;
388 }
389 return evm_protect_xattr(dentry, xattr_name, xattr_value,
390 xattr_value_len);
391 }
392
393
394
395
396
397
398
399
400
401 int evm_inode_removexattr(struct dentry *dentry, const char *xattr_name)
402 {
403
404
405
406 if (evm_initialized & EVM_ALLOW_METADATA_WRITES)
407 return 0;
408
409 return evm_protect_xattr(dentry, xattr_name, NULL, 0);
410 }
411
412 static void evm_reset_status(struct inode *inode)
413 {
414 struct integrity_iint_cache *iint;
415
416 iint = integrity_iint_find(inode);
417 if (iint)
418 iint->evm_status = INTEGRITY_UNKNOWN;
419 }
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434 void evm_inode_post_setxattr(struct dentry *dentry, const char *xattr_name,
435 const void *xattr_value, size_t xattr_value_len)
436 {
437 if (!evm_key_loaded() || (!evm_protected_xattr(xattr_name)
438 && !posix_xattr_acl(xattr_name)))
439 return;
440
441 evm_reset_status(dentry->d_inode);
442
443 evm_update_evmxattr(dentry, xattr_name, xattr_value, xattr_value_len);
444 }
445
446
447
448
449
450
451
452
453
454
455
456 void evm_inode_post_removexattr(struct dentry *dentry, const char *xattr_name)
457 {
458 if (!evm_key_loaded() || !evm_protected_xattr(xattr_name))
459 return;
460
461 evm_reset_status(dentry->d_inode);
462
463 evm_update_evmxattr(dentry, xattr_name, NULL, 0);
464 }
465
466
467
468
469
470
471
472
473 int evm_inode_setattr(struct dentry *dentry, struct iattr *attr)
474 {
475 unsigned int ia_valid = attr->ia_valid;
476 enum integrity_status evm_status;
477
478
479
480
481 if (evm_initialized & EVM_ALLOW_METADATA_WRITES)
482 return 0;
483
484 if (!(ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)))
485 return 0;
486 evm_status = evm_verify_current_integrity(dentry);
487 if ((evm_status == INTEGRITY_PASS) ||
488 (evm_status == INTEGRITY_NOXATTRS))
489 return 0;
490 integrity_audit_msg(AUDIT_INTEGRITY_METADATA, d_backing_inode(dentry),
491 dentry->d_name.name, "appraise_metadata",
492 integrity_status_msg[evm_status], -EPERM, 0);
493 return -EPERM;
494 }
495
496
497
498
499
500
501
502
503
504
505
506
507 void evm_inode_post_setattr(struct dentry *dentry, int ia_valid)
508 {
509 if (!evm_key_loaded())
510 return;
511
512 if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
513 evm_update_evmxattr(dentry, NULL, NULL, 0);
514 }
515
516
517
518
519 int evm_inode_init_security(struct inode *inode,
520 const struct xattr *lsm_xattr,
521 struct xattr *evm_xattr)
522 {
523 struct evm_xattr *xattr_data;
524 int rc;
525
526 if (!evm_key_loaded() || !evm_protected_xattr(lsm_xattr->name))
527 return 0;
528
529 xattr_data = kzalloc(sizeof(*xattr_data), GFP_NOFS);
530 if (!xattr_data)
531 return -ENOMEM;
532
533 xattr_data->data.type = EVM_XATTR_HMAC;
534 rc = evm_init_hmac(inode, lsm_xattr, xattr_data->digest);
535 if (rc < 0)
536 goto out;
537
538 evm_xattr->value = xattr_data;
539 evm_xattr->value_len = sizeof(*xattr_data);
540 evm_xattr->name = XATTR_EVM_SUFFIX;
541 return 0;
542 out:
543 kfree(xattr_data);
544 return rc;
545 }
546 EXPORT_SYMBOL_GPL(evm_inode_init_security);
547
548 #ifdef CONFIG_EVM_LOAD_X509
549 void __init evm_load_x509(void)
550 {
551 int rc;
552
553 rc = integrity_load_x509(INTEGRITY_KEYRING_EVM, CONFIG_EVM_X509_PATH);
554 if (!rc)
555 evm_initialized |= EVM_INIT_X509;
556 }
557 #endif
558
559 static int __init init_evm(void)
560 {
561 int error;
562 struct list_head *pos, *q;
563
564 evm_init_config();
565
566 error = integrity_init_keyring(INTEGRITY_KEYRING_EVM);
567 if (error)
568 goto error;
569
570 error = evm_init_secfs();
571 if (error < 0) {
572 pr_info("Error registering secfs\n");
573 goto error;
574 }
575
576 error:
577 if (error != 0) {
578 if (!list_empty(&evm_config_xattrnames)) {
579 list_for_each_safe(pos, q, &evm_config_xattrnames)
580 list_del(pos);
581 }
582 }
583
584 return error;
585 }
586
587 late_initcall(init_evm);