GNU Linux-libre 4.14.265-gnu1
[releases.git] / security / integrity / evm / evm_main.c
1 /*
2  * Copyright (C) 2005-2010 IBM Corporation
3  *
4  * Author:
5  * Mimi Zohar <zohar@us.ibm.com>
6  * Kylene Hall <kjhall@us.ibm.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation, version 2 of the License.
11  *
12  * File: evm_main.c
13  *      implements evm_inode_setxattr, evm_inode_post_setxattr,
14  *      evm_inode_removexattr, and evm_verifyxattr
15  */
16
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18
19 #include <linux/module.h>
20 #include <linux/crypto.h>
21 #include <linux/audit.h>
22 #include <linux/xattr.h>
23 #include <linux/integrity.h>
24 #include <linux/evm.h>
25 #include <linux/magic.h>
26
27 #include <crypto/hash.h>
28 #include <crypto/algapi.h>
29 #include "evm.h"
30
31 int evm_initialized;
32
33 static char *integrity_status_msg[] = {
34         "pass", "pass_immutable", "fail", "no_label", "no_xattrs", "unknown"
35 };
36 char *evm_hmac = "hmac(sha1)";
37 char *evm_hash = "sha1";
38 int evm_hmac_attrs;
39
40 char *evm_config_xattrnames[] = {
41 #ifdef CONFIG_SECURITY_SELINUX
42         XATTR_NAME_SELINUX,
43 #endif
44 #ifdef CONFIG_SECURITY_SMACK
45         XATTR_NAME_SMACK,
46 #ifdef CONFIG_EVM_EXTRA_SMACK_XATTRS
47         XATTR_NAME_SMACKEXEC,
48         XATTR_NAME_SMACKTRANSMUTE,
49         XATTR_NAME_SMACKMMAP,
50 #endif
51 #endif
52 #ifdef CONFIG_IMA_APPRAISE
53         XATTR_NAME_IMA,
54 #endif
55         XATTR_NAME_CAPS,
56         NULL
57 };
58
59 static int evm_fixmode __ro_after_init;
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 #ifdef CONFIG_EVM_ATTR_FSUUID
71         evm_hmac_attrs |= EVM_ATTR_FSUUID;
72 #endif
73         pr_info("HMAC attrs: 0x%x\n", evm_hmac_attrs);
74 }
75
76 static int evm_find_protected_xattrs(struct dentry *dentry)
77 {
78         struct inode *inode = d_backing_inode(dentry);
79         char **xattr;
80         int error;
81         int count = 0;
82
83         if (!(inode->i_opflags & IOP_XATTR))
84                 return -EOPNOTSUPP;
85
86         for (xattr = evm_config_xattrnames; *xattr != NULL; xattr++) {
87                 error = __vfs_getxattr(dentry, inode, *xattr, NULL, 0);
88                 if (error < 0) {
89                         if (error == -ENODATA)
90                                 continue;
91                         return error;
92                 }
93                 count++;
94         }
95
96         return count;
97 }
98
99 /*
100  * evm_verify_hmac - calculate and compare the HMAC with the EVM xattr
101  *
102  * Compute the HMAC on the dentry's protected set of extended attributes
103  * and compare it against the stored security.evm xattr.
104  *
105  * For performance:
106  * - use the previoulsy retrieved xattr value and length to calculate the
107  *   HMAC.)
108  * - cache the verification result in the iint, when available.
109  *
110  * Returns integrity status
111  */
112 static enum integrity_status evm_verify_hmac(struct dentry *dentry,
113                                              const char *xattr_name,
114                                              char *xattr_value,
115                                              size_t xattr_value_len,
116                                              struct integrity_iint_cache *iint)
117 {
118         struct evm_ima_xattr_data *xattr_data = NULL;
119         struct evm_ima_xattr_data calc;
120         enum integrity_status evm_status = INTEGRITY_PASS;
121         int rc, xattr_len;
122
123         if (iint && (iint->evm_status == INTEGRITY_PASS ||
124                      iint->evm_status == INTEGRITY_PASS_IMMUTABLE))
125                 return iint->evm_status;
126
127         /* if status is not PASS, try to check again - against -ENOMEM */
128
129         /* first need to know the sig type */
130         rc = vfs_getxattr_alloc(dentry, XATTR_NAME_EVM, (char **)&xattr_data, 0,
131                                 GFP_NOFS);
132         if (rc <= 0) {
133                 evm_status = INTEGRITY_FAIL;
134                 if (rc == -ENODATA) {
135                         rc = evm_find_protected_xattrs(dentry);
136                         if (rc > 0)
137                                 evm_status = INTEGRITY_NOLABEL;
138                         else if (rc == 0)
139                                 evm_status = INTEGRITY_NOXATTRS; /* new file */
140                 } else if (rc == -EOPNOTSUPP) {
141                         evm_status = INTEGRITY_UNKNOWN;
142                 }
143                 goto out;
144         }
145
146         xattr_len = rc;
147
148         /* check value type */
149         switch (xattr_data->type) {
150         case EVM_XATTR_HMAC:
151                 if (xattr_len != sizeof(struct evm_ima_xattr_data)) {
152                         evm_status = INTEGRITY_FAIL;
153                         goto out;
154                 }
155                 rc = evm_calc_hmac(dentry, xattr_name, xattr_value,
156                                    xattr_value_len, calc.digest);
157                 if (rc)
158                         break;
159                 rc = crypto_memneq(xattr_data->digest, calc.digest,
160                             sizeof(calc.digest));
161                 if (rc)
162                         rc = -EINVAL;
163                 break;
164         case EVM_IMA_XATTR_DIGSIG:
165         case EVM_XATTR_PORTABLE_DIGSIG:
166                 rc = evm_calc_hash(dentry, xattr_name, xattr_value,
167                                    xattr_value_len, xattr_data->type,
168                                    calc.digest);
169                 if (rc)
170                         break;
171                 rc = integrity_digsig_verify(INTEGRITY_KEYRING_EVM,
172                                         (const char *)xattr_data, xattr_len,
173                                         calc.digest, sizeof(calc.digest));
174                 if (!rc) {
175                         if (xattr_data->type == EVM_XATTR_PORTABLE_DIGSIG) {
176                                 if (iint)
177                                         iint->flags |= EVM_IMMUTABLE_DIGSIG;
178                                 evm_status = INTEGRITY_PASS_IMMUTABLE;
179                         } else if (!IS_RDONLY(d_backing_inode(dentry)) &&
180                                    !IS_IMMUTABLE(d_backing_inode(dentry))) {
181                                 evm_update_evmxattr(dentry, xattr_name,
182                                                     xattr_value,
183                                                     xattr_value_len);
184                         }
185                 }
186                 break;
187         default:
188                 rc = -EINVAL;
189                 break;
190         }
191
192         if (rc)
193                 evm_status = (rc == -ENODATA) ?
194                                 INTEGRITY_NOXATTRS : INTEGRITY_FAIL;
195 out:
196         if (iint)
197                 iint->evm_status = evm_status;
198         kfree(xattr_data);
199         return evm_status;
200 }
201
202 static int evm_protected_xattr(const char *req_xattr_name)
203 {
204         char **xattrname;
205         int namelen;
206         int found = 0;
207
208         namelen = strlen(req_xattr_name);
209         for (xattrname = evm_config_xattrnames; *xattrname != NULL; xattrname++) {
210                 if ((strlen(*xattrname) == namelen)
211                     && (strncmp(req_xattr_name, *xattrname, namelen) == 0)) {
212                         found = 1;
213                         break;
214                 }
215                 if (strncmp(req_xattr_name,
216                             *xattrname + XATTR_SECURITY_PREFIX_LEN,
217                             strlen(req_xattr_name)) == 0) {
218                         found = 1;
219                         break;
220                 }
221         }
222         return found;
223 }
224
225 /**
226  * evm_verifyxattr - verify the integrity of the requested xattr
227  * @dentry: object of the verify xattr
228  * @xattr_name: requested xattr
229  * @xattr_value: requested xattr value
230  * @xattr_value_len: requested xattr value length
231  *
232  * Calculate the HMAC for the given dentry and verify it against the stored
233  * security.evm xattr. For performance, use the xattr value and length
234  * previously retrieved to calculate the HMAC.
235  *
236  * Returns the xattr integrity status.
237  *
238  * This function requires the caller to lock the inode's i_mutex before it
239  * is executed.
240  */
241 enum integrity_status evm_verifyxattr(struct dentry *dentry,
242                                       const char *xattr_name,
243                                       void *xattr_value, size_t xattr_value_len,
244                                       struct integrity_iint_cache *iint)
245 {
246         if (!evm_initialized || !evm_protected_xattr(xattr_name))
247                 return INTEGRITY_UNKNOWN;
248
249         if (!iint) {
250                 iint = integrity_iint_find(d_backing_inode(dentry));
251                 if (!iint)
252                         return INTEGRITY_UNKNOWN;
253         }
254         return evm_verify_hmac(dentry, xattr_name, xattr_value,
255                                  xattr_value_len, iint);
256 }
257 EXPORT_SYMBOL_GPL(evm_verifyxattr);
258
259 /*
260  * evm_verify_current_integrity - verify the dentry's metadata integrity
261  * @dentry: pointer to the affected dentry
262  *
263  * Verify and return the dentry's metadata integrity. The exceptions are
264  * before EVM is initialized or in 'fix' mode.
265  */
266 static enum integrity_status evm_verify_current_integrity(struct dentry *dentry)
267 {
268         struct inode *inode = d_backing_inode(dentry);
269
270         if (!evm_initialized || !S_ISREG(inode->i_mode) || evm_fixmode)
271                 return 0;
272         return evm_verify_hmac(dentry, NULL, NULL, 0, NULL);
273 }
274
275 /*
276  * evm_protect_xattr - protect the EVM extended attribute
277  *
278  * Prevent security.evm from being modified or removed without the
279  * necessary permissions or when the existing value is invalid.
280  *
281  * The posix xattr acls are 'system' prefixed, which normally would not
282  * affect security.evm.  An interesting side affect of writing posix xattr
283  * acls is their modifying of the i_mode, which is included in security.evm.
284  * For posix xattr acls only, permit security.evm, even if it currently
285  * doesn't exist, to be updated unless the EVM signature is immutable.
286  */
287 static int evm_protect_xattr(struct dentry *dentry, const char *xattr_name,
288                              const void *xattr_value, size_t xattr_value_len)
289 {
290         enum integrity_status evm_status;
291
292         if (strcmp(xattr_name, XATTR_NAME_EVM) == 0) {
293                 if (!capable(CAP_SYS_ADMIN))
294                         return -EPERM;
295         } else if (!evm_protected_xattr(xattr_name)) {
296                 if (!posix_xattr_acl(xattr_name))
297                         return 0;
298                 evm_status = evm_verify_current_integrity(dentry);
299                 if ((evm_status == INTEGRITY_PASS) ||
300                     (evm_status == INTEGRITY_NOXATTRS))
301                         return 0;
302                 goto out;
303         }
304         evm_status = evm_verify_current_integrity(dentry);
305         if (evm_status == INTEGRITY_NOXATTRS) {
306                 struct integrity_iint_cache *iint;
307
308                 iint = integrity_iint_find(d_backing_inode(dentry));
309                 if (iint && (iint->flags & IMA_NEW_FILE))
310                         return 0;
311
312                 /* exception for pseudo filesystems */
313                 if (dentry->d_sb->s_magic == TMPFS_MAGIC
314                     || dentry->d_sb->s_magic == SYSFS_MAGIC)
315                         return 0;
316
317                 integrity_audit_msg(AUDIT_INTEGRITY_METADATA,
318                                     dentry->d_inode, dentry->d_name.name,
319                                     "update_metadata",
320                                     integrity_status_msg[evm_status],
321                                     -EPERM, 0);
322         }
323 out:
324         if (evm_status != INTEGRITY_PASS)
325                 integrity_audit_msg(AUDIT_INTEGRITY_METADATA, d_backing_inode(dentry),
326                                     dentry->d_name.name, "appraise_metadata",
327                                     integrity_status_msg[evm_status],
328                                     -EPERM, 0);
329         return evm_status == INTEGRITY_PASS ? 0 : -EPERM;
330 }
331
332 /**
333  * evm_inode_setxattr - protect the EVM extended attribute
334  * @dentry: pointer to the affected dentry
335  * @xattr_name: pointer to the affected extended attribute name
336  * @xattr_value: pointer to the new extended attribute value
337  * @xattr_value_len: pointer to the new extended attribute value length
338  *
339  * Before allowing the 'security.evm' protected xattr to be updated,
340  * verify the existing value is valid.  As only the kernel should have
341  * access to the EVM encrypted key needed to calculate the HMAC, prevent
342  * userspace from writing HMAC value.  Writing 'security.evm' requires
343  * requires CAP_SYS_ADMIN privileges.
344  */
345 int evm_inode_setxattr(struct dentry *dentry, const char *xattr_name,
346                        const void *xattr_value, size_t xattr_value_len)
347 {
348         const struct evm_ima_xattr_data *xattr_data = xattr_value;
349
350         if (strcmp(xattr_name, XATTR_NAME_EVM) == 0) {
351                 if (!xattr_value_len)
352                         return -EINVAL;
353                 if (xattr_data->type != EVM_IMA_XATTR_DIGSIG &&
354                     xattr_data->type != EVM_XATTR_PORTABLE_DIGSIG)
355                         return -EPERM;
356         }
357         return evm_protect_xattr(dentry, xattr_name, xattr_value,
358                                  xattr_value_len);
359 }
360
361 /**
362  * evm_inode_removexattr - protect the EVM extended attribute
363  * @dentry: pointer to the affected dentry
364  * @xattr_name: pointer to the affected extended attribute name
365  *
366  * Removing 'security.evm' requires CAP_SYS_ADMIN privileges and that
367  * the current value is valid.
368  */
369 int evm_inode_removexattr(struct dentry *dentry, const char *xattr_name)
370 {
371         return evm_protect_xattr(dentry, xattr_name, NULL, 0);
372 }
373
374 static void evm_reset_status(struct inode *inode)
375 {
376         struct integrity_iint_cache *iint;
377
378         iint = integrity_iint_find(inode);
379         if (iint)
380                 iint->evm_status = INTEGRITY_UNKNOWN;
381 }
382
383 /**
384  * evm_inode_post_setxattr - update 'security.evm' to reflect the changes
385  * @dentry: pointer to the affected dentry
386  * @xattr_name: pointer to the affected extended attribute name
387  * @xattr_value: pointer to the new extended attribute value
388  * @xattr_value_len: pointer to the new extended attribute value length
389  *
390  * Update the HMAC stored in 'security.evm' to reflect the change.
391  *
392  * No need to take the i_mutex lock here, as this function is called from
393  * __vfs_setxattr_noperm().  The caller of which has taken the inode's
394  * i_mutex lock.
395  */
396 void evm_inode_post_setxattr(struct dentry *dentry, const char *xattr_name,
397                              const void *xattr_value, size_t xattr_value_len)
398 {
399         if (!evm_initialized || (!evm_protected_xattr(xattr_name)
400                                  && !posix_xattr_acl(xattr_name)))
401                 return;
402
403         evm_reset_status(dentry->d_inode);
404
405         evm_update_evmxattr(dentry, xattr_name, xattr_value, xattr_value_len);
406 }
407
408 /**
409  * evm_inode_post_removexattr - update 'security.evm' after removing the xattr
410  * @dentry: pointer to the affected dentry
411  * @xattr_name: pointer to the affected extended attribute name
412  *
413  * Update the HMAC stored in 'security.evm' to reflect removal of the xattr.
414  *
415  * No need to take the i_mutex lock here, as this function is called from
416  * vfs_removexattr() which takes the i_mutex.
417  */
418 void evm_inode_post_removexattr(struct dentry *dentry, const char *xattr_name)
419 {
420         if (!evm_initialized || !evm_protected_xattr(xattr_name))
421                 return;
422
423         evm_reset_status(dentry->d_inode);
424
425         evm_update_evmxattr(dentry, xattr_name, NULL, 0);
426 }
427
428 /**
429  * evm_inode_setattr - prevent updating an invalid EVM extended attribute
430  * @dentry: pointer to the affected dentry
431  *
432  * Permit update of file attributes when files have a valid EVM signature,
433  * except in the case of them having an immutable portable signature.
434  */
435 int evm_inode_setattr(struct dentry *dentry, struct iattr *attr)
436 {
437         unsigned int ia_valid = attr->ia_valid;
438         enum integrity_status evm_status;
439
440         if (!(ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID)))
441                 return 0;
442         evm_status = evm_verify_current_integrity(dentry);
443         if ((evm_status == INTEGRITY_PASS) ||
444             (evm_status == INTEGRITY_NOXATTRS))
445                 return 0;
446         integrity_audit_msg(AUDIT_INTEGRITY_METADATA, d_backing_inode(dentry),
447                             dentry->d_name.name, "appraise_metadata",
448                             integrity_status_msg[evm_status], -EPERM, 0);
449         return -EPERM;
450 }
451
452 /**
453  * evm_inode_post_setattr - update 'security.evm' after modifying metadata
454  * @dentry: pointer to the affected dentry
455  * @ia_valid: for the UID and GID status
456  *
457  * For now, update the HMAC stored in 'security.evm' to reflect UID/GID
458  * changes.
459  *
460  * This function is called from notify_change(), which expects the caller
461  * to lock the inode's i_mutex.
462  */
463 void evm_inode_post_setattr(struct dentry *dentry, int ia_valid)
464 {
465         if (!evm_initialized)
466                 return;
467
468         if (ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
469                 evm_update_evmxattr(dentry, NULL, NULL, 0);
470 }
471
472 /*
473  * evm_inode_init_security - initializes security.evm
474  */
475 int evm_inode_init_security(struct inode *inode,
476                                  const struct xattr *lsm_xattr,
477                                  struct xattr *evm_xattr)
478 {
479         struct evm_ima_xattr_data *xattr_data;
480         int rc;
481
482         if (!evm_initialized || !evm_protected_xattr(lsm_xattr->name))
483                 return 0;
484
485         xattr_data = kzalloc(sizeof(*xattr_data), GFP_NOFS);
486         if (!xattr_data)
487                 return -ENOMEM;
488
489         xattr_data->type = EVM_XATTR_HMAC;
490         rc = evm_init_hmac(inode, lsm_xattr, xattr_data->digest);
491         if (rc < 0)
492                 goto out;
493
494         evm_xattr->value = xattr_data;
495         evm_xattr->value_len = sizeof(*xattr_data);
496         evm_xattr->name = XATTR_EVM_SUFFIX;
497         return 0;
498 out:
499         kfree(xattr_data);
500         return rc;
501 }
502 EXPORT_SYMBOL_GPL(evm_inode_init_security);
503
504 #ifdef CONFIG_EVM_LOAD_X509
505 void __init evm_load_x509(void)
506 {
507         int rc;
508
509         rc = integrity_load_x509(INTEGRITY_KEYRING_EVM, CONFIG_EVM_X509_PATH);
510         if (!rc)
511                 evm_initialized |= EVM_INIT_X509;
512 }
513 #endif
514
515 static int __init init_evm(void)
516 {
517         int error;
518
519         evm_init_config();
520
521         error = integrity_init_keyring(INTEGRITY_KEYRING_EVM);
522         if (error)
523                 return error;
524
525         error = evm_init_secfs();
526         if (error < 0) {
527                 pr_info("Error registering secfs\n");
528                 return error;
529         }
530
531         return 0;
532 }
533
534 /*
535  * evm_display_config - list the EVM protected security extended attributes
536  */
537 static int __init evm_display_config(void)
538 {
539         char **xattrname;
540
541         for (xattrname = evm_config_xattrnames; *xattrname != NULL; xattrname++)
542                 pr_info("%s\n", *xattrname);
543         return 0;
544 }
545
546 pure_initcall(evm_display_config);
547 late_initcall(init_evm);
548
549 MODULE_DESCRIPTION("Extended Verification Module");
550 MODULE_LICENSE("GPL");