1 /* 2 * Copyright (c) 2000-2020 Apple Inc. All rights reserved. 3 * 4 * @Apple_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ 21 */ 22 23 #ifndef BSD_SYS_KDEBUG_TRIAGE_H 24 #define BSD_SYS_KDEBUG_TRIAGE_H 25 26 void delete_buffers_triage(void); 27 28 #define KDBG_TRIAGE_CLASS_MASK (0xff000000) 29 #define KDBG_TRIAGE_CLASS_OFFSET (24) 30 #define KDBG_TRIAGE_CLASS_MAX (0xff) 31 32 /* Unused but reserved for future use (possibly for payload encoding) */ 33 #define KDBG_TRIAGE_RESERVED (0) 34 #define KDBG_TRIAGE_RESERVED_MASK (0x00ff0000) 35 #define KDBG_TRIAGE_RESERVED_OFFSET (16) 36 #define KDBG_TRIAGE_RESERVED_MAX (0xff) 37 38 #define KDBG_TRIAGE_CODE_MASK (0x0000fffc) 39 #define KDBG_TRIAGE_CODE_OFFSET (2) 40 #define KDBG_TRIAGE_CODE_MAX (0x3fff) 41 42 #define KDBG_TRIAGE_EVENTID(Class, Reserved, Code) \ 43 (((unsigned)((Class) & 0xff) << KDBG_TRIAGE_CLASS_OFFSET) | \ 44 ((unsigned)((Reserved) & 0xff) << KDBG_TRIAGE_RESERVED_OFFSET) | \ 45 ((unsigned)((Code) & 0x3fff) << KDBG_TRIAGE_CODE_OFFSET)) 46 47 #define KDBG_TRIAGE_EXTRACT_CLASS(Debugid) \ 48 ((uint8_t)(((Debugid) & KDBG_TRIAGE_CLASS_MASK) >> KDBG_TRIAGE_CLASS_OFFSET)) 49 #define KDBG_TRIAGE_EXTRACT_CODE(Debugid) \ 50 ((uint16_t)(((Debugid) & KDBG_TRIAGE_CODE_MASK) >> KDBG_TRIAGE_CODE_OFFSET)) 51 52 #define KDBG_TRIAGE_MAX_STRINGS (5) 53 #define KDBG_TRIAGE_MAX_STRLEN (128) 54 55 /****** VM Codes Begin ******/ 56 #define KDBG_TRIAGE_SUBSYS_VM (1) 57 58 enum vm_subsys_error_codes { 59 KDBG_TRIAGE_VM_PREFIX = 0, 60 KDBG_TRIAGE_VM_NO_DATA, 61 KDBG_TRIAGE_VM_TEXT_CORRUPTION, 62 KDBG_TRIAGE_VM_ADDRESS_NOT_FOUND, 63 KDBG_TRIAGE_VM_PROTECTION_FAILURE, 64 KDBG_TRIAGE_VM_FAULT_MEMORY_SHORTAGE, 65 KDBG_TRIAGE_VM_FAULT_COPY_MEMORY_SHORTAGE, 66 KDBG_TRIAGE_VM_FAULT_OBJCOPYSLOWLY_MEMORY_SHORTAGE, 67 KDBG_TRIAGE_VM_FAULT_OBJIOPLREQ_MEMORY_SHORTAGE, 68 KDBG_TRIAGE_VM_FAULT_INTERRUPTED, 69 KDBG_TRIAGE_VM_SUCCESS_NO_PAGE, 70 KDBG_TRIAGE_VM_GUARDPAGE_FAULT, 71 KDBG_TRIAGE_VM_NONZERO_PREEMPTION_LEVEL, 72 KDBG_TRIAGE_VM_BUSYPAGE_WAIT_INTERRUPTED, 73 KDBG_TRIAGE_VM_PURGEABLE_FAULT_ERROR, 74 KDBG_TRIAGE_VM_OBJECT_SHADOW_SEVERED, 75 KDBG_TRIAGE_VM_OBJECT_NOT_ALIVE, 76 KDBG_TRIAGE_VM_OBJECT_NO_PAGER, 77 KDBG_TRIAGE_VM_OBJECT_NO_PAGER_RECLAIM, 78 KDBG_TRIAGE_VM_OBJECT_NO_PAGER_UNMOUNT, 79 KDBG_TRIAGE_VM_OBJECT_NO_PAGER_FORCED_UNMOUNT, 80 KDBG_TRIAGE_VM_OBJECT_NO_PAGER_UNGRAFT, 81 KDBG_TRIAGE_VM_OBJECT_NO_PAGER_DEALLOC_PAGER, 82 KDBG_TRIAGE_VM_PAGE_HAS_ERROR, 83 KDBG_TRIAGE_VM_PAGE_HAS_RESTART, 84 KDBG_TRIAGE_VM_FAILED_IMMUTABLE_PAGE_WRITE, 85 KDBG_TRIAGE_VM_FAILED_NX_PAGE_EXEC_MAPPING, 86 KDBG_TRIAGE_VM_PMAP_ENTER_RESOURCE_SHORTAGE, 87 KDBG_TRIAGE_VM_COMPRESSOR_GET_OUT_OF_RANGE, 88 KDBG_TRIAGE_VM_COMPRESSOR_GET_NO_PAGE, 89 KDBG_TRIAGE_VM_COMPRESSOR_DECOMPRESS_FAILED, 90 KDBG_TRIAGE_VM_SUBMAP_NO_COW_ON_EXECUTABLE, 91 KDBG_TRIAGE_VM_SUBMAP_COPY_SLOWLY_FAILED, 92 KDBG_TRIAGE_VM_SUBMAP_COPY_STRAT_FAILED, 93 KDBG_TRIAGE_VM_VNODEPAGER_CLREAD_NO_UPL, 94 KDBG_TRIAGE_VM_VNODEPAGEIN_NO_UBCINFO, 95 KDBG_TRIAGE_VM_VNODEPAGEIN_FSPAGEIN_FAIL, 96 KDBG_TRIAGE_VM_VNODEPAGEIN_NO_UPL, 97 KDBG_TRIAGE_VM_ECC_DIRTY, 98 KDBG_TRIAGE_VM_ECC_CLEAN, 99 KDBG_TRIAGE_VM_COPYOUTMAP_SAMEMAP_ERROR, 100 KDBG_TRIAGE_VM_COPYOUTMAP_DIFFERENTMAP_ERROR, 101 KDBG_TRIAGE_VM_COPYOVERWRITE_FULL_NESTED_ERROR, 102 KDBG_TRIAGE_VM_COPYOVERWRITE_PARTIAL_NESTED_ERROR, 103 KDBG_TRIAGE_VM_COPYOVERWRITE_PARTIAL_HEAD_NESTED_ERROR, 104 KDBG_TRIAGE_VM_COPYOVERWRITE_PARTIAL_TAIL_NESTED_ERROR, 105 KDBG_TRIAGE_VM_COPYOUT_INTERNAL_SIZE_ERROR, 106 KDBG_TRIAGE_VM_COPYOUT_KERNEL_BUFFER_ERROR, 107 KDBG_TRIAGE_VM_COPYOUT_INTERNAL_ADJUSTING_ERROR, 108 KDBG_TRIAGE_VM_COPYOUT_INTERNAL_SPACE_ERROR, 109 KDBG_TRIAGE_VM_ALLOCATE_KERNEL_BADFLAGS_ERROR, 110 KDBG_TRIAGE_VM_ALLOCATE_KERNEL_BADMAP_ERROR, 111 KDBG_TRIAGE_VM_ALLOCATE_KERNEL_BADSIZE_ERROR, 112 KDBG_TRIAGE_VM_ALLOCATE_KERNEL_VMMAPENTER_ERROR, 113 KDBG_TRIAGE_VM_CODE_SIGNING, 114 KDBG_TRIAGE_VM_FAULTS_DISABLED, 115 KDBG_TRIAGE_VM_MAX 116 }; 117 #define VM_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_VM_MAX) 118 119 /****** VM Codes End ******/ 120 121 /****** Cluster Codes Begin ******/ 122 #define KDBG_TRIAGE_SUBSYS_CLUSTER (2) 123 124 enum cluster_subsys_error_codes { 125 KDBG_TRIAGE_CL_PREFIX = 0, 126 KDBG_TRIAGE_CL_PGIN_PAST_EOF, 127 KDBG_TRIAGE_CL_MAX 128 }; 129 #define CLUSTER_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_CL_MAX) 130 131 /****** Cluster Codes End ******/ 132 133 /****** Shared Region Codes Begin ******/ 134 #define KDBG_TRIAGE_SUBSYS_SHARED_REGION (3) 135 136 enum shared_region_subsys_error_codes { 137 KDBG_TRIAGE_SHARED_REGION_PREFIX = 0, 138 KDBG_TRIAGE_SHARED_REGION_NO_UPL, 139 KDBG_TRIAGE_SHARED_REGION_SLIDE_ERROR, 140 KDBG_TRIAGE_SHARED_REGION_PAGER_MEMORY_SHORTAGE, 141 KDBG_TRIAGE_SHARED_REGION_MAX 142 }; 143 #define SHARED_REGION_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_SHARED_REGION_MAX) 144 145 /****** Shared Region Codes End ******/ 146 147 /****** DYLD pager Codes Begin ******/ 148 #define KDBG_TRIAGE_SUBSYS_DYLD_PAGER (4) 149 150 enum dyld_pager_subsys_error_codes { 151 KDBG_TRIAGE_DYLD_PAGER_PREFIX = 0, 152 KDBG_TRIAGE_DYLD_PAGER_NO_UPL, 153 KDBG_TRIAGE_DYLD_PAGER_MEMORY_SHORTAGE, 154 KDBG_TRIAGE_DYLD_PAGER_SLIDE_ERROR, 155 KDBG_TRIAGE_DYLD_PAGER_CHAIN_OUT_OF_RANGE, 156 KDBG_TRIAGE_DYLD_PAGER_SEG_INFO_OUT_OF_RANGE, 157 KDBG_TRIAGE_DYLD_PAGER_SEG_SIZE_OUT_OF_RANGE, 158 KDBG_TRIAGE_DYLD_PAGER_SEG_PAGE_CNT_OUT_OF_RANGE, 159 KDBG_TRIAGE_DYLD_PAGER_NO_SEG_FOR_VA, 160 KDBG_TRIAGE_DYLD_PAGER_RANGE_NOT_FOUND, 161 KDBG_TRIAGE_DYLD_PAGER_DELTA_TOO_LARGE, 162 KDBG_TRIAGE_DYLD_PAGER_PAGE_START_OUT_OF_RANGE, 163 KDBG_TRIAGE_DYLD_PAGER_BAD_POINTER_FMT, 164 KDBG_TRIAGE_DYLD_PAGER_INVALID_AUTH_KEY, 165 KDBG_TRIAGE_DYLD_PAGER_BIND_ORDINAL, 166 KDBG_TRIAGE_DYLD_PAGER_MAX 167 }; 168 #define DYLD_PAGER_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_DYLD_PAGER_MAX) 169 170 /****** DYLD pager Codes End ******/ 171 172 /****** APPLE_PROTECT_PAGER pager Codes Begin ******/ 173 #define KDBG_TRIAGE_SUBSYS_APPLE_PROTECT_PAGER (5) 174 175 enum apple_protect_pager_subsys_error_codes { 176 KDBG_TRIAGE_APPLE_PROTECT_PAGER_PREFIX = 0, 177 KDBG_TRIAGE_APPLE_PROTECT_PAGER_MEMORY_SHORTAGE, 178 KDBG_TRIAGE_APPLE_PROTECT_PAGER_MAX 179 }; 180 #define APPLE_PROTECT_PAGER_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_APPLE_PROTECT_PAGER_MAX) 181 182 /****** APPLE_PROTECT pager Codes End ******/ 183 184 /****** Kext ktriage Begin ******/ 185 /* 186 * kexts can define their own strings and augment them with an argument. 187 * ktriage only needs to know the subsystem id, and expects that the first 188 * string will be the subsystem prefix string. 189 * 190 * Right now we don't support dynamically adding or removing subsystems. 191 */ 192 193 #define KDBG_TRIAGE_SUBSYS_APFS (7) 194 #define KDBG_TRIAGE_SUBSYS_DECMPFS (8) 195 196 /****** Kext ktriage End ******/ 197 198 /****** Corpse pager Codes Begin ******/ 199 #define KDBG_TRIAGE_SUBSYS_CORPSE (9) 200 201 enum corpse_subsys_error_codes { 202 KDBG_TRIAGE_CORPSE_PREFIX = 0, 203 KDBG_TRIAGE_CORPSE_PROC_TOO_BIG, 204 KDBG_TRIAGE_CORPSE_FAIL_LIBGMALLOC, 205 KDBG_TRIAGE_CORPSE_BLOCKED_JETSAM, 206 KDBG_TRIAGE_CORPSE_LIMIT, 207 KDBG_TRIAGE_CORPSES_DISABLED, 208 KDBG_TRIAGE_CORPSE_DISABLED_FOR_PROC, 209 KDBG_TRIAGE_CORPSE_MAX 210 }; 211 #define CORPSE_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_CORPSE_MAX) 212 213 /****** Corpse pager Codes End ******/ 214 215 /****** VM API Sanitization Codes Begin ******/ 216 #define KDBG_TRIAGE_SUBSYS_VM_SANITIZE (10) 217 218 enum vm_sanitize_subsys_error_codes { 219 KDBG_TRIAGE_VM_SANITIZE_PREFIX = 0, 220 221 // value 0 is also used for skipping ktriage 222 KDBG_TRIAGE_VM_SANITIZE_SKIP = KDBG_TRIAGE_VM_SANITIZE_PREFIX, 223 224 KDBG_TRIAGE_VM_SANITIZE_MACH_MAKE_MEMORY_ENTRY = 1, 225 KDBG_TRIAGE_VM_SANITIZE_MACH_MEMORY_ENTRY_PAGE_OP, 226 KDBG_TRIAGE_VM_SANITIZE_MACH_MEMORY_ENTRY_RANGE_OP, 227 KDBG_TRIAGE_VM_SANITIZE_MACH_MEMORY_ENTRY_MAP_SIZE, 228 KDBG_TRIAGE_VM_SANITIZE_MACH_MEMORY_OBJECT_MEMORY_ENTRY, 229 KDBG_TRIAGE_VM_SANITIZE_VM_ALLOCATE_FIXED, 230 KDBG_TRIAGE_VM_SANITIZE_VM_ALLOCATE_ANYWHERE, 231 KDBG_TRIAGE_VM_SANITIZE_VM_DEALLOCATE, 232 KDBG_TRIAGE_VM_SANITIZE_MUNMAP, 233 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_REMAP, 234 KDBG_TRIAGE_VM_SANITIZE_MMAP, 235 KDBG_TRIAGE_VM_SANITIZE_MAP_WITH_LINKING_NP, 236 KDBG_TRIAGE_VM_SANITIZE_ENTER_MEM_OBJ, 237 KDBG_TRIAGE_VM_SANITIZE_ENTER_MEM_OBJ_CTL, 238 KDBG_TRIAGE_VM_SANITIZE_MREMAP_ENCRYPTED, 239 KDBG_TRIAGE_VM_SANITIZE_VM_WIRE_USER, 240 KDBG_TRIAGE_VM_SANITIZE_VM_UNWIRE_USER, 241 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_WIRE, 242 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_UNWIRE, 243 KDBG_TRIAGE_VM_SANITIZE_VSLOCK, 244 KDBG_TRIAGE_VM_SANITIZE_VSUNLOCK, 245 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_COPY_OVERWRITE, 246 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_COPYIN, 247 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_READ_USER, 248 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_WRITE_USER, 249 KDBG_TRIAGE_VM_SANITIZE_MACH_VM_INHERIT, 250 KDBG_TRIAGE_VM_SANITIZE_VM_INHERIT, 251 KDBG_TRIAGE_VM_SANITIZE_VM32_INHERIT, 252 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_INHERIT, 253 KDBG_TRIAGE_VM_SANITIZE_MINHERIT, 254 KDBG_TRIAGE_VM_SANITIZE_MACH_VM_PROTECT, 255 KDBG_TRIAGE_VM_SANITIZE_VM_PROTECT, 256 KDBG_TRIAGE_VM_SANITIZE_VM32_PROTECT, 257 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_PROTECT, 258 KDBG_TRIAGE_VM_SANITIZE_MPROTECT, 259 KDBG_TRIAGE_VM_SANITIZE_USERACC, 260 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_MSYNC, 261 KDBG_TRIAGE_VM_SANITIZE_MSYNC, 262 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_MACHINE_ATTRIBUTE, 263 KDBG_TRIAGE_VM_SANITIZE_MINCORE, 264 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_PAGE_RANGE_INFO, 265 KDBG_TRIAGE_VM_SANITIZE_VM_MAP_PAGE_RANGE_QUERY, 266 KDBG_TRIAGE_VM_SANITIZE_TEST, 267 268 KDBG_TRIAGE_VM_SANITIZE_MAX 269 }; 270 #define VM_SANITIZE_MAX_TRIAGE_STRINGS (KDBG_TRIAGE_VM_SANITIZE_MAX) 271 272 /****** VM API Sanitization Codes End ******/ 273 274 /* please update KDBG_TRIAGE_SUBSYS_MAX when adding a new subsystem */ 275 276 #define KDBG_TRIAGE_SUBSYS_MAX KDBG_TRIAGE_SUBSYS_VM_SANITIZE 277 278 #endif /* BSD_SYS_KDEBUG_TRIAGE_H */ 279