10 #define STM_SPEC_VERSION_MAJOR 1
11 #define STM_SPEC_VERSION_MINOR 0
15 #define STM_HARDWARE_FIELD_FILL_TO_2K (2048 - sizeof(uint32_t) * 8)
28 #define STM_FEATURES_IA32E 0x1
64 #define PAGE_SIZE 4096
137 #define TXT_PROCESSOR_SMM_DESCRIPTOR_SIGNATURE "TXTPSSIG"
138 #define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MAJOR 1
139 #define TXT_PROCESSOR_SMM_DESCRIPTOR_VERSION_MINOR 0
141 #define SMM_PSD_OFFSET 0xfb00
209 #define STM_SMM_REV_ID 0x80010100
298 #define FOLLOW_MTRR 0xFFFFFFFF
322 #define VIRTUAL_ADDRESS_SPECIFIED 3
325 #define END_OF_RESOURCES 0
329 #define MACHINE_SPECIFIC_REG 4
330 #define PCI_CFG_RANGE 5
331 #define TRAPPED_IO_RANGE 6
332 #define ALL_RESOURCES 7
333 #define REGISTER_VIOLATION 8
334 #define MAX_DESC_TYPE 8
350 #define STM_RSC_BGM 0x4
361 #define STM_RSC_MEM_R 0x1
362 #define STM_RSC_MEM_W 0x2
363 #define STM_RSC_MEM_X 0x4
373 #define STM_RSC_BGI 0x2
384 #define STM_RSC_MMIO_R 0x1
385 #define STM_RSC_MMIO_W 0x2
386 #define STM_RSC_MMIO_X 0x4
398 #define STM_RSC_MSR 0x8
420 #define STM_RSC_PCI_CFG_R 0x1
421 #define STM_RSC_PCI_CFG_W 0x2
469 #define STM_VMCS_DATABASE_REQUEST_ADD 1
470 #define STM_VMCS_DATABASE_REQUEST_REMOVE 0
474 #define DOMAIN_DISALLOWED_IO_OUT (1u << 0)
475 #define DOMAIN_DISALLOWED_IO_IN (1u << 1)
476 #define DOMAIN_INTEGRITY (1u << 2)
477 #define DOMAIN_CONFIDENTIALITY (1u << 3)
479 #define DOMAIN_UNPROTECTED 0x00
480 #define DOMAIN_INTEGRITY_PROT_OUT_IN (DOMAIN_INTEGRITY)
481 #define DOMAIN_FULLY_PROT_OUT_IN (DOMAIN_CONFIDENTIALITY | DOMAIN_INTEGRITY)
482 #define DOMAIN_FULLY_PROT \
483 (DOMAIN_CONFIDENTIALITY | DOMAIN_INTEGRITY | DOMAIN_DISALLOWED_IO_IN \
484 | DOMAIN_DISALLOWED_IO_OUT)
487 #define XSTATE_READWRITE 0x00
488 #define XSTATE_READONLY 0x01
489 #define XSTATE_SCRUB 0x03
502 #define CONFIGURE_LOG 2
543 #define STM_API_MAP_ADDRESS_RANGE 0x00000001
544 #define STM_API_UNMAP_ADDRESS_RANGE 0x00000002
545 #define STM_API_ADDRESS_LOOKUP 0x00000003
546 #define STM_API_RETURN_FROM_PROTECTION_EXCEPTION 0x00000004
564 #define STM_API_START 0x00010001
565 #define STM_API_STOP 0x00010002
566 #define STM_API_PROTECT_RESOURCE 0x00010003
567 #define STM_API_UNPROTECT_RESOURCE 0x00010004
568 #define STM_API_GET_BIOS_RESOURCES 0x00010005
569 #define STM_API_MANAGE_VMCS_DATABASE 0x00010006
570 #define STM_API_INITIALIZE_PROTECTION 0x00010007
571 #define STM_API_MANAGE_EVENT_LOG 0x00010008
576 #define STM_SUCCESS 0x00000000
577 #define SMM_SUCCESS 0x00000000
580 #define ERROR_STM_SECURITY_VIOLATION 0x80010001
581 #define ERROR_STM_CACHE_TYPE_NOT_SUPPORTED 0x80010002
582 #define ERROR_STM_PAGE_NOT_FOUND 0x80010003
583 #define ERROR_STM_BAD_CR3 0x80010004
584 #define ERROR_STM_PHYSICAL_OVER_4G 0x80010005
585 #define ERROR_STM_VIRTUAL_SPACE_TOO_SMALL 0x80010006
586 #define ERROR_STM_UNPROTECTABLE_RESOURCE 0x80010007
587 #define ERROR_STM_ALREADY_STARTED 0x80010008
588 #define ERROR_STM_WITHOUT_SMX_UNSUPPORTED 0x80010009
589 #define ERROR_STM_STOPPED 0x8001000A
590 #define ERROR_STM_BUFFER_TOO_SMALL 0x8001000B
591 #define ERROR_STM_INVALID_VMCS_DATABASE 0x8001000C
592 #define ERROR_STM_MALFORMED_RESOURCE_LIST 0x8001000D
593 #define ERROR_STM_INVALID_PAGECOUNT 0x8001000E
594 #define ERROR_STM_LOG_ALLOCATED 0x8001000F
595 #define ERROR_STM_LOG_NOT_ALLOCATED 0x80010010
596 #define ERROR_STM_LOG_NOT_STOPPED 0x80010011
597 #define ERROR_STM_LOG_NOT_STARTED 0x80010012
598 #define ERROR_STM_RESERVED_BIT_SET 0x80010013
599 #define ERROR_STM_NO_EVENTS_ENABLED 0x80010014
600 #define ERROR_STM_OUT_OF_RESOURCES 0x80010015
601 #define ERROR_STM_FUNCTION_NOT_SUPPORTED 0x80010016
602 #define ERROR_STM_UNPROTECTABLE 0x80010017
603 #define ERROR_STM_UNSUPPORTED_MSR_BIT 0x80010018
604 #define ERROR_STM_UNSPECIFIED 0x8001FFFF
607 #define ERROR_SMM_BAD_BUFFER 0x80020001
608 #define ERROR_SMM_INVALID_RSC 0x80020004
609 #define ERROR_SMM_INVALID_BUFFER_SIZE 0x80020005
610 #define ERROR_SMM_BUFFER_TOO_SHORT 0x80020006
611 #define ERROR_SMM_INVALID_LIST 0x80020007
612 #define ERROR_SMM_OUT_OF_MEMORY 0x80020008
613 #define ERROR_SMM_AFTER_INIT 0x80020009
614 #define ERROR_SMM_UNSPECIFIED 0x8002FFFF
617 #define ERROR_INVALID_API 0x80038001
618 #define ERROR_INVALID_PARAMETER 0x80038002
621 #define STM_CRASH_PROTECTION_EXCEPTION 0xC000F001
622 #define STM_CRASH_PROTECTION_EXCEPTION_FAILURE 0xC000F002
623 #define STM_CRASH_DOMAIN_DEGRADATION_FAILURE 0xC000F003
624 #define STM_CRASH_BIOS_PANIC 0xC000E000
697 #define STM_LOG_ENTRY_SIZE 256
698 #define STM_CONFIG_SMI_UNBLOCKING_BY_VMX_OFF 0x1
701 #define SW_SMI_STM_ADD_RUNTIME_RESOURCES_SUB_FUNC 0
702 #define SW_SMI_STM_READ_BIOS_RESOURCES_SUB_FUNC 1
703 #define SW_SMI_STM_REPLACE_BIOS_RESOURCES_SUB_FUNC 2
STM_REGISTER_VIOLATION_TYPE
#define STM_HARDWARE_FIELD_FILL_TO_2K
@ evt_mle_resource_protection_granted
@ evt_log_invalid_parameter_detected
@ evt_mle_resource_unprotect
@ evt_mle_resource_protection_denied
@ evt_handled_protection_exception
@ evt_mle_domain_type_degraded
@ evt_bios_access_to_unclaimed_resource
@ evt_mle_resource_unprotect_error
struct _STM_SMM_CPU_STATE STM_SMM_CPU_STATE
TXT_SMM_PROTECTION_EXCEPTION_TYPE
@ TxtSmmRegisterViolation
unsigned long long uint64_t
uint32_t vmcall_api_number
uint8_t expected_domain_type
uint64_t vmcs_phys_pointer
uint8_t degraded_domain_type
uint32_t interrupted_cr4_pae
uint64_t interrupted_guest_virtual_address
uint64_t interrupted_eptp
uint32_t interrupted_cr4_pse
uint32_t map_to_smm_guest
uint32_t interrupted_ia32e_mode
uint64_t smm_guest_virtual_address
uint64_t physical_address
uint32_t sub_functionindex
STM_EVENT_LOG_MANAGEMENT_REQUEST_DATA data
uint32_t intel_64mode_supported
uint64_t physical_address
uint16_t msr_violation_exception
uint16_t io_violation_exception
uint16_t page_violation_exception
uint16_t register_violation_exception
uint16_t pci_violation_exception
uint32_t vmcs_exit_instruction_length
uint64_t vmcs_exit_qualification
uint32_t vmcs_exit_instruction_info
uint64_t vmcs_exit_instruction_length
uint64_t vmcs_exit_qualification
uint64_t vmcs_exit_instruction_info
uint64_t resource_list_continuation
uint32_t kernel_mode_processing
uint8_t originating_bus_number
uint8_t execution_disable_outside_smrr
uint8_t smram_to_vmcs_restore_required
uint8_t reinitialize_vmcs_required
uint64_t vmcs_phys_pointer
uint32_t degradation_policy
uint64_t bios_component_base
uint64_t smm_smi_handler_rsp
uint8_t physical_address_bits
STM_SMM_STATE stm_smm_state
STM_SMM_RESUME_STATE smm_resume_state
uint8_t smm_descriptor_ver_minor
uint8_t smm_descriptor_ver_major
uint64_t smm_stm_teardown_rip
uint64_t bios_hw_resource_requirements_ptr
uint64_t smm_smi_handler_rip
uint64_t smm_stm_setup_rip
uint32_t required_stm_smm_rev_id
STM_PROTECTION_EXCEPTION_HANDLER stm_protection_exception_handler
STM_SMM_ENTRY_STATE smm_entry_state
uint16_t smm_other_segment
uint32_t gdt_base_lo_dword
uint32_t idt_base_hi_dword
uint16_t auto_halt_restart
uint32_t gdt_base_hi_dword
uint32_t idt_base_lo_dword
uint32_t ldt_base_hi_dword
uint32_t ldt_base_lo_dword
ENTRY_EVT_LOG_HANDLED_PROTECTION_EXCEPTION handled_protection_exception
ENTRY_EVT_MLE_RSC_PROT_DENIED mle_rsc_prot_denied
ENTRY_EVT_MLE_RSC_PROT_GRANTED mle_rsc_prot_granted
ENTRY_EVT_LOG_STARTED started
ENTRY_EVT_LOG_INVALID_PARAM invalid_param
ENTRY_EVT_LOG_STOPPED stopped
ENTRY_EVT_MLE_RSC_UNPROT_ERROR mle_rsc_unprot_error
ENTRY_EVT_BIOS_ACCESS_UNCLAIMED_RSC bios_unclaimed_rsc
ENTRY_EVT_MLE_DOMAIN_TYPE_DEGRADED mle_domain_type_degraded
ENTRY_EVT_MLE_RSC_UNPROT mle_rsc_unprot
uint32_t event_enable_bitmap
STM_EVENT_LOG_MANAGEMENT_REQUEST_DATA_LOG_BUFFER log_buffer
STM_PROTECTION_EXCEPTION_STACK_FRAME_IA32 * ia32_stack_frame
STM_PROTECTION_EXCEPTION_STACK_FRAME_X64 * x64_stack_frame
STM_RSC_ALL_RESOURCES_DESC all
STM_RSC_TRAPPED_IO_DESC trapped_io
STM_RSC_DESC_HEADER header
STM_REGISTER_VIOLATION_DESC register_violation
STM_RSC_PCI_CFG_DESC pci_cfg