Appendix 3.A KACS ABI Reference

Every name, value, offset and size in this appendix is generated from pkm/uapi/pkm/ by pkm/tools/gen-kacs-abi.py, with struct layouts measured by compiling a probe against the real headers. Regenerate it whenever the ABI changes; do not edit it by hand.

The names here are the ones a program actually compiles against. Everything about the ABI a compiler cannot measure -- token query payload shapes, the specification spellings that differ from these names, what is documented elsewhere, and the kernel configuration -- is in the notes appendix, §3.D, which this generator does not touch.

3.A.1 Syscall numbers #

Signatures are read from the SYSCALL_DEFINE sites in pkm/kacs/.

NumberConstantSignature
1000SYS_KACS_OPEN_SELF_TOKENkacs_open_self_token(unsigned int flags, u32 access_mask)
1001SYS_KACS_OPEN_PROCESS_TOKENkacs_open_process_token(int pidfd, u32 access_mask)
1002SYS_KACS_OPEN_THREAD_TOKENkacs_open_thread_token(int pidfd, int tid, u32 access_mask)
1003SYS_KACS_CREATE_TOKENkacs_create_token(const void __user *spec, size_t spec_len)
1004SYS_KACS_CREATE_LOGON_SESSIONkacs_create_logon_session(const void __user *spec, size_t spec_len)
1005SYS_KACS_SET_PSBkacs_set_psb(int pidfd, u32 mitigations)
1006SYS_KACS_DESTROY_EMPTY_LOGON_SESSIONkacs_destroy_empty_logon_session(u64 auth_id)
1010SYS_KACS_OPEN_PEER_TOKENkacs_open_peer_token(int sock_fd)
1011SYS_KACS_IMPERSONATE_PEERkacs_impersonate_peer(int sock_fd)
1012SYS_KACS_REVERTkacs_revert(void)
1013SYS_KACS_SET_IMPERSONATION_LEVELkacs_set_impersonation_level(int sock_fd, u32 level)
1020SYS_KACS_OPENkacs_open(int dirfd, const char __user *path, struct kacs_open_how __user *uhow, size_t howsize, u32 __user *status_out)
1021SYS_KACS_GET_SDkacs_get_sd(int dirfd, const char __user *path, u32 security_info, void __user *buf, u32 buf_len, u32 flags)
1022SYS_KACS_SET_SDkacs_set_sd(int dirfd, const char __user *path, u32 security_info, const void __user *sd_buf, u32 sd_len, u32 flags)
1023SYS_KACS_ACCESS_CHECKkacs_access_check(const void __user *uargs)
1024SYS_KACS_ACCESS_CHECK_LISTkacs_access_check_list(const void __user *uargs, struct kacs_node_result __user *results, u32 results_count)
1025SYS_KACS_SET_CAAPkacs_set_caap(const void __user *policy_sid, u32 policy_sid_len, const void __user *spec, u32 spec_len)
1026SYS_KACS_GET_MOUNT_POLICYkacs_get_mount_policy(int fd, struct kacs_mount_policy_args __user *uargs, size_t argsize)
1027SYS_KACS_SET_MOUNT_POLICYkacs_set_mount_policy(int fd, struct kacs_mount_policy_args __user *uargs, size_t argsize)

uapi/pkm/syscall.h also registers the KMES and LCS numbers, 1090–1102, documented in their own chapters.

3.A.2 Structure layouts #

3.A.2.1 struct kacs_query_args #

Total size 16 bytes.

OffsetSizeTypeField
04__u32token_class
44__u32buf_len
88__u64buf_ptr

3.A.2.2 struct kacs_adjust_privs_args #

Total size 24 bytes.

OffsetSizeTypeField
04__u32count
44__u32_pad
88__u64data_ptr
168__u64previous_enabled

3.A.2.3 struct kacs_priv_entry #

Total size 8 bytes.

OffsetSizeTypeField
04__u32luid
44__u32attributes

3.A.2.4 struct kacs_adjust_groups_args #

Total size 144 bytes.

OffsetSizeTypeField
04__u32count
44__u32_pad
88__u64data_ptr
16128__u64``[16]previous_state

3.A.2.5 struct kacs_duplicate_args #

Total size 16 bytes.

OffsetSizeTypeField
04__u32access_mask
44__u32token_type
84__u32impersonation_level
124__s32result_fd

3.A.2.6 struct kacs_group_entry #

Total size 8 bytes.

OffsetSizeTypeField
04__u32index
44__u32enable

3.A.2.7 struct kacs_adjust_default_args #

Total size 16 bytes.

OffsetSizeTypeField
08__u64dacl_ptr
84__u32dacl_len
122__u16owner_index
142__u16group_index

3.A.2.8 struct kacs_restrict_args #

Total size 40 bytes.

OffsetSizeTypeField
08__u64privs_to_delete
84__u32num_deny_indices
124__u32num_restrict_sids
164__u32data_len
204__u32flags
248__u64data_ptr
324__s32result_fd
364__u32_pad

Total size 16 bytes.

OffsetSizeTypeField
04__s32elevated_fd
44__s32filtered_fd
88__u64logon_session_id

3.A.2.10 struct kacs_get_linked_token_args #

Total size 4 bytes.

OffsetSizeTypeField
04__s32result_fd

3.A.2.11 struct kacs_access_check_args #

Total size 136 bytes.

OffsetSizeTypeField
04__u32caller_size
44__s32token_fd
88__u64sd_ptr
164__u32sd_len
204__u32desired_access
244__u32mapping_read
284__u32mapping_write
324__u32mapping_execute
364__u32mapping_all
408__u64self_sid_ptr
484__u32self_sid_len
524__u32privilege_intent
568__u64object_tree_ptr
644__u32object_tree_count
684__u32_pad0
728__u64local_claims_ptr
804__u32local_claims_len
844__u32_pad1
888__u64granted_out_ptr
964__u32pip_type
1004__u32pip_trust
1048__u64audit_context_ptr
1124__u32audit_context_len
1164__u32_pad2
1208__u64continuous_audit_out_ptr
1288__u64staging_mismatch_out_ptr

3.A.2.12 struct kacs_object_type_entry #

Total size 20 bytes.

OffsetSizeTypeField
02__u16level
22__u16_reserved
416__u8``[16]guid

3.A.2.13 struct kacs_node_result #

Total size 8 bytes.

OffsetSizeTypeField
04__u32granted
44__s32status

3.A.2.14 struct kacs_open_how #

Total size 32 bytes.

OffsetSizeTypeField
04__u32desired_access
44__u32create_disposition
84__u32create_options
124__u32flags
168__u64sd_ptr
244__u32sd_len
284__u32__pad

3.A.2.15 struct kacs_mount_policy_args #

Total size 32 bytes.

OffsetSizeTypeField
04__u32policy
44__u32flags
84__u32generation
124__u32__pad0
168__u64template_sd_ptr
244__u32template_sd_len
284__u32__pad1

3.A.2.16 struct kacs_generic_mapping #

Total size 16 bytes.

OffsetSizeTypeField
04__u32read
44__u32write
84__u32execute
124__u32all

3.A.3 Token constants #

From uapi/pkm/token.h.

kacs_open_self_token (SYS_KACS_OPEN_SELF_TOKEN) flags.

ConstantValue
KACS_TOKEN_OPEN_REAL0x01 (1)

Per-handle token rights (the low 16 bits of a token access mask).

ConstantValue
KACS_TOKEN_ASSIGN_PRIMARY0x0001 (1)
KACS_TOKEN_DUPLICATE0x0002 (2)
KACS_TOKEN_IMPERSONATE0x0004 (4)
KACS_TOKEN_QUERY0x0008 (8)
KACS_TOKEN_QUERY_SOURCE0x0010 (16)
KACS_TOKEN_ADJUST_PRIVS0x0020 (32)
KACS_TOKEN_ADJUST_GROUPS0x0040 (64)
KACS_TOKEN_ADJUST_DEFAULT0x0080 (128)
KACS_TOKEN_ADJUST_INTERACTIVITY_SCOPE0x0100 (256)
KACS_TOKEN_ALL_ACCESS0x000F01FF

Token ioctl interface identifier.

ConstantValue
KACS_IOC_MAGIC0x4B (75)

kacs_priv_entry.attributes bits.

ConstantValue
KACS_PRIVILEGE_ATTR_ENABLED0x00000002 (2)
KACS_PRIVILEGE_ATTR_REMOVED0x00000004 (4)

kacs_adjust_privs bulk-reset flag (not a per-entry attribute).

ConstantValue
KACS_PRIVILEGE_RESET_ALL_DEFAULTS0x80000000

kacs_restrict_args.flags bits.

ConstantValue
KACS_TOKEN_RESTRICT_WRITE_RESTRICTED0x00000001 (1)

Token type (KACS_TOKEN_CLASS_TYPE).

ConstantValue
KACS_TOKEN_TYPE_PRIMARY0x01 (1)
KACS_TOKEN_TYPE_IMPERSONATION0x02 (2)

Impersonation level (KACS_TOKEN_CLASS_IMPERSONATION_LEVEL).

ConstantValue
KACS_IMLEVEL_ANONYMOUS0x00 (0)
KACS_IMLEVEL_IDENTIFICATION0x01 (1)
KACS_IMLEVEL_IMPERSONATION0x02 (2)
KACS_IMLEVEL_DELEGATION0x03 (3)

Elevation type (KACS_TOKEN_CLASS_ELEVATION_TYPE).

ConstantValue
KACS_ELEVATION_DEFAULT0x01 (1)
KACS_ELEVATION_FULL0x02 (2)
KACS_ELEVATION_LIMITED0x03 (3)

Mandatory-policy bits (KACS_TOKEN_CLASS_MANDATORY_POLICY).

ConstantValue
KACS_TOKEN_MANDATORY_POLICY_NO_WRITE_UP0x00000001 (1)
KACS_TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN0x00000002 (2)

Per-token audit-policy bits — the create-token spec audit_policy field (KACS_TOKEN_SPEC_OFF_AUDIT_POLICY). They select which access-check outcomes the token's object accesses generate audit events for.

ConstantValue
KACS_AUDIT_POLICY_OBJECT_ACCESS_SUCCESS0x00000001 (1)
KACS_AUDIT_POLICY_OBJECT_ACCESS_FAILURE0x00000002 (2)
KACS_AUDIT_POLICY_PRIVILEGE_USE_SUCCESS0x00000004 (4)
KACS_AUDIT_POLICY_PRIVILEGE_USE_FAILURE0x00000008 (8)

Logon type (KACS_TOKEN_CLASS_LOGON_TYPE).

ConstantValue
KACS_LOGON_TYPE_INTERACTIVE2
KACS_LOGON_TYPE_NETWORK3
KACS_LOGON_TYPE_BATCH4
KACS_LOGON_TYPE_SERVICE5
KACS_LOGON_TYPE_NETWORK_CLEARTEXT8
KACS_LOGON_TYPE_NEW_CREDENTIALS9

Maximum number of groups a token may carry.

ConstantValue
KACS_TOKEN_MAX_GROUPS1024

Number of 64-bit words in a group enabled-state bitmask (KACS_TOKEN_MAX_GROUPS / 64).

ConstantValue
KACS_TOKEN_GROUP_MASK_WORDS16

kacs_create_token (SYS_KACS_CREATE_TOKEN) spec wire format.

The (spec, len) buffer the syscall consumes is a fixed KACS_TOKEN_SPEC_HEADER_BYTES-byte header followed by variable-length sections at header-specified byte offsets. An offset/length (or offset/count) pair that is both zero means the section is absent. Sections may appear in any order; every offset+length is validated to fall within the buffer. The header is not a C struct (it carries packed mixed-width fields and crosses the syscall boundary as raw bytes); read each field at its KACS_TOKEN_SPEC_OFF_* offset. Its fields, in order: __u32 version must be KACS_TOKEN_SPEC_VERSION _u8 token_type KACS_TOKEN_TYPE _u8 impersonation_level KACS_IMLEVEL __u8 _reserved0[2] must be 0 __u32 integrity_rid integrity-level RID _u32 mandatory_policy KACS_TOKEN_MANDATORY_POLICY* bits _u64 privs_present privilege bitmask (KACS_SE*_PRIVILEGE) __u64 privs_enabled initially enabled privileges (subset) __u32 _reserved1 must be 0 (elevation set only by LINK_TOKENS) __u32 projected_uid Linux UID for credential projection __u32 projected_gid Linux GID for credential projection __u32 audit_policy per-token audit flags __u64 expiration expiry timestamp (0 = none) __u64 logon_session_id logon session ID (auth_id) __u32 owner_sid_index 0 = user SID, 1..N = caller group __u32 primary_group_index 0 = user SID, 1..N = caller group __u8 source_name[8] token source name __u64 source_id token source LUID __u32 user_sid_offset byte offset to the user SID __u32 groups_offset byte offset to the groups array __u32 groups_count number of group entries __u32 default_dacl_offset byte offset to the default DACL (0 = none) __u32 default_dacl_len default DACL byte length (0 = none) __u32 user_claims_offset byte offset to user claims (0 = none) __u32 user_claims_len user claims byte length (0 = none) __u32 device_claims_offset byte offset to device claims (0 = none) __u32 device_claims_len device claims byte length (0 = none) __u32 device_groups_offset byte offset to device groups (0 = none) __u32 device_groups_count number of device-group entries (0 = none) __u32 restricted_sids_offset byte offset to restricted SIDs (0 = none) __u32 restricted_sids_count number of restricted-SID entries (0 = none) __u32 confinement_sid_offset byte offset to confinement SID (0 = none) __u32 confinement_sid_len confinement SID byte length (0 = none) __u32 confinement_caps_offset byte offset to confinement caps (0 = none) __u32 confinement_caps_count number of confinement-cap entries (0 = none) __u8 confinement_exempt 1 = exempt from confinement __u8 write_restricted 1 = write-restricted mode __u8 user_deny_only 1 = user SID matches deny ACEs only __u8 isolation_boundary 1 = enable namespace filtering __u32 supp_gids_offset byte offset to supplementary GIDs (0 = none) __u32 supp_gids_count number of supplementary-GID entries (0 = none) __u32 restricted_device_groups_offset byte offset (0 = none) __u32 restricted_device_groups_count entry count (0 = none) __u64 origin originating logon-session LUID (0 = none) __u32 interactivity_scope interactive session number __u32 lcs_credentials_offset byte offset to the LCS extension (0 = none) A group/device-group/restricted- SID/confinement-cap/restricted-device-group entry is [__u32 sid_len][__u8 sid[sid_len]][__u32 attributes]. A supplementary-GIDs section is supp_gids_count little-endian __u32 GIDs. All multi-byte header and section scalars are little-endian.

ConstantValue
KACS_TOKEN_SPEC_VERSION2
KACS_TOKEN_SPEC_HEADER_BYTES192
KACS_TOKEN_SPEC_MIN_BYTES192
KACS_TOKEN_SPEC_MAX_BYTES65536

Byte offsets of the fixed token-spec header fields.

ConstantValue
KACS_TOKEN_SPEC_OFF_VERSION0
KACS_TOKEN_SPEC_OFF_TOKEN_TYPE4
KACS_TOKEN_SPEC_OFF_IMPERSONATION_LEVEL5
KACS_TOKEN_SPEC_OFF_RESERVED06
KACS_TOKEN_SPEC_OFF_INTEGRITY_RID8
KACS_TOKEN_SPEC_OFF_MANDATORY_POLICY12
KACS_TOKEN_SPEC_OFF_PRIVS_PRESENT16
KACS_TOKEN_SPEC_OFF_PRIVS_ENABLED24
KACS_TOKEN_SPEC_OFF_RESERVED132
KACS_TOKEN_SPEC_OFF_PROJECTED_UID36
KACS_TOKEN_SPEC_OFF_PROJECTED_GID40
KACS_TOKEN_SPEC_OFF_AUDIT_POLICY44
KACS_TOKEN_SPEC_OFF_EXPIRATION48
KACS_TOKEN_SPEC_OFF_LOGON_SESSION_ID56
KACS_TOKEN_SPEC_OFF_OWNER_SID_INDEX64
KACS_TOKEN_SPEC_OFF_PRIMARY_GROUP_INDEX68
KACS_TOKEN_SPEC_OFF_SOURCE_NAME72
KACS_TOKEN_SPEC_OFF_SOURCE_ID80
KACS_TOKEN_SPEC_OFF_USER_SID_OFFSET88
KACS_TOKEN_SPEC_OFF_GROUPS_OFFSET92
KACS_TOKEN_SPEC_OFF_GROUPS_COUNT96
KACS_TOKEN_SPEC_OFF_DEFAULT_DACL_OFFSET100
KACS_TOKEN_SPEC_OFF_DEFAULT_DACL_LEN104
KACS_TOKEN_SPEC_OFF_USER_CLAIMS_OFFSET108
KACS_TOKEN_SPEC_OFF_USER_CLAIMS_LEN112
KACS_TOKEN_SPEC_OFF_DEVICE_CLAIMS_OFFSET116
KACS_TOKEN_SPEC_OFF_DEVICE_CLAIMS_LEN120
KACS_TOKEN_SPEC_OFF_DEVICE_GROUPS_OFFSET124
KACS_TOKEN_SPEC_OFF_DEVICE_GROUPS_COUNT128
KACS_TOKEN_SPEC_OFF_RESTRICTED_SIDS_OFFSET132
KACS_TOKEN_SPEC_OFF_RESTRICTED_SIDS_COUNT136
KACS_TOKEN_SPEC_OFF_CONFINEMENT_SID_OFFSET140
KACS_TOKEN_SPEC_OFF_CONFINEMENT_SID_LEN144
KACS_TOKEN_SPEC_OFF_CONFINEMENT_CAPS_OFFSET148
KACS_TOKEN_SPEC_OFF_CONFINEMENT_CAPS_COUNT152
KACS_TOKEN_SPEC_OFF_CONFINEMENT_EXEMPT156
KACS_TOKEN_SPEC_OFF_WRITE_RESTRICTED157
KACS_TOKEN_SPEC_OFF_USER_DENY_ONLY158
KACS_TOKEN_SPEC_OFF_ISOLATION_BOUNDARY159
KACS_TOKEN_SPEC_OFF_SUPP_GIDS_OFFSET160
KACS_TOKEN_SPEC_OFF_SUPP_GIDS_COUNT164
KACS_TOKEN_SPEC_OFF_RESTRICTED_DEVICE_GROUPS_OFFSET168
KACS_TOKEN_SPEC_OFF_RESTRICTED_DEVICE_GROUPS_COUNT172
KACS_TOKEN_SPEC_OFF_ORIGIN176
KACS_TOKEN_SPEC_OFF_INTERACTIVITY_SCOPE184
KACS_TOKEN_SPEC_OFF_LCS_CREDENTIALS_OFFSET188

Byte length of the fixed token-source-name field.

ConstantValue
KACS_TOKEN_SPEC_SOURCE_NAME_BYTES8

Optional LCS registry-credentials extension, located at the token-spec header's lcs_credentials_offset. The section is a fixed KACS_TOKEN_LCS_EXT_HEADER_BYTES-byte header bounded by the next active variable-section offset or the end of the spec; it is consumed exactly (trailing bytes are malformed). Header fields, in order: __u32 version must be KACS_TOKEN_LCS_EXT_VERSION __u32 _reserved must be 0 __u32 scope_count private hive scope GUIDs (<= max) __u32 private_layer_count private layer names (<= max) Payload: scope_count raw 16-byte GUIDs, then private_layer_count little-endian __u32 name byte lengths, then the concatenated UTF-8 layer names. Scope GUIDs must be non-nil and unique; layer names must be 1.. KACS_TOKEN_LCS_MAX_LAYER_NAME_BYTES bytes, must not contain '\', '/', or NUL, and must be unique under case-insensitive matching.

ConstantValue
KACS_TOKEN_LCS_EXT_VERSION1
KACS_TOKEN_LCS_EXT_HEADER_BYTES16
KACS_TOKEN_LCS_SCOPE_GUID_BYTES16
KACS_TOKEN_LCS_MAX_SCOPE_GUIDS256
KACS_TOKEN_LCS_MAX_PRIVATE_LAYERS256
KACS_TOKEN_LCS_MAX_LAYER_NAME_BYTES255

Byte offsets of the fixed LCS-extension header fields.

ConstantValue
KACS_TOKEN_LCS_EXT_OFF_VERSION0
KACS_TOKEN_LCS_EXT_OFF_RESERVED4
KACS_TOKEN_LCS_EXT_OFF_SCOPE_COUNT8
KACS_TOKEN_LCS_EXT_OFF_PRIVATE_LAYER_COUNT12

kacs_create_logon_session (SYS_KACS_CREATE_LOGON_SESSION) spec wire format.

The (spec, len) buffer the syscall consumes is, in order: _u8 logon_type one of KACS_LOGON_TYPE* above __le16 auth_pkg_len byte length of the auth-package name __u8 auth_pkg[auth_pkg_len] auth-package name (valid UTF-8) __le32 user_sid_len byte length of the user SID __u8 user_sid[user_sid_len] binary SID of the authenticated user The buffer is consumed exactly: 7 + auth_pkg_len + user_sid_len must equal len. The kernel assigns the session ID and derives the logon SID from it.

ConstantValue
KACS_LOGON_SESSION_SPEC_MIN_BYTES15
KACS_LOGON_SESSION_SPEC_MAX_BYTES4096

Byte offsets of the fixed-position session-spec fields.

ConstantValue
KACS_LOGON_SESSION_SPEC_OFF_LOGON_TYPE0
KACS_LOGON_SESSION_SPEC_OFF_AUTH_PKG_LEN1
KACS_LOGON_SESSION_SPEC_OFF_AUTH_PKG3

Token-handle ioctls.

ConstantValue
KACS_IOC_QUERY0xC0104B00
KACS_IOC_ADJUST_PRIVS0x40184B01
KACS_IOC_DUPLICATE0xC0104B02
KACS_IOC_INSTALL0x00004B03
KACS_IOC_RESTRICT0xC0284B04
KACS_IOC_LINK_TOKENS0x40104B05
KACS_IOC_GET_LINKED_TOKEN0xC0044B06
KACS_IOC_ADJUST_GROUPS0x40904B07
KACS_IOC_IMPERSONATE0x00004B08
KACS_IOC_ADJUST_DEFAULT0x40104B09
KACS_IOC_ADJUST_INTERACTIVITY_SCOPE0x40044B0A

Token information classes (kacs_query_args.token_class).

ConstantValue
KACS_TOKEN_CLASS_USER0x01 (1)
KACS_TOKEN_CLASS_GROUPS0x02 (2)
KACS_TOKEN_CLASS_PRIVILEGES0x03 (3)
KACS_TOKEN_CLASS_TYPE0x04 (4)
KACS_TOKEN_CLASS_INTEGRITY_LEVEL0x05 (5)
KACS_TOKEN_CLASS_OWNER0x06 (6)
KACS_TOKEN_CLASS_PRIMARY_GROUP0x07 (7)
KACS_TOKEN_CLASS_INTERACTIVITY_SCOPE0x08 (8)
KACS_TOKEN_CLASS_RESTRICTED_SIDS0x09 (9)
KACS_TOKEN_CLASS_SOURCE0x0A (10)
KACS_TOKEN_CLASS_STATISTICS0x0B (11)
KACS_TOKEN_CLASS_ORIGIN0x0C (12)
KACS_TOKEN_CLASS_ELEVATION_TYPE0x0D (13)
KACS_TOKEN_CLASS_DEVICE_GROUPS0x0E (14)
KACS_TOKEN_CLASS_APPCONTAINER_SID0x0F (15)
KACS_TOKEN_CLASS_CAPABILITIES0x10 (16)
KACS_TOKEN_CLASS_MANDATORY_POLICY0x11 (17)
KACS_TOKEN_CLASS_LOGON_TYPE0x12 (18)
KACS_TOKEN_CLASS_LOGON_SID0x13 (19)
KACS_TOKEN_CLASS_DEFAULT_DACL0x14 (20)
KACS_TOKEN_CLASS_IMPERSONATION_LEVEL0x15 (21)
KACS_TOKEN_CLASS_USER_CLAIMS0x16 (22)
KACS_TOKEN_CLASS_DEVICE_CLAIMS0x17 (23)
KACS_TOKEN_CLASS_PROJECTED_SUPPLEMENTARY_GIDS0x18 (24)

Privileges, as single-bit masks within a token's 64-bit privilege word (present / enabled / enabled-by-default / used are each one such word). Named for the Windows privilege identifiers (SeTcbPrivilege, …).

ConstantValue
KACS_SE_CREATE_TOKEN_PRIVILEGE4
KACS_SE_ASSIGN_PRIMARY_TOKEN_PRIVILEGE8
KACS_SE_LOCK_MEMORY_PRIVILEGE16
KACS_SE_INCREASE_QUOTA_PRIVILEGE32
KACS_SE_TCB_PRIVILEGE128
KACS_SE_SECURITY_PRIVILEGE256
KACS_SE_TAKE_OWNERSHIP_PRIVILEGE512
KACS_SE_LOAD_DRIVER_PRIVILEGE1024
KACS_SE_SYSTEM_PROFILE_PRIVILEGE2048
KACS_SE_SYSTEMTIME_PRIVILEGE4096
KACS_SE_PROFILE_SINGLE_PROCESS_PRIVILEGE8192
KACS_SE_INCREASE_BASE_PRIORITY_PRIVILEGE16384
KACS_SE_BACKUP_PRIVILEGE131072
KACS_SE_RESTORE_PRIVILEGE262144
KACS_SE_SHUTDOWN_PRIVILEGE524288
KACS_SE_DEBUG_PRIVILEGE0x100000 (1048576)
KACS_SE_AUDIT_PRIVILEGE0x200000 (2097152)
KACS_SE_CHANGE_NOTIFY_PRIVILEGE0x800000 (8388608)
KACS_SE_REMOTE_SHUTDOWN_PRIVILEGE0x1000000 (16777216)
KACS_SE_MANAGE_VOLUME_PRIVILEGE0x10000000 (268435456)
KACS_SE_IMPERSONATE_PRIVILEGE0x20000000 (536870912)
KACS_SE_RELABEL_PRIVILEGE0x100000000 (4294967296)
KACS_SE_CREATE_SYMBOLIC_LINK_PRIVILEGE0x800000000 (34359738368)
KACS_SE_BIND_PRIVILEGED_PORT_PRIVILEGE0x8000000000000000 (9223372036854775808)

3.A.4 AccessCheck constants #

From uapi/pkm/access.h.

Full size of kacs_access_check_args the current kernel copies.

ConstantValue
KACS_ACCESS_CHECK_ARGS_SIZE136

Minimum caller_size the kernel accepts (the v1 / v0.20 layout).

ConstantValue
KACS_ACCESS_CHECK_ARGS_V1_SIZE40

Byte size of one kacs_object_type_entry in the object-type tree array.

ConstantValue
KACS_OBJECT_TYPE_ENTRY_SIZE20

Largest object-audit-context buffer the kernel accepts.

ConstantValue
KACS_ACCESS_CHECK_MAX_AUDIT_CONTEXT_LEN4096

Largest @Local claims blob the kernel accepts (local_claims_ptr).

ConstantValue
KACS_ACCESS_CHECK_MAX_LOCAL_CLAIMS_LEN65536

Largest object-type tree entry count the kernel accepts.

ConstantValue
KACS_ACCESS_CHECK_MAX_OBJECT_TYPE_COUNT1024

Claim value types — the discriminant of one attribute in the @Local claims array (local_claims_ptr).

ConstantValue
KACS_CLAIM_TYPE_INT640x0001 (1)
KACS_CLAIM_TYPE_UINT640x0002 (2)
KACS_CLAIM_TYPE_STRING0x0003 (3)
KACS_CLAIM_TYPE_SID0x0005 (5)
KACS_CLAIM_TYPE_BOOLEAN0x0006 (6)
KACS_CLAIM_TYPE_OCTET0x0010 (16)

Claim attribute flags.

ConstantValue
KACS_CLAIM_ATTR_CASE_SENSITIVE0x0002 (2)
KACS_CLAIM_ATTR_USE_FOR_DENY_ONLY0x0004 (4)
KACS_CLAIM_ATTR_DISABLED0x0010 (16)

Central Access Policy (CAAP) spec wire format — the (spec, spec_len) buffer kacs_set_caap (SYS_KACS_SET_CAAP) consumes. A non-empty spec replaces the policy identified by the call's policy SID; a NULL/zero spec removes it. The buffer is a fixed prefix followed by rule_count per-rule sections, and is consumed exactly (trailing bytes are rejected). It is not a C struct (the rule sections are variable-length); read it as raw bytes: __u8 version must be KACS_CAAP_SPEC_VERSION __le32 rule_count number of rules that follow (<= max) rule_count * { __le32 applies_to_len [__u8 applies_to[applies_to_len]] conditional-expression bytecode; 0 = always __le32 effective_dacl_len [__u8 effective_dacl[...]] binary ACL; length MUST be nonzero __le32 effective_sacl_len [__u8 effective_sacl[...]] (0 = none) __le32 staged_dacl_len [__u8 staged_dacl[...]] (0 = none) __le32 staged_sacl_len [__u8 staged_sacl[...]] (0 = none) } Every length- prefixed field uses a little-endian __u32 length and is bounded by KACS_CAAP_MAX_FIELD_BYTES; ACL payloads additionally parse under the security-descriptor size limit (KACS_CAAP_MAX_ACL_BYTES). ACLs use the binary ACL format from <pkm/sd.h>; applies_to is conditional-ACE bytecode.

ConstantValue
KACS_CAAP_SPEC_VERSION0x01 (1)
KACS_CAAP_MAX_SPEC_BYTES262144
KACS_CAAP_MAX_RULE_COUNT256
KACS_CAAP_MAX_FIELD_BYTES65536
KACS_CAAP_MAX_ACL_BYTES65535

Byte offsets of the fixed CAAP-spec prefix fields.

ConstantValue
KACS_CAAP_SPEC_OFF_VERSION0
KACS_CAAP_SPEC_OFF_RULE_COUNT1

Byte length of the fixed CAAP-spec prefix (version + rule_count).

ConstantValue
KACS_CAAP_SPEC_PREFIX_BYTES5

3.A.5 File and open constants #

From uapi/pkm/file.h.

Minimum caller-supplied size accepted for each argument block.

ConstantValue
KACS_OPEN_HOW_MIN_SIZE16
KACS_MOUNT_POLICY_ARGS_MIN_SIZE16

Create dispositions (kacs_open_how.create_disposition).

ConstantValue
KACS_DISPOSITION_SUPERSEDE0
KACS_DISPOSITION_OPEN1
KACS_DISPOSITION_CREATE2
KACS_DISPOSITION_OPEN_IF3
KACS_DISPOSITION_OVERWRITE4
KACS_DISPOSITION_OVERWRITE_IF5

Create options (kacs_open_how.create_options).

ConstantValue
KACS_CREATE_OPT_DIRECTORY0x0001 (1)
KACS_CREATE_OPT_DELETE_ON_CLOSE0x0002 (2)

kacs_open_how.flags bits.

ConstantValue
KACS_BACKUP_INTENT0x00000001 (1)
KACS_RESTORE_INTENT0x00000002 (2)

File and directory object-specific access rights (the low 16 bits of a file access mask).

The directory aliases name the same bit as the file right it acts as for a directory object.

ConstantValue
KACS_FILE_READ_DATA0x00000001 (1)
KACS_FILE_WRITE_DATA0x00000002 (2)
KACS_FILE_APPEND_DATA0x00000004 (4)
KACS_FILE_READ_EA0x00000008 (8)
KACS_FILE_WRITE_EA0x00000010 (16)
KACS_FILE_EXECUTE0x00000020 (32)
KACS_FILE_DELETE_CHILD0x00000040 (64)
KACS_FILE_READ_ATTRIBUTES0x00000080 (128)
KACS_FILE_WRITE_ATTRIBUTES0x00000100 (256)
KACS_FILE_LIST_DIRECTORY1
KACS_FILE_TRAVERSE32
KACS_FILE_ADD_FILE2
KACS_FILE_ADD_SUBDIRECTORY4

Mount-policy values (kacs_mount_policy_args.policy).

ConstantValue
KACS_MOUNT_POLICY_UNMANAGED1
KACS_MOUNT_POLICY_DENY_MISSING2
KACS_MOUNT_POLICY_SYNTHESIZE_EPHEMERAL3
KACS_MOUNT_POLICY_SYNTHESIZE_PERSISTENT4

Status word kacs_open writes back, describing what happened to the file.

ConstantValue
KACS_STATUS_OPENED1
KACS_STATUS_CREATED2
KACS_STATUS_OVERWRITTEN3
KACS_STATUS_SUPERSEDED4

3.A.6 Process access rights #

From uapi/pkm/process.h.

KACS process object-specific access rights (the low 16 bits of a process access mask).

Named for the Windows process rights; an access check folds the generic bits (<pkm/sd.h>) into these via the process generic mapping.

ConstantValue
KACS_PROCESS_TERMINATE0x00000001 (1)
KACS_PROCESS_SIGNAL0x00000002 (2)
KACS_PROCESS_VM_READ0x00000010 (16)
KACS_PROCESS_VM_WRITE0x00000020 (32)
KACS_PROCESS_DUP_HANDLE0x00000040 (64)
KACS_PROCESS_SET_INFORMATION0x00000200 (512)
KACS_PROCESS_QUERY_INFORMATION0x00000400 (1024)
KACS_PROCESS_SUSPEND_RESUME0x00000800 (2048)
KACS_PROCESS_QUERY_LIMITED0x00001000 (4096)

3.A.7 Process mitigation bits #

From uapi/pkm/psb.h.

Process Security Block (PSB) process-mitigation bits.

The mitigations argument of kacs_set_psb (SYS_KACS_SET_PSB) is a bitmask of these flags. Setting a bit is activation-backed: KACS either places the target process in the protected state (or verifies it already satisfies the invariant) before committing, and rejects later operations that would disable the protection. Each mitigation is enforced at its own enforcement point and persists across exec. Only the bits in KACS_MIT_ALL are valid; any other bit set in the request is rejected. KACS_MIT_CFI is a legacy alias: requesting it sets both KACS_MIT_CFIF and KACS_MIT_CFIB, and the alias bit itself is not retained.

ConstantValueNotes
KACS_MIT_WXP0x001 (1)Write-XOR-Execute protection
KACS_MIT_TLP0x002 (2)Trusted Library Paths
KACS_MIT_LSV0x004 (4)Library Signature Verification
KACS_MIT_CFI0x008 (8)legacy alias: CFIF | CFIB
KACS_MIT_UI_ACCESS0x010 (16)UI interaction (reserved)
KACS_MIT_NO_CHILD0x020 (32)cannot fork (one-way)
KACS_MIT_CFIF0x040 (64)forward-edge CFI (Intel IBT)
KACS_MIT_CFIB0x080 (128)backward-edge CFI (shadow stack)
KACS_MIT_PIE0x100 (256)reject non-PIE binaries at exec
KACS_MIT_SML0x200 (512)speculation mitigation lock

All valid mitigation bits OR'd together — the accepted-request mask.

ConstantValue
KACS_MIT_ALL0x3FF (1023)

3.A.8 Security descriptor constants #

From uapi/pkm/sd.h.

Byte length of the self-relative security-descriptor header.

ConstantValue
KACS_SD_HEADER_BYTES20

SECURITY_INFORMATION selector bits — which components of a security descriptor a kacs_get_sd / kacs_set_sd call reads or writes.

ConstantValue
KACS_SECINFO_OWNER0x00000001 (1)
KACS_SECINFO_GROUP0x00000002 (2)
KACS_SECINFO_DACL0x00000004 (4)
KACS_SECINFO_SACL0x00000008 (8)
KACS_SECINFO_LABEL0x00000010 (16)

SECURITY_DESCRIPTOR_CONTROL bits — the SD header control field.

ConstantValue
KACS_SD_OWNER_DEFAULTED0x0001 (1)
KACS_SD_GROUP_DEFAULTED0x0002 (2)
KACS_SD_DACL_PRESENT0x0004 (4)
KACS_SD_DACL_DEFAULTED0x0008 (8)
KACS_SD_SACL_PRESENT0x0010 (16)
KACS_SD_SACL_DEFAULTED0x0020 (32)
KACS_SD_DACL_TRUSTED0x0040 (64)
KACS_SD_SERVER_SECURITY0x0080 (128)
KACS_SD_DACL_AUTO_INHERIT_REQ0x0100 (256)
KACS_SD_SACL_AUTO_INHERIT_REQ0x0200 (512)
KACS_SD_DACL_AUTO_INHERITED0x0400 (1024)
KACS_SD_SACL_AUTO_INHERITED0x0800 (2048)
KACS_SD_DACL_PROTECTED0x1000 (4096)
KACS_SD_SACL_PROTECTED0x2000 (8192)
KACS_SD_RM_CONTROL_VALID0x4000 (16384)
KACS_SD_SELF_RELATIVE0x8000 (32768)

Access-mask bits — standard rights (bits 16-24) and generic rights (bits 28-31).

The low 16 bits of a mask are object-class specific; see <pkm/file.h> and <pkm/token.h> for those.

ConstantValue
KACS_ACCESS_DELETE0x00010000 (65536)
KACS_ACCESS_READ_CONTROL0x00020000
KACS_ACCESS_WRITE_DAC0x00040000
KACS_ACCESS_WRITE_OWNER0x00080000
KACS_ACCESS_SYNCHRONIZE0x00100000
KACS_ACCESS_ACCESS_SYSTEM_SECURITY0x01000000
KACS_ACCESS_MAXIMUM_ALLOWED0x02000000
KACS_ACCESS_GENERIC_ALL0x10000000
KACS_ACCESS_GENERIC_EXECUTE0x20000000
KACS_ACCESS_GENERIC_WRITE0x40000000
KACS_ACCESS_GENERIC_READ0x80000000

ACE types — the ace_type byte of an ACE header (MS-DTYP 2.4.4.1).

ConstantValue
KACS_ACE_TYPE_ACCESS_ALLOWED0x00 (0)
KACS_ACE_TYPE_ACCESS_DENIED0x01 (1)
KACS_ACE_TYPE_SYSTEM_AUDIT0x02 (2)
KACS_ACE_TYPE_SYSTEM_ALARM0x03 (3)
KACS_ACE_TYPE_ACCESS_ALLOWED_COMPOUND0x04 (4)
KACS_ACE_TYPE_ACCESS_ALLOWED_OBJECT0x05 (5)
KACS_ACE_TYPE_ACCESS_DENIED_OBJECT0x06 (6)
KACS_ACE_TYPE_SYSTEM_AUDIT_OBJECT0x07 (7)
KACS_ACE_TYPE_SYSTEM_ALARM_OBJECT0x08 (8)
KACS_ACE_TYPE_ACCESS_ALLOWED_CALLBACK0x09 (9)
KACS_ACE_TYPE_ACCESS_DENIED_CALLBACK0x0A (10)
KACS_ACE_TYPE_ACCESS_ALLOWED_CALLBACK_OBJECT0x0B (11)
KACS_ACE_TYPE_ACCESS_DENIED_CALLBACK_OBJECT0x0C (12)
KACS_ACE_TYPE_SYSTEM_AUDIT_CALLBACK0x0D (13)
KACS_ACE_TYPE_SYSTEM_ALARM_CALLBACK0x0E (14)
KACS_ACE_TYPE_SYSTEM_AUDIT_CALLBACK_OBJECT0x0F (15)
KACS_ACE_TYPE_SYSTEM_ALARM_CALLBACK_OBJECT0x10 (16)
KACS_ACE_TYPE_SYSTEM_MANDATORY_LABEL0x11 (17)
KACS_ACE_TYPE_SYSTEM_RESOURCE_ATTRIBUTE0x12 (18)
KACS_ACE_TYPE_SYSTEM_SCOPED_POLICY_ID0x13 (19)
KACS_ACE_TYPE_SYSTEM_PROCESS_TRUST_LABEL0x14 (20)
KACS_ACE_TYPE_SYSTEM_ACCESS_FILTER0x15 (21)

ACE header ace_flags byte — inheritance and audit control.

ConstantValue
KACS_ACE_FLAG_OBJECT_INHERIT0x01 (1)
KACS_ACE_FLAG_CONTAINER_INHERIT0x02 (2)
KACS_ACE_FLAG_NO_PROPAGATE_INHERIT0x04 (4)
KACS_ACE_FLAG_INHERIT_ONLY0x08 (8)
KACS_ACE_FLAG_INHERITED0x10 (16)
KACS_ACE_FLAG_SUCCESSFUL_ACCESS0x40 (64)
KACS_ACE_FLAG_FAILED_ACCESS0x80 (128)

Mandatory-label policy bits — the __le32 access mask of a KACS_ACE_TYPE_SYSTEM_MANDATORY_LABEL ACE. They control which DACL- granted rights a caller whose integrity level does not dominate the object's label (the "up" direction) is denied. Each bit suppresses the rights mapped from the corresponding generic class; unknown bits MUST be ignored.

ConstantValue
KACS_SYSTEM_MANDATORY_LABEL_NO_READ_UP0x00000001 (1)
KACS_SYSTEM_MANDATORY_LABEL_NO_WRITE_UP0x00000002 (2)
KACS_SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP0x00000004 (4)

Object-ACE body Flags field — the __le32 at object-ACE body offset 8, distinct from the 1-byte ace_flags header field above. Indicates which optional GUIDs the object-ACE body carries.

ConstantValue
KACS_ACE_OBJECT_TYPE_PRESENT0x00000001 (1)
KACS_ACE_INHERITED_OBJECT_TYPE_PRESENT0x00000002 (2)

3.A.9 SID constants #

From uapi/pkm/sid.h.

Largest sub_authority_count a valid SID may declare.

ConstantValue
KACS_SID_MAX_SUB_AUTHORITIES15

Encoded byte length of a SID with the given sub-authority count.

ConstantValue
KACS_SID_BYTE_LEN(count)(8 + 4 * (count))

SID_AND_ATTRIBUTES "Attributes" bits (MS-DTYP 2.4.4).

These describe how a group or restricted SID participates in an access check. MS-DTYP names them for groups; they apply to any SID_AND_ATTRIBUTES entry.

ConstantValue
KACS_SID_GROUP_MANDATORY0x00000001 (1)
KACS_SID_GROUP_ENABLED_BY_DEFAULT0x00000002 (2)
KACS_SID_GROUP_ENABLED0x00000004 (4)
KACS_SID_GROUP_OWNER0x00000008 (8)
KACS_SID_GROUP_USE_FOR_DENY_ONLY0x00000010 (16)
KACS_SID_GROUP_INTEGRITY0x00000020 (32)
KACS_SID_GROUP_INTEGRITY_ENABLED0x00000040 (64)
KACS_SID_GROUP_RESOURCE0x20000000
KACS_SID_GROUP_LOGON_ID0xC0000000

3.A.10 Tracepoint diagnostic codes #

From uapi/pkm/trace.h.

kacs_access_decision reason — why a KACS access hook took the return path it did.

Emitted by the kacs:kacs_file_access / _file_open / _native_open _inode_file_access / _inode_permission events. Verdict (allow vs deny) is a separate signal, read from the ret field (0 == allow).

ConstantValueNotes
KACS_TR_DECISION0resolved allow/deny
KACS_TR_BAD_ARGS1NULL/zero argument guard
KACS_TR_NO_ISEC2inode has no i_security blob
KACS_TR_UNMANAGED3superblock mount policy UNMANAGED
KACS_TR_PIP_CONTEXT4current PIP context unavailable
KACS_TR_NO_TOKEN5no effective subject token
KACS_TR_NO_DENTRY_ALIAS6inode has no dentry alias yet
KACS_TR_DELETE_ON_CLOSE_PENDING7open of a delete-on-close file
KACS_TR_NATIVE_STAMP8native-open granted-access stamp
KACS_TR_NATIVE_ARM9native-open delete-on-close arm
KACS_TR_STAMP10legacy-open granted-access stamp
KACS_TR_LAZY_DENTRY_RELOOKUP11native create lazy re-lookup
KACS_TR_NEGATIVE_AFTER_CREATE12negative dentry after create
KACS_TR_CHANGE_NOTIFY_PRIV13traverse via CHANGE_NOTIFY priv
KACS_TR_CHANGE_NOTIFY_PRIV_EXHAUSTED14CHANGE_NOTIFY priv use exhausted

kacs_sd_cache reason — the inode security-descriptor cache outcome.

The lookup miss codes disambiguate the three cache-absent paths that were previously an indistinguishable NULL return (no cache / stale generation missing-but-synthesis-required); the corrupt codes name why a stored SD was rejected. Emitted by kacs:kacs_sd_cache_lookup / _corrupt.

ConstantValueNotes
KACS_SDC_HIT0current, valid cache present
KACS_SDC_MISS_NONE1no cache attached
KACS_SDC_MISS_STALE_GEN2cache present but stale generation
KACS_SDC_MISS_NEEDS_SYNTH3missing SD requires synthesis
KACS_SDC_CORRUPT_EMPTY_OR_OVERSIZE4stored SD zero-length or oversize
KACS_SDC_CORRUPT_VALIDATE_FAIL5stored SD failed validation

kacs_process_access reason — the outcome of a cross-process access decision (signal, ptrace, scheduler/attribute, prlimit). The reason distinguishes the paths that all surface as -EACCES: an SD denial, a PIP-based denial, a denial rescued (or not) by SeDebugPrivilege, and a PIP-dominance failure. Emitted by kacs:kacs_process_access.

ConstantValueNotes
KACS_PA_ALLOW0access granted
KACS_PA_BAD_ARGS1NULL subject/target guard
KACS_PA_NO_TARGET2target has no process state/SD
KACS_PA_NO_SD3target process SD unavailable
KACS_PA_SD_ERROR4SD check failed (non-EACCES)
KACS_PA_PIP_DENIED5denied by process-integrity policy
KACS_PA_DEBUG_RESCUE6SD denial rescued by SeDebugPrivilege
KACS_PA_DEBUG_DENIED7denied; no usable SeDebugPrivilege
KACS_PA_PIP_DOMINANCE8caller PIP does not dominate target

kacs_exec reason — an exec/bprm credential or PIP transition.

Distinguishes the uid/gid-change gate outcomes, the exec primary-token derivation paths and their failures, the exec file integrity-label lookup failures, and the two commit-time transitions. Verdict is the ret field. Emitted by kacs:kacs_exec.

ConstantValueNotes
KACS_EXEC_CREDS_ALLOW0exec cred transition allowed
KACS_EXEC_BAD_ARGS1NULL cred/token guard
KACS_EXEC_ID_CHANGE_NO_TOKEN2uid/gid change, no subject token
KACS_EXEC_ID_CHANGE_PRIV_UNSUPPORTED3id change + ASSIGN_PRIMARY_TOKEN priv
KACS_EXEC_TOKEN_NPM_DERIVED4exec token derived via new-process-min
KACS_EXEC_TOKEN_CLONE5exec token via primary clone fallback
KACS_EXEC_NPM_NO_FILE6new-process-min needs file, none supplied
KACS_EXEC_NPM_DERIVE_FAIL7new_process_min_exec derivation failed
KACS_EXEC_TOKEN_INSTALL_FAIL8install token ref on new cred failed
KACS_EXEC_TOKEN_CLONE_FAIL9primary token clone returned NULL
KACS_EXEC_INTEGRITY_NO_ISEC10exec file inode has no i_security
KACS_EXEC_INTEGRITY_NO_CACHE11exec file SD cache absent
KACS_EXEC_INTEGRITY_INVALID_SD12exec file cached SD invalid/empty
KACS_EXEC_IMPERSONATION_REVERT_FAIL13bprm impersonation revert failed
KACS_EXEC_PIP_COMMITTED14pending exec PIP committed at commit
KACS_EXEC_UMH_NOT_TCB15usermodehelper exec below PeiosTcb trust
KACS_EXEC_SIGNATURE_UNVERIFIABLE16exec refused: signature could not be verified

kacs_signing reason — code-signature verification outcomes and the distinct reject reasons of the signing-material probe. Only source enum, verified flag, PIP tier codes, file length, reason, and ret are recorded — never key, signature, xattr, or file bytes. Emitted by kacs:kacs_signing_verify _crypto / _probe.

ConstantValueNotes
KACS_SIG_UNSIGNED0material source NONE (unsigned)
KACS_SIG_BAD_KEY_TABLE1key table malformed / bad args
KACS_SIG_NO_KEY_MATCH2no key verified the signature
KACS_SIG_VERIFIED3a key verified; trust assigned
KACS_SIG_CRYPTO_UNAVAILABLE4mldsa65 tfm allocation failed
KACS_SIG_CRYPTO_MISMATCH5set-pubkey/verify returned nonzero
KACS_SIG_PROBE_FOUND6valid signature material committed
KACS_SIG_ELF_MAGIC_READ7failed reading ELF magic
KACS_SIG_ELF_SHORT_EHDR8file too short for Elf64_Ehdr
KACS_SIG_ELF_EHDR_READ9failed reading ELF header
KACS_SIG_ELF_BAD_IDENT10unsupported e_ident class/data/version
KACS_SIG_ELF_BAD_SHTABLE11bad shentsize/shstrndx
KACS_SIG_ELF_SHDRS_RANGE12section-header table offset/len out of range
KACS_SIG_ELF_SHSTR_READ13failed reading shstrtab section header
KACS_SIG_ELF_STRTAB_RANGE14shstrtab offset/len out of range
KACS_SIG_ELF_SHDR_READ15failed reading a section header
KACS_SIG_ELF_NAME_READ16failed reading a section name
KACS_SIG_ELF_BAD_SIG_SECTION17sig section wrong type/size/range
KACS_SIG_ELF_BAD_BLOB18sig blob read failed or invalid
KACS_SIG_ELF_HASH_FAIL19hashing failed for ELF sig
KACS_SIG_XATTR_BAD_BLOB20xattr sig blob invalid
KACS_SIG_XATTR_HASH_FAIL21hashing failed for xattr sig
KACS_SIG_SIZE_CHANGED22file size changed during probe (TOCTOU)

kacs_socket reason — the outcome of an AF_UNIX socket SD / impersonation hook.

Distinguishes the guard, not-applicable, and verdict paths that otherwise collapse into an indistinguishable -EACCES. Verdict is the ret field. No address, pathname, or SD bytes are recorded.

ConstantValueNotes
KACS_SOCK_BAD_ARGS0NULL/guard argument rejected
KACS_SOCK_NOT_UNIX1not AF_UNIX / unsupported type
KACS_SOCK_NO_SECURITY2sock has no sk_security blob
KACS_SOCK_NO_TOKEN3no effective subject/client token
KACS_SOCK_BAD_LEVEL4invalid impersonation level
KACS_SOCK_WRONG_STATE5socket state forbids the op
KACS_SOCK_NO_PEER_TOKEN6no captured peer token present
KACS_SOCK_PIP_CONTEXT7caller PIP context unavailable
KACS_SOCK_SD_DECISION8socket-SD check produced verdict
KACS_SOCK_NO_SD9no socket SD; allowed without check
KACS_SOCK_HAVE_SD10socket SD present; check performed
KACS_SOCK_ALREADY_BOUND11socket SD already installed
KACS_SOCK_BIND12abstract-socket SD bind result
KACS_SOCK_CONNECT13unix_stream_connect result
KACS_SOCK_LEVEL_SET14impersonation level updated
KACS_SOCK_OPEN_TOKEN15open peer-token fd result
KACS_SOCK_IMPERSONATE16impersonate peer result

kacs_namespace stage — which sub-decision of a namespace-mutation hook a record describes.

Single-decision ops report PRIMARY; multi-stage ops (link, rename, delete fallback) tag each distinct verdict. Verdict is the ret field. Never records a pathname. Emitted by the kacs:kacs_inode_* events.

ConstantValueNotes
KACS_NS_PRIMARY0the op's principal decision
KACS_NS_PARENT_FALLBACK1delete: parent DELETE_CHILD fallback
KACS_NS_SOURCE2link/rename source-side decision
KACS_NS_DEST3link/rename destination-parent add
KACS_NS_DELETE_EXISTING4rename: delete pre-existing dest

kacs_psb reason — which process-security-baseline path an event marks: mitigation activation (apply) or a W^X / LSV / PIE / prctl-lock enforcement denial. The ok-vs-deny verdict is read from ret. Emitted by kacs:kacs_psb_*.

ConstantValueNotes
KACS_PSB_APPLY_OK0mitigations applied; result_bits set
KACS_PSB_APPLY_NORMALIZE1requested mask bad or unsupported (EINVAL/ENODEV)
KACS_PSB_APPLY_MM_ACQUIRE2could not acquire target mm (EACCES)
KACS_PSB_APPLY_CFIF3forward-CFI (IBT) activation failed
KACS_PSB_APPLY_SML4speculative-mitigation-lock activation failed
KACS_PSB_APPLY_CFIB5backward-CFI (shadow stack) activation failed
KACS_PSB_WXP_MMAP6W^X blocked a W+X mmap
KACS_PSB_WXP_MPROTECT7W^X blocked an mprotect transition
KACS_PSB_WXP_EXISTING_VMA8W^X activation blocked by an existing W+X vma
KACS_PSB_LSV_PROBE9LSV signing probe of the image failed
KACS_PSB_LSV_VERIFY10LSV signature not verified/trusted
KACS_PSB_LSV_PIP_DOMINANCE11LSV image PIP does not dominate process PIP
KACS_PSB_PIE_ET_EXEC12PIE blocked a non-PIE ET_EXEC image
KACS_PSB_PRCTL_SML13prctl blocked by SML lock
KACS_PSB_PRCTL_CFIB14prctl blocked by shadow-stack (CFIB) lock
KACS_PSB_PRCTL_PIP15prctl set-dumpable blocked by process PIP

kacs_token_ioctl cmd — which token-fd ioctl verb a record describes.

The verdict (allow vs deny) is read from the ret field (0 == allow); the access-mask-gate rejections surface as ret == -EACCES. token is an opaque numeric id (never token bytes). Emitted by kacs:kacs_token_ioctl.

ConstantValueNotes
KACS_TOK_QUERY0KACS_IOC_QUERY
KACS_TOK_ADJUST_PRIVS1KACS_IOC_ADJUST_PRIVS
KACS_TOK_ADJUST_GROUPS2KACS_IOC_ADJUST_GROUPS
KACS_TOK_DUPLICATE3KACS_IOC_DUPLICATE
KACS_TOK_INSTALL4KACS_IOC_INSTALL
KACS_TOK_RESTRICT5KACS_IOC_RESTRICT
KACS_TOK_LINK6KACS_IOC_LINK_TOKENS
KACS_TOK_GET_LINKED7KACS_IOC_GET_LINKED_TOKEN
KACS_TOK_IMPERSONATE8KACS_IOC_IMPERSONATE
KACS_TOK_ADJUST_DEFAULT9KACS_IOC_ADJUST_DEFAULT
KACS_TOK_ADJUST_INTERACTIVITY_SCOPE10KACS_IOC_ADJUST_INTERACTIVITY_SCOPE
KACS_TOK_UNKNOWN11unrecognised ioctl verb (-ENOTTY)

kacs_token_ref reason — a token-fd reference lifecycle transition.

TO_FD is a token installed into a fresh anon-inode handle; RELEASE is the handle teardown that drops the token ref; BIND clones a token onto an existing file; OPEN is the checked/fixed-access open path that clones the target token. token is an opaque numeric id, never token bytes. Emitted by kacs:kacs_token_ref.

ConstantValueNotes
KACS_TREF_TO_FD0token installed into a new fd (ret == fd)
KACS_TREF_RELEASE1token-fd released; ref dropped
KACS_TREF_BIND2token cloned + bound onto an existing file
KACS_TREF_OPEN3token cloned for a token-open path

kacs_logon_session reason — a session/token creation-surface outcome.

The *_DENIED codes name the privilege-gate rejections (the value); the plain op codes mark the successful op. Verdict is also in ret. No token/spec bytes are recorded. Emitted by kacs:kacs_logon_session.

ConstantValueNotes
KACS_SES_CREATE0create_logon_session published a session
KACS_SES_CREATE_PRIV_DENIED1create_logon_session: TCB privilege gate denied
KACS_SES_DESTROY2destroy_empty_logon_session outcome
KACS_SES_DESTROY_PRIV_DENIED3destroy: TCB privilege gate denied
KACS_SES_CREATE_TOKEN4create_token issued a token fd
KACS_SES_CREATE_TOKEN_PRIV_DENIED5create_token: CREATE_TOKEN privilege denied

kacs_cred reason — a credential-security lifecycle transition: LSM cred prepare/transfer/alloc/free, explicit token-ref install, the clone-time primary-token lifecycle (CLONE_THREAD share vs fork deep-copy), and the project-linux-cred rejection paths. old_token/new_token are opaque token pointer ids (0 when absent); clone_flags is set only on the clone paths. Verdict/outcome is the ret field. Emitted by kacs:kacs_cred.

ConstantValueNotes
KACS_CRED_PREPARE0cred_prepare token clone
KACS_CRED_TRANSFER1cred_transfer token clone
KACS_CRED_ALLOC_BLANK2cred_alloc_blank cleared sec
KACS_CRED_FREE3cred_free released token/state
KACS_CRED_INSTALL_TOKEN_REF4install token ref on a cred
KACS_CRED_CLONE_THREAD_SHARE5CLONE_THREAD shares parent primary cred
KACS_CRED_CLONE_FORK_COPY6fork deep-copies parent primary token
KACS_CRED_PROJECT_UID0_BLOCKED7uid0 projection not allowed by token
KACS_CRED_PROJECT_GROUPS_ALLOC_FAIL8groups_alloc failed (ENOMEM)
KACS_CRED_PROJECT_E2BIG9supplementary gid count > NGROUPS_MAX

kacs_setid reason — the KACS gate on a Linux setid projection (task_fix_setuid / _setgid / setgroups). Each op has two distinct denials that otherwise collapse: NO_TOKEN (-EACCES, no effective subject token) and PRIV_GATE (-EOPNOTSUPP, holder of ASSIGN_PRIMARY_TOKEN privilege). flags is the LSM_SETID* mask (0 for setgroups). Emitted by kacs:kacs_setid.

ConstantValueNotes
KACS_SETID_SETUID_NO_TOKEN0setuid gate: no subject token
KACS_SETID_SETUID_PRIV_GATE1setuid gate: ASSIGN_PRIMARY priv
KACS_SETID_SETGID_NO_TOKEN2setgid gate: no subject token
KACS_SETID_SETGID_PRIV_GATE3setgid gate: ASSIGN_PRIMARY priv
KACS_SETID_SETGROUPS_NO_TOKEN4setgroups gate: no subject token
KACS_SETID_SETGROUPS_PRIV_GATE5setgroups gate: ASSIGN_PRIMARY priv

kacs_task reason — a task-security lifecycle transition.

task_alloc reports a NO_CHILD-mitigation clone block, a process-state inherit ENOMEM, or success; task_free marks teardown. process_state is an opaque process-state pointer id (0 when absent); clone_flags is set on the alloc paths. Outcome is ret. Emitted by kacs:kacs_task.

ConstantValueNotes
KACS_TASK_ALLOC_NO_CHILD_BLOCKED0clone blocked by NO_CHILD mitigation
KACS_TASK_ALLOC_INHERIT_ENOMEM1process-state inherit failed (ENOMEM)
KACS_TASK_ALLOC2task_alloc completed
KACS_TASK_FREE3task_free teardown

kacs_primary_install reason — a primary-token / impersonation credential transition.

Distinguishes the install commit, the user-SID-change process-SD reallocation and its ENOMEM, the commit_creds apply, the impersonation override/revert, and the sibling-thread taskwork requeue/failure. old_primary and new_primary are opaque token identity ids (never token bytes). Verdict is the ret field. Emitted by kacs:kacs_primary_install.

ConstantValueNotes
KACS_PRIM_INSTALL_OK0primary token install committed
KACS_PRIM_SD_REALLOC1user-SID changed; process SD reallocated
KACS_PRIM_SD_ALLOC_FAIL2process SD realloc failed (ENOMEM)
KACS_PRIM_APPLY_COMMIT3new real creds committed (commit_creds)
KACS_PRIM_IMPERSONATE_INSTALL4impersonation token installed (override_creds)
KACS_PRIM_IMPERSONATE_REVERT5impersonation reverted (revert_creds)
KACS_PRIM_SIBLING_REQUEUE6queued sibling install re-queued on ENOMEM
KACS_PRIM_SIBLING_FAILED7queued sibling install failed after apply

kacs_process_token_open reason — the outcome of opening a process/thread primary or effective token (kacs_open_process_token / _thread_token and the proc inspection files). Distinguishes the bad access-mask reject, the no-target-token path, the process access-check denial, the self vs cross inspection verdicts, and the successful open. subject_token/target_token are opaque token identity ids (0 when unknown at the emit site); access_mask is the requested mask. Verdict is ret (>=0 fd == allow). Emitted by kacs:kacs_process_token_open.

ConstantValueNotes
KACS_PTO_OPEN_OK0token fd opened
KACS_PTO_BAD_ARGS1NULL subject/state/task guard
KACS_PTO_NO_TARGET2target has no token
KACS_PTO_BAD_ACCESS3invalid access mask rejected
KACS_PTO_ACCESS_DENIED4process access check denied
KACS_PTO_SELF5self-target inspection allowed
KACS_PTO_CROSS6cross-process inspection authorized

kacs_process_state reason — a process-state / process-SD lifecycle or PIP transition.

Covers process-state alloc/free, the CLONE_THREAD share vs fork inheritance split, the no-child clone block, the pending-exec-PIP stage/commit and dumpable hardening, and the process-SD alloc/wrap/replace primitives. process_state is an opaque state-object id (0 when none in scope, e.g. the process-SD primitives); pip_type/pip_trust carry the PIP tier. ret is the outcome (0 == ok). No token or SD bytes. Emitted by kacs:kacs_process_state.

ConstantValueNotes
KACS_PST_ALLOC0process state allocated
KACS_PST_ALLOC_FAIL1process state alloc failed (ENOMEM)
KACS_PST_FREE2process state freed (refcount hit 0)
KACS_PST_INHERIT_SHARE3CLONE_THREAD: parent state shared
KACS_PST_INHERIT_FORK4fork: new state allocated from parent
KACS_PST_EXEC_PIP_STAGE5pending exec PIP staged
KACS_PST_EXEC_PIP_COMMIT6pending exec PIP committed to state
KACS_PST_DUMPABLE7exec dumpable hardened by PIP
KACS_PST_CLONE_BLOCKED_NOCHILD8clone blocked by NO_CHILD mitigation
KACS_PST_SD_ALLOC9default process SD allocated
KACS_PST_SD_ALLOC_FAIL10process/socket SD alloc failed
KACS_PST_SD_WRAP_FAIL11process SD wrapper alloc failed (ENOMEM)
KACS_PST_SD_REPLACE12process SD replaced on state
KACS_PST_SOCKET_SD_ALLOC13default socket SD allocated

kacs_mount_policy reason — the outcome of a mount-policy set (TCB-gated) or get.

SET_OK marks a committed policy change (generation bumped); the guard codes name the pre-commit rejects that otherwise collapse into a bare -EINVAL/-EOPNOTSUPP/-EPERM. GET_OK/GET_NO_SECURITY are the snapshot paths. Verdict is also in ret. Emitted by kacs:kacs_mount_policy_set / _get.

ConstantValueNotes
KACS_MP_SET_OK0policy committed; generation bumped
KACS_MP_BAD_ARGS1NULL subject/sb/args guard (EINVAL)
KACS_MP_NO_SECURITY2superblock has no s_security (EOPNOTSUPP)
KACS_MP_UNMANAGED3magic-derived UNMANAGED; not settable (EOPNOTSUPP)
KACS_MP_VALIDATE4mount-policy args validation failed (EINVAL)
KACS_MP_TEMPLATE_INVALID5template SD bytes failed validation (EINVAL)
KACS_MP_TCB_DENIED6SeTcbPrivilege gate denied (EPERM)
KACS_MP_GET_OK7policy snapshot returned
KACS_MP_GET_NO_SECURITY8get: no s_security; magic-derived policy returned
KACS_MP_FIXED_POLICY9filesystem fixes its policy class (EOPNOTSUPP)

kacs_sd_syscall target_kind — which SD-bearing object a query/set record describes, resolved by the get_sd/set_sd syscall target-kind fallthrough. ACCESS_CHECK tags the AccessCheck ingress events (kacs_access_check*), whose other scalar fields are 0 at the ingress boundary.

ConstantValueNotes
KACS_SDS_KIND_TOKEN0token-fd target
KACS_SDS_KIND_FILE1file/inode target
KACS_SDS_KIND_PROCESS2pidfd process target
KACS_SDS_KIND_PATH3path-resolved file target
KACS_SDS_KIND_ACCESS_CHECK4AccessCheck ingress (not an SD get/set)

kacs_sd_syscall reason — the outcome of an SD query/set core.

QUERY_OK/SET_OK are the success paths; the remaining codes name the guard / denial paths that otherwise surface as an indistinguishable -EINVAL/-EACCES/-EOPNOTSUPP. Verdict is also in ret. Emitted by kacs:kacs_sd_query / _set.

ConstantValueNotes
KACS_SDS_QUERY_OK0SD subset extracted and returned
KACS_SDS_SET_OK1SD merged/replaced
KACS_SDS_BAD_ARGS2NULL/zero argument guard (EINVAL)
KACS_SDS_UNMANAGED3superblock UNMANAGED (EOPNOTSUPP)
KACS_SDS_ACCESS_DENIED4SD access check denied (EACCES)
KACS_SDS_NO_SD5target has no usable SD (EACCES)
KACS_SDS_RESTORE_BYPASS6set via SeRestorePrivilege bypass
KACS_SDS_QUERY_FAIL7subset extraction failed after auth

kacs_access_check reason — the AccessCheck kernel-ingress outcome, above the closed Slice 15 ABI bridge. OK is a completed ingress; the remaining codes name the ingress-time rejects (token-eval-context gate, token resolution, and caap-cache lock acquisition). Verdict is also in ret. Emitted by kacs:kacs_access_check / _list.

ConstantValueNotes
KACS_ACK_OK0ingress dispatched to the ABI bridge
KACS_ACK_EVAL_CONTEXT1token-eval-context gate denied (EACCES)
KACS_ACK_TOKEN_RESOLVE2token/args resolution failed
KACS_ACK_CAAP_LOCK_FAIL3caap-cache lock acquisition failed

kacs_file_snapshot op — which snapshot-grant file operation an event marks.

The allow-vs-deny verdict is read from ret; reason names why a deny path was taken. Emitted by kacs:kacs_file_snapshot (file_access.c).

ConstantValueNotes
KACS_FSOP_ACCESS0generic snapshot-grant access check
KACS_FSOP_PERMISSION1file_permission hook
KACS_FSOP_IOCTL2file ioctl snapshot
KACS_FSOP_LOCK3file lock snapshot
KACS_FSOP_FCNTL4file fcntl snapshot
KACS_FSOP_TRUNCATE5file truncate snapshot
KACS_FSOP_FALLOCATE6file fallocate snapshot
KACS_FSOP_MMAP7file mmap snapshot
KACS_FSOP_MPROTECT8file mprotect snapshot
KACS_FSOP_WRITE_INTENT9write-intent snapshot
KACS_FSOP_SYSFS_WRITE_GATE10unmanaged sysfs write gate

kacs_file_snapshot reason — why a snapshot-grant op took its return path.

DECISION is the resolved allow/deny (verdict in ret); the remaining codes name the distinct deny causes. Emitted by kacs:kacs_file_snapshot.

ConstantValueNotes
KACS_FSR_DECISION0resolved allow/deny (grant compare)
KACS_FSR_SIGNED_EXEC1signed-exec content mutation denied
KACS_FSR_GRANT_DENY2granted access lacked required right
KACS_FSR_APPEND_DENY3append/write intent lacked write grant
KACS_FSR_UNMANAGED_SYSFS4unmanaged fd: sysfs write gate applied
KACS_FSR_AUDIT_EMIT_FAIL5continuous-audit emit failed

kacs_metadata reason — the file-metadata (getattr/setattr/xattr/getsecurity) decision path.

DECISION/CONSUME_HIT/BEGIN_BUSY mark the begin/consume decision lifecycle; the remaining codes name the distinct deny reasons of the xattr setattr hooks. op_class carries the internal PKM_KACS_METADATA_OP_* value; matched is the consume match flag. Emitted by kacs:kacs_metadata (file_metadata.c).

ConstantValueNotes
KACS_META_DECISION0generic metadata decision
KACS_META_CONSUME_HIT1consumed a pre-staged decision
KACS_META_BEGIN_BUSY2begin failed: a decision already active
KACS_META_CANONICAL_SD3canonical SD xattr access denied
KACS_META_CAPS_XATTR4capability xattr mutation denied (EPERM)
KACS_META_ACL5POSIX ACL xattr denied
KACS_META_SIGNED_EXEC6signed-exec xattr/size mutation denied
KACS_META_BAD_ARGS7NULL name / dentry guard
KACS_META_INTERNAL_SD8internal SD read/write re-entry allowed
KACS_META_GETSECURITY9inode_getsecurity outcome

kacs_native_open_ext reason — a widening decision inside the native (kacs_open) create/open machinery. The PREPARE_* codes name the arg- validation reject buckets of pkm_kacs_prepare_native_open; RESOLVE / BUILD_CREATED_SD DELETE_ON_CLOSE_ARM name the later stage outcomes (verdict in ret). Emitted by kacs:kacs_native_open_ext (native_open.c).

ConstantValueNotes
KACS_NOX_PREPARE_OK0prepare accepted the request
KACS_NOX_PREPARE_BAD_FLAGS1flags/create_options/__pad rejected
KACS_NOX_PREPARE_BAD_SD_ARGS2sd_ptr/sd_len/disposition-sd combo bad
KACS_NOX_PREPARE_BAD_DISPOSITION3create_disposition out of range
KACS_NOX_PREPARE_BAD_ACCESS4desired-access mask invalid/empty
KACS_NOX_PREPARE_UNSUPPORTED5valid but unsupported combination
KACS_NOX_RESOLVE6resolve-existing-path outcome
KACS_NOX_BUILD_CREATED_SD7build-created-file-SD outcome
KACS_NOX_DELETE_ON_CLOSE_ARM8delete-on-close arm outcome

kacs_object reason — which object-lifecycle verdict a record marks.

Only the high-value transitions are traced (pure inode/file/sb alloc/free are not). ret is the outcome (0 == ok). Emitted by kacs:kacs_object.

ConstantValueNotes
KACS_OBJ_DELETE_ON_CLOSE_UNLINK0file_release delete-on-close unlink attempt
KACS_OBJ_SIGNED_EXEC_PIN1inode pinned as signed-exec (immutable)
KACS_OBJ_SIGNED_EXEC_MUTATION_BLOCKED2content mutation of a signed-exec-pinned inode denied

kacs_securityfs reason — which securityfs endpoint path a record marks.

The sessions_read codes disambiguate the deny rungs that otherwise collapse into an errno; open_self / init report the endpoint outcome. Verdict is ret. Emitted by kacs:kacs_securityfs.

ConstantValueNotes
KACS_SFS_LOGON_SESSIONS_NO_TOKEN0sessions read: no effective subject token
KACS_SFS_LOGON_SESSIONS_PIP_CONTEXT1sessions read: caller PIP context unavailable
KACS_SFS_LOGON_SESSIONS_ACCESS_CHECK2sessions read: rust access check denied
KACS_SFS_OPEN_SELF3open of kacs/self self-token file outcome
KACS_SFS_INIT4securityfs kacs/ endpoint init outcome

kacs_caap reason — which CAAP policy-cache path a record marks.

SET carries the post-set cache_len (an insert grows it; an evict/replace may shrink it); INIT/DESTROY are cache lifecycle; TCB_GATE is the SeTcbPrivilege gate deny. Emitted by kacs:kacs_caap. No SID or spec bytes — lengths only.

ConstantValueNotes
KACS_CAAP_TCB_GATE0SeTcbPrivilege gate denied the caller
KACS_CAAP_SET1cache set (insert/evict); cache_len is post-set count
KACS_CAAP_INIT2CAAP cache created
KACS_CAAP_DESTROY3CAAP cache destroyed

kacs_capability reason — the capability->privilege gate verdicts and the capability LSM-hook outcomes. ALLOW_GRANT is an auto-granted allow-cap; HARD_DENY is the SETPCAP/SETFCAP/MAC_OVERRIDE hard block; PRIV_NOT_ENABLED USE_MARK_FAIL are the mapped-privilege gate failures; CAPSET / PRCTL_GUARD CAPABLE / CAPGET report the corresponding hook outcome. Emitted by kacs:kacs_capability. Verdict is ret.

ConstantValueNotes
KACS_CAP_ALLOW_GRANT0allow-cap auto-granted (no privilege needed)
KACS_CAP_HARD_DENY1SETPCAP/SETFCAP/MAC_OVERRIDE hard-denied
KACS_CAP_PRIV_NOT_ENABLED2mapped privilege not enabled on token
KACS_CAP_USE_MARK_FAIL3privilege use-mark failed
KACS_CAP_CAPSET4capset core outcome
KACS_CAP_PRCTL_GUARD5prctl capability-guard outcome
KACS_CAP_CAPABLE6capable() hook guard-deny outcome
KACS_CAP_CAPGET7capget for-task outcome

kacs_privilege reason — the require_enabled_privilege gate rungs plus two standalone privilege-path markers. NULL_OR_ZERO is a null- token/zero-mask guard; NOT_ENABLED / USE_MARK_FAIL are the gate failures; CHANGE_NOTIFY marks the open_by_handle_at SeChangeNotifyPrivilege check outcome; RCU_ENOMEM_ FALLBACK marks the deferred-free ENOMEM synchronize_rcu fallback. Emitted by kacs:kacs_privilege. Verdict is ret.

ConstantValueNotes
KACS_PRIV_NULL_OR_ZERO0null token or zero privilege mask
KACS_PRIV_NOT_ENABLED1privilege not enabled on token
KACS_PRIV_USE_MARK_FAIL2privilege use-mark failed
KACS_PRIV_CHANGE_NOTIFY3open_by_handle_at CHANGE_NOTIFY gate outcome
KACS_PRIV_RCU_ENOMEM_FALLBACK4deferred-free kmalloc failed; sync-rcu fallback

kacs_tlp reason — the trusted-launch-path decisions.

CHECK_PATH marks a no-prefix-match executable-transition deny (path_len

  • prefix_count only, NEVER path or prefix bytes); REPLACE marks a prefix-table replacement. Emitted by kacs:kacs_tlp. Verdict is ret.
ConstantValueNotes
KACS_TLP_CHECK_PATH0executable transition denied: no prefix match
KACS_TLP_REPLACE1TLP prefix table replaced

Edit this page