📄 acm.h
字号:
/* * acm.h: Xen access control module interface defintions * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to * deal in the Software without restriction, including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * * Reiner Sailer <sailer@watson.ibm.com> * Copyright (c) 2005, International Business Machines Corporation. */#ifndef _XEN_PUBLIC_ACM_H#define _XEN_PUBLIC_ACM_H#include "../xen.h"/* if ACM_DEBUG defined, all hooks should * print a short trace message (comment it out * when not in testing mode ) *//* #define ACM_DEBUG */#ifdef ACM_DEBUG# define printkd(fmt, args...) printk(fmt,## args)#else# define printkd(fmt, args...)#endif/* default ssid reference value if not supplied */#define ACM_DEFAULT_SSID 0x0#define ACM_DEFAULT_LOCAL_SSID 0x0/* Internal ACM ERROR types */#define ACM_OK 0#define ACM_UNDEF -1#define ACM_INIT_SSID_ERROR -2#define ACM_INIT_SOID_ERROR -3#define ACM_ERROR -4/* External ACCESS DECISIONS */#define ACM_ACCESS_PERMITTED 0#define ACM_ACCESS_DENIED -111#define ACM_NULL_POINTER_ERROR -200/* Error codes reported in when trying to test for a new policy These error codes are reported in an array of tuples where each error code is followed by a parameter describing the error more closely, such as a domain id.*/#define ACM_EVTCHN_SHARING_VIOLATION 0x100#define ACM_GNTTAB_SHARING_VIOLATION 0x101#define ACM_DOMAIN_LOOKUP 0x102#define ACM_CHWALL_CONFLICT 0x103#define ACM_SSIDREF_IN_USE 0x104/* primary policy in lower 4 bits */#define ACM_NULL_POLICY 0#define ACM_CHINESE_WALL_POLICY 1#define ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY 2#define ACM_POLICY_UNDEFINED 15/* combinations have secondary policy component in higher 4bit */#define ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY \ ((ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY << 4) | ACM_CHINESE_WALL_POLICY)/* policy: */#define ACM_POLICY_NAME(X) \ ((X) == (ACM_NULL_POLICY)) ? "NULL" : \ ((X) == (ACM_CHINESE_WALL_POLICY)) ? "CHINESE WALL" : \ ((X) == (ACM_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "SIMPLE TYPE ENFORCEMENT" : \ ((X) == (ACM_CHINESE_WALL_AND_SIMPLE_TYPE_ENFORCEMENT_POLICY)) ? "CHINESE WALL AND SIMPLE TYPE ENFORCEMENT" : \ "UNDEFINED"/* the following policy versions must be increased * whenever the interpretation of the related * policy's data structure changes */#define ACM_POLICY_VERSION 3#define ACM_CHWALL_VERSION 1#define ACM_STE_VERSION 1/* defines a ssid reference used by xen */typedef uint32_t ssidref_t;/* hooks that are known to domains */#define ACMHOOK_none 0#define ACMHOOK_sharing 1#define ACMHOOK_authorization 2/* -------security policy relevant type definitions-------- *//* type identifier; compares to "equal" or "not equal" */typedef uint16_t domaintype_t;/* CHINESE WALL POLICY DATA STRUCTURES * * current accumulated conflict type set: * When a domain is started and has a type that is in * a conflict set, the conflicting types are incremented in * the aggregate set. When a domain is destroyed, the * conflicting types to its type are decremented. * If a domain has multiple types, this procedure works over * all those types. * * conflict_aggregate_set[i] holds the number of * running domains that have a conflict with type i. * * running_types[i] holds the number of running domains * that include type i in their ssidref-referenced type set * * conflict_sets[i][j] is "0" if type j has no conflict * with type i and is "1" otherwise. *//* high-16 = version, low-16 = check magic */#define ACM_MAGIC 0x0001debc/* each offset in bytes from start of the struct they * are part of *//* V3 of the policy buffer aded a version structure */struct acm_policy_version{ uint32_t major; uint32_t minor;};/* each buffer consists of all policy information for * the respective policy given in the policy code * * acm_policy_buffer, acm_chwall_policy_buffer, * and acm_ste_policy_buffer need to stay 32-bit aligned * because we create binary policies also with external * tools that assume packed representations (e.g. the java tool) */struct acm_policy_buffer { uint32_t magic; uint32_t policy_version; /* ACM_POLICY_VERSION */ uint32_t len; uint32_t policy_reference_offset; uint32_t primary_policy_code; uint32_t primary_buffer_offset; uint32_t secondary_policy_code; uint32_t secondary_buffer_offset; struct acm_policy_version xml_pol_version; /* add in V3 */};struct acm_policy_reference_buffer { uint32_t len;};struct acm_chwall_policy_buffer { uint32_t policy_version; /* ACM_CHWALL_VERSION */ uint32_t policy_code; uint32_t chwall_max_types; uint32_t chwall_max_ssidrefs; uint32_t chwall_max_conflictsets; uint32_t chwall_ssid_offset; uint32_t chwall_conflict_sets_offset; uint32_t chwall_running_types_offset; uint32_t chwall_conflict_aggregate_offset;};struct acm_ste_policy_buffer { uint32_t policy_version; /* ACM_STE_VERSION */ uint32_t policy_code; uint32_t ste_max_types; uint32_t ste_max_ssidrefs; uint32_t ste_ssid_offset;};struct acm_stats_buffer { uint32_t magic; uint32_t len; uint32_t primary_policy_code; uint32_t primary_stats_offset; uint32_t secondary_policy_code; uint32_t secondary_stats_offset;};struct acm_ste_stats_buffer { uint32_t ec_eval_count; uint32_t gt_eval_count; uint32_t ec_denied_count; uint32_t gt_denied_count; uint32_t ec_cachehit_count; uint32_t gt_cachehit_count;};struct acm_ssid_buffer { uint32_t len; ssidref_t ssidref; uint32_t policy_reference_offset; uint32_t primary_policy_code; uint32_t primary_max_types; uint32_t primary_types_offset; uint32_t secondary_policy_code; uint32_t secondary_max_types; uint32_t secondary_types_offset;};#endif/* * Local variables: * mode: C * c-set-style: "BSD" * c-basic-offset: 4 * tab-width: 4 * indent-tabs-mode: nil * End: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -