forked from xt-sys/exectos
Implement kernel undefined behavior sanitizer support
This commit is contained in:
@@ -198,6 +198,14 @@ typedef enum _WAIT_TYPE
|
||||
WaitAny
|
||||
} WAIT_TYPE, *PWAIT_TYPE;
|
||||
|
||||
/* Kernel UBSAN data types enumeration list */
|
||||
typedef enum _KUBSAN_DATA_TYPE
|
||||
{
|
||||
DataTypeInt,
|
||||
DataTypeFloat,
|
||||
DataTypeUnknown = 0xFFFF
|
||||
} KUBSAN_DATA_TYPE, *PKUBSAN_DATA_TYPE;
|
||||
|
||||
/* Kernel routine callbacks */
|
||||
typedef EXCEPTION_DISPOSITION (XTCDECL *PEXCEPTION_ROUTINE)(IN PEXCEPTION_RECORD ExceptionRecord, IN PVOID EstablisherFrame, IN OUT PCONTEXT ContextRecord, IN OUT PVOID DispatcherContext);
|
||||
typedef VOID (XTAPI *PKDEFERRED_ROUTINE)(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2);
|
||||
@@ -551,4 +559,90 @@ typedef struct _SYSTEM_RESOURCE_FRAMEBUFFER
|
||||
} Pixels;
|
||||
} SYSTEM_RESOURCE_FRAMEBUFFER, *PSYSTEM_RESOURCE_FRAMEBUFFER;
|
||||
|
||||
/* Kernel UBSAN source location structure definition */
|
||||
typedef struct _KUBSAN_SOURCE_LOCATION
|
||||
{
|
||||
PCCHAR FileName;
|
||||
union
|
||||
{
|
||||
ULONG Reported;
|
||||
struct
|
||||
{
|
||||
UINT Line;
|
||||
UINT Column;
|
||||
};
|
||||
};
|
||||
} KUBSAN_SOURCE_LOCATION, *PKUBSAN_SOURCE_LOCATION;
|
||||
|
||||
/* Kernel UBSAN type descriptor structure definition */
|
||||
typedef struct _KUBSAN_TYPE_DESCRIPTOR
|
||||
{
|
||||
USHORT DataType;
|
||||
USHORT TypeInfo;
|
||||
CHAR TypeName[1];
|
||||
} KUBSAN_TYPE_DESCRIPTOR, *PKUBSAN_TYPE_DESCRIPTOR;
|
||||
|
||||
/* Kernel UBSAN float cast overflow data structure definition */
|
||||
typedef struct _KUBSAN_FLOAT_CAST_OVERFLOW_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR LhsType;
|
||||
PKUBSAN_TYPE_DESCRIPTOR RhsType;
|
||||
} KUBSAN_FLOAT_CAST_OVERFLOW_DATA, *PKUBSAN_FLOAT_CAST_OVERFLOW_DATA;
|
||||
|
||||
/* Kernel UBSAN function type mismatch data structure definition */
|
||||
typedef struct _KUBSAN_FUNCTION_TYPE_MISMATCH_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR Type;
|
||||
} KUBSAN_FUNCTION_TYPE_MISMATCH_DATA, *PKUBSAN_FUNCTION_TYPE_MISMATCH_DATA;
|
||||
|
||||
/* Kernel UBSAN invalid builtin data structure definition */
|
||||
typedef struct _KUBSAN_INVALID_BUILTIN_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
UCHAR Kind;
|
||||
} KUBSAN_INVALID_BUILTIN_DATA, *PKUBSAN_INVALID_BUILTIN_DATA;
|
||||
|
||||
/* Kernel UBSAN shift out of bounds data structure definition */
|
||||
typedef struct _KUBSAN_SHIFT_OUT_OF_BOUNDS_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR LhsType;
|
||||
PKUBSAN_TYPE_DESCRIPTOR RhsType;
|
||||
} KUBSAN_SHIFT_OUT_OF_BOUNDS_DATA, *PKUBSAN_SHIFT_OUT_OF_BOUNDS_DATA;
|
||||
|
||||
/* Kernel UBSAN out of bounds data structure definition */
|
||||
typedef struct _KUBSAN_OUT_OF_BOUNDS_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR ArrayType;
|
||||
PKUBSAN_TYPE_DESCRIPTOR IndexType;
|
||||
} KUBSAN_OUT_OF_BOUNDS_DATA, *PKUBSAN_OUT_OF_BOUNDS_DATA;
|
||||
|
||||
/* Kernel UBSAN overflow data structure definition */
|
||||
typedef struct _KUBSAN_OVERFLOW_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR Type;
|
||||
} KUBSAN_OVERFLOW_DATA, *PKUBSAN_OVERFLOW_DATA;
|
||||
|
||||
/* Kernel UBSAN type mismatch data structure definition */
|
||||
typedef struct _KUBSAN_TYPE_MISMATCH_DATA
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR Type;
|
||||
ULONG Alignment;
|
||||
UCHAR TypeCheckKind;
|
||||
} KUBSAN_TYPE_MISMATCH_DATA, *PKUBSAN_TYPE_MISMATCH_DATA;
|
||||
|
||||
/* Kernel UBSAN type mismatch data structure definition */
|
||||
typedef struct _KUBSAN_TYPE_MISMATCH_DATA_V1
|
||||
{
|
||||
KUBSAN_SOURCE_LOCATION Location;
|
||||
PKUBSAN_TYPE_DESCRIPTOR Type;
|
||||
UCHAR LogAlignment;
|
||||
UCHAR TypeCheckKind;
|
||||
} KUBSAN_TYPE_MISMATCH_DATA_V1, *PKUBSAN_TYPE_MISMATCH_DATA_V1;
|
||||
|
||||
#endif /* __XTDK_KEFUNCS_H */
|
||||
|
@@ -47,6 +47,7 @@ typedef enum _KOBJECTS KOBJECTS, *PKOBJECTS;
|
||||
typedef enum _KPROCESS_STATE KPROCESS_STATE, *PKPROCESS_STATE;
|
||||
typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE;
|
||||
typedef enum _KTIMER_TYPE KTIMER_TYPE, *PKTIMER_TYPE;
|
||||
typedef enum _KUBSAN_DATA_TYPE KUBSAN_DATA_TYPE, *PKUBSAN_DATA_TYPE;
|
||||
typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE;
|
||||
typedef enum _MODE MODE, *PMODE;
|
||||
typedef enum _SYSTEM_FIRMWARE_TYPE SYSTEM_FIRMWARE_TYPE, *PSYSTEM_FIRMWARE_TYPE;
|
||||
@@ -248,6 +249,16 @@ typedef struct _KSERVICE_DESCRIPTOR_TABLE KSERVICE_DESCRIPTOR_TABLE, *PKSERVICE_
|
||||
typedef struct _KSPIN_LOCK_QUEUE KSPIN_LOCK_QUEUE, *PKSPIN_LOCK_QUEUE;
|
||||
typedef struct _KTHREAD KTHREAD, *PKTHREAD;
|
||||
typedef struct _KTIMER KTIMER, *PKTIMER;
|
||||
typedef struct _KUBSAN_FLOAT_CAST_OVERFLOW_DATA KUBSAN_FLOAT_CAST_OVERFLOW_DATA, *PKUBSAN_FLOAT_CAST_OVERFLOW_DATA;
|
||||
typedef struct _KUBSAN_FUNCTION_TYPE_MISMATCH_DATA KUBSAN_FUNCTION_TYPE_MISMATCH_DATA, *PKUBSAN_FUNCTION_TYPE_MISMATCH_DATA;
|
||||
typedef struct _KUBSAN_INVALID_BUILTIN_DATA KUBSAN_INVALID_BUILTIN_DATA, *PKUBSAN_INVALID_BUILTIN_DATA;
|
||||
typedef struct _KUBSAN_OUT_OF_BOUNDS_DATA KUBSAN_OUT_OF_BOUNDS_DATA, *PKUBSAN_OUT_OF_BOUNDS_DATA;
|
||||
typedef struct _KUBSAN_OVERFLOW_DATA KUBSAN_OVERFLOW_DATA, *PKUBSAN_OVERFLOW_DATA;
|
||||
typedef struct _KUBSAN_SHIFT_OUT_OF_BOUNDS_DATA KUBSAN_SHIFT_OUT_OF_BOUNDS_DATA, *PKUBSAN_SHIFT_OUT_OF_BOUNDS_DATA;
|
||||
typedef struct _KUBSAN_SOURCE_LOCATION KUBSAN_SOURCE_LOCATION, *PKUBSAN_SOURCE_LOCATION;
|
||||
typedef struct _KUBSAN_TYPE_DESCRIPTOR KUBSAN_TYPE_DESCRIPTOR, *PKUBSAN_TYPE_DESCRIPTOR;
|
||||
typedef struct _KUBSAN_TYPE_MISMATCH_DATA KUBSAN_TYPE_MISMATCH_DATA, *PKUBSAN_TYPE_MISMATCH_DATA;
|
||||
typedef struct _KUBSAN_TYPE_MISMATCH_DATA_V1 KUBSAN_TYPE_MISMATCH_DATA_V1, *PKUBSAN_TYPE_MISMATCH_DATA_V1;
|
||||
typedef struct _KWAIT_BLOCK KWAIT_BLOCK, *PKWAIT_BLOCK;
|
||||
typedef struct _LDR_DATA_TABLE_ENTRY LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;
|
||||
typedef struct _LIST_ENTRY LIST_ENTRY, *PLIST_ENTRY;
|
||||
|
Reference in New Issue
Block a user