1
0

policy.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Copyright (C) 2020-2024 Microsoft Corporation. All rights reserved.
  4. */
  5. #ifndef _IPE_POLICY_H
  6. #define _IPE_POLICY_H
  7. #include <linux/list.h>
  8. #include <linux/types.h>
  9. #include <linux/fs.h>
  10. enum ipe_op_type {
  11. IPE_OP_EXEC = 0,
  12. IPE_OP_FIRMWARE,
  13. IPE_OP_KERNEL_MODULE,
  14. IPE_OP_KEXEC_IMAGE,
  15. IPE_OP_KEXEC_INITRAMFS,
  16. IPE_OP_POLICY,
  17. IPE_OP_X509,
  18. __IPE_OP_MAX,
  19. };
  20. #define IPE_OP_INVALID __IPE_OP_MAX
  21. enum ipe_action_type {
  22. IPE_ACTION_ALLOW = 0,
  23. IPE_ACTION_DENY,
  24. __IPE_ACTION_MAX
  25. };
  26. #define IPE_ACTION_INVALID __IPE_ACTION_MAX
  27. enum ipe_prop_type {
  28. IPE_PROP_BOOT_VERIFIED_FALSE,
  29. IPE_PROP_BOOT_VERIFIED_TRUE,
  30. IPE_PROP_DMV_ROOTHASH,
  31. IPE_PROP_DMV_SIG_FALSE,
  32. IPE_PROP_DMV_SIG_TRUE,
  33. IPE_PROP_FSV_DIGEST,
  34. IPE_PROP_FSV_SIG_FALSE,
  35. IPE_PROP_FSV_SIG_TRUE,
  36. __IPE_PROP_MAX
  37. };
  38. #define IPE_PROP_INVALID __IPE_PROP_MAX
  39. struct ipe_prop {
  40. struct list_head next;
  41. enum ipe_prop_type type;
  42. void *value;
  43. };
  44. struct ipe_rule {
  45. enum ipe_op_type op;
  46. enum ipe_action_type action;
  47. struct list_head props;
  48. struct list_head next;
  49. };
  50. struct ipe_op_table {
  51. struct list_head rules;
  52. enum ipe_action_type default_action;
  53. };
  54. struct ipe_parsed_policy {
  55. const char *name;
  56. struct {
  57. u16 major;
  58. u16 minor;
  59. u16 rev;
  60. } version;
  61. enum ipe_action_type global_default_action;
  62. struct ipe_op_table rules[__IPE_OP_MAX];
  63. };
  64. struct ipe_policy {
  65. const char *pkcs7;
  66. size_t pkcs7len;
  67. const char *text;
  68. size_t textlen;
  69. struct ipe_parsed_policy *parsed;
  70. struct dentry *policyfs;
  71. };
  72. struct ipe_policy *ipe_new_policy(const char *text, size_t textlen,
  73. const char *pkcs7, size_t pkcs7len);
  74. void ipe_free_policy(struct ipe_policy *pol);
  75. int ipe_update_policy(struct inode *root, const char *text, size_t textlen,
  76. const char *pkcs7, size_t pkcs7len);
  77. int ipe_set_active_pol(const struct ipe_policy *p);
  78. extern struct mutex ipe_policy_lock;
  79. #endif /* _IPE_POLICY_H */