xref: /xnu-11215.41.3/bsd/sys/kdebug_triage.h (revision 33de042d024d46de5ff4e89f2471de6608e37fa4)
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