154a88cd2SDeven Bowers /* SPDX-License-Identifier: GPL-2.0 */ 254a88cd2SDeven Bowers /* 354a88cd2SDeven Bowers * Copyright (C) 2020-2024 Microsoft Corporation. All rights reserved. 454a88cd2SDeven Bowers */ 554a88cd2SDeven Bowers #ifndef _IPE_POLICY_H 654a88cd2SDeven Bowers #define _IPE_POLICY_H 754a88cd2SDeven Bowers 854a88cd2SDeven Bowers #include <linux/list.h> 954a88cd2SDeven Bowers #include <linux/types.h> 102261306fSDeven Bowers #include <linux/fs.h> 1154a88cd2SDeven Bowers 1254a88cd2SDeven Bowers enum ipe_op_type { 1354a88cd2SDeven Bowers IPE_OP_EXEC = 0, 1454a88cd2SDeven Bowers IPE_OP_FIRMWARE, 1554a88cd2SDeven Bowers IPE_OP_KERNEL_MODULE, 1654a88cd2SDeven Bowers IPE_OP_KEXEC_IMAGE, 1754a88cd2SDeven Bowers IPE_OP_KEXEC_INITRAMFS, 1854a88cd2SDeven Bowers IPE_OP_POLICY, 1954a88cd2SDeven Bowers IPE_OP_X509, 2054a88cd2SDeven Bowers __IPE_OP_MAX, 2154a88cd2SDeven Bowers }; 2254a88cd2SDeven Bowers 2354a88cd2SDeven Bowers #define IPE_OP_INVALID __IPE_OP_MAX 2454a88cd2SDeven Bowers 2554a88cd2SDeven Bowers enum ipe_action_type { 2654a88cd2SDeven Bowers IPE_ACTION_ALLOW = 0, 2754a88cd2SDeven Bowers IPE_ACTION_DENY, 2854a88cd2SDeven Bowers __IPE_ACTION_MAX 2954a88cd2SDeven Bowers }; 3054a88cd2SDeven Bowers 3154a88cd2SDeven Bowers #define IPE_ACTION_INVALID __IPE_ACTION_MAX 3254a88cd2SDeven Bowers 3354a88cd2SDeven Bowers enum ipe_prop_type { 34a8a74df1SFan Wu IPE_PROP_BOOT_VERIFIED_FALSE, 35a8a74df1SFan Wu IPE_PROP_BOOT_VERIFIED_TRUE, 36e155858dSDeven Bowers IPE_PROP_DMV_ROOTHASH, 37e155858dSDeven Bowers IPE_PROP_DMV_SIG_FALSE, 38e155858dSDeven Bowers IPE_PROP_DMV_SIG_TRUE, 39*31f8c868SFan Wu IPE_PROP_FSV_DIGEST, 40*31f8c868SFan Wu IPE_PROP_FSV_SIG_FALSE, 41*31f8c868SFan Wu IPE_PROP_FSV_SIG_TRUE, 4254a88cd2SDeven Bowers __IPE_PROP_MAX 4354a88cd2SDeven Bowers }; 4454a88cd2SDeven Bowers 4554a88cd2SDeven Bowers #define IPE_PROP_INVALID __IPE_PROP_MAX 4654a88cd2SDeven Bowers 4754a88cd2SDeven Bowers struct ipe_prop { 4854a88cd2SDeven Bowers struct list_head next; 4954a88cd2SDeven Bowers enum ipe_prop_type type; 5054a88cd2SDeven Bowers void *value; 5154a88cd2SDeven Bowers }; 5254a88cd2SDeven Bowers 5354a88cd2SDeven Bowers struct ipe_rule { 5454a88cd2SDeven Bowers enum ipe_op_type op; 5554a88cd2SDeven Bowers enum ipe_action_type action; 5654a88cd2SDeven Bowers struct list_head props; 5754a88cd2SDeven Bowers struct list_head next; 5854a88cd2SDeven Bowers }; 5954a88cd2SDeven Bowers 6054a88cd2SDeven Bowers struct ipe_op_table { 6154a88cd2SDeven Bowers struct list_head rules; 6254a88cd2SDeven Bowers enum ipe_action_type default_action; 6354a88cd2SDeven Bowers }; 6454a88cd2SDeven Bowers 6554a88cd2SDeven Bowers struct ipe_parsed_policy { 6654a88cd2SDeven Bowers const char *name; 6754a88cd2SDeven Bowers struct { 6854a88cd2SDeven Bowers u16 major; 6954a88cd2SDeven Bowers u16 minor; 7054a88cd2SDeven Bowers u16 rev; 7154a88cd2SDeven Bowers } version; 7254a88cd2SDeven Bowers 7354a88cd2SDeven Bowers enum ipe_action_type global_default_action; 7454a88cd2SDeven Bowers 7554a88cd2SDeven Bowers struct ipe_op_table rules[__IPE_OP_MAX]; 7654a88cd2SDeven Bowers }; 7754a88cd2SDeven Bowers 7854a88cd2SDeven Bowers struct ipe_policy { 7954a88cd2SDeven Bowers const char *pkcs7; 8054a88cd2SDeven Bowers size_t pkcs7len; 8154a88cd2SDeven Bowers 8254a88cd2SDeven Bowers const char *text; 8354a88cd2SDeven Bowers size_t textlen; 8454a88cd2SDeven Bowers 8554a88cd2SDeven Bowers struct ipe_parsed_policy *parsed; 862261306fSDeven Bowers 872261306fSDeven Bowers struct dentry *policyfs; 8854a88cd2SDeven Bowers }; 8954a88cd2SDeven Bowers 9054a88cd2SDeven Bowers struct ipe_policy *ipe_new_policy(const char *text, size_t textlen, 9154a88cd2SDeven Bowers const char *pkcs7, size_t pkcs7len); 9254a88cd2SDeven Bowers void ipe_free_policy(struct ipe_policy *pol); 932261306fSDeven Bowers int ipe_update_policy(struct inode *root, const char *text, size_t textlen, 942261306fSDeven Bowers const char *pkcs7, size_t pkcs7len); 952261306fSDeven Bowers int ipe_set_active_pol(const struct ipe_policy *p); 962261306fSDeven Bowers extern struct mutex ipe_policy_lock; 9754a88cd2SDeven Bowers 9854a88cd2SDeven Bowers #endif /* _IPE_POLICY_H */ 99