Bug 1861751 Part 4: Add tests of invalid buffers in various usages. r=webgpu-reviewer...
[gecko.git] / toolkit / crashreporter / breakpad-patches / 18-fastfail-codes.patch
blob543f320c469af15c78b36280622f6fbdb6054829
1 changeset: 651272:ff2582aceafe
2 parent: 651260:b740f950e497
3 user: Gabriele Svelto <gsvelto@mozilla.com>
4 date: Thu Apr 08 12:01:43 2021 +0200
5 summary: fastfail
7 diff --git a/src/google_breakpad/common/minidump_exception_win32.h b/src/google_breakpad/common/minidump_exception_win32.h
8 --- a/src/google_breakpad/common/minidump_exception_win32.h
9 +++ b/src/google_breakpad/common/minidump_exception_win32.h
10 @@ -2261,9 +2261,84 @@ typedef enum {
11 // These constants are defined in the MSDN documentation of
12 // the EXCEPTION_RECORD structure.
13 typedef enum {
14 MD_IN_PAGE_ERROR_WIN_READ = 0,
15 MD_IN_PAGE_ERROR_WIN_WRITE = 1,
16 MD_IN_PAGE_ERROR_WIN_EXEC = 8
17 } MDInPageErrorTypeWin;
19 +/* For (MDException).exception_information[0], when (MDException).exception_code
20 + * is MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN. This describes the underlying
21 + * reason for the crash. These values come from winnt.h.
22 + *
23 + * The content of this enum was created from winnt.h in the 10 SDK
24 + * (version 10.0.19041.0) with
25 + *
26 + * egrep '#define FAST_FAIL_[A-Z_0-9]+\s+[0-9]' winnt.h
27 + * | tr -d '\r'
28 + * | sed -r 's@#define FAST_FAIL_([A-Z_0-9]+)\s+([0-9]+).*@\2 \1@'
29 + * | sed -r 's@([0-9]+) ([A-Z_0-9]+)@ MD_FAST_FAIL_WIN_\2 = \1,@' */
30 +typedef enum {
31 + MD_FAST_FAIL_WIN_LEGACY_GS_VIOLATION = 0,
32 + MD_FAST_FAIL_WIN_VTGUARD_CHECK_FAILURE = 1,
33 + MD_FAST_FAIL_WIN_STACK_COOKIE_CHECK_FAILURE = 2,
34 + MD_FAST_FAIL_WIN_CORRUPT_LIST_ENTRY = 3,
35 + MD_FAST_FAIL_WIN_INCORRECT_STACK = 4,
36 + MD_FAST_FAIL_WIN_INVALID_ARG = 5,
37 + MD_FAST_FAIL_WIN_GS_COOKIE_INIT = 6,
38 + MD_FAST_FAIL_WIN_FATAL_APP_EXIT = 7,
39 + MD_FAST_FAIL_WIN_RANGE_CHECK_FAILURE = 8,
40 + MD_FAST_FAIL_WIN_UNSAFE_REGISTRY_ACCESS = 9,
41 + MD_FAST_FAIL_WIN_GUARD_ICALL_CHECK_FAILURE = 10,
42 + MD_FAST_FAIL_WIN_GUARD_WRITE_CHECK_FAILURE = 11,
43 + MD_FAST_FAIL_WIN_INVALID_FIBER_SWITCH = 12,
44 + MD_FAST_FAIL_WIN_INVALID_SET_OF_CONTEXT = 13,
45 + MD_FAST_FAIL_WIN_INVALID_REFERENCE_COUNT = 14,
46 + MD_FAST_FAIL_WIN_INVALID_JUMP_BUFFER = 18,
47 + MD_FAST_FAIL_WIN_MRDATA_MODIFIED = 19,
48 + MD_FAST_FAIL_WIN_CERTIFICATION_FAILURE = 20,
49 + MD_FAST_FAIL_WIN_INVALID_EXCEPTION_CHAIN = 21,
50 + MD_FAST_FAIL_WIN_CRYPTO_LIBRARY = 22,
51 + MD_FAST_FAIL_WIN_INVALID_CALL_IN_DLL_CALLOUT = 23,
52 + MD_FAST_FAIL_WIN_INVALID_IMAGE_BASE = 24,
53 + MD_FAST_FAIL_WIN_DLOAD_PROTECTION_FAILURE = 25,
54 + MD_FAST_FAIL_WIN_UNSAFE_EXTENSION_CALL = 26,
55 + MD_FAST_FAIL_WIN_DEPRECATED_SERVICE_INVOKED = 27,
56 + MD_FAST_FAIL_WIN_INVALID_BUFFER_ACCESS = 28,
57 + MD_FAST_FAIL_WIN_INVALID_BALANCED_TREE = 29,
58 + MD_FAST_FAIL_WIN_INVALID_NEXT_THREAD = 30,
59 + MD_FAST_FAIL_WIN_GUARD_ICALL_CHECK_SUPPRESSED = 31,
60 + MD_FAST_FAIL_WIN_APCS_DISABLED = 32,
61 + MD_FAST_FAIL_WIN_INVALID_IDLE_STATE = 33,
62 + MD_FAST_FAIL_WIN_MRDATA_PROTECTION_FAILURE = 34,
63 + MD_FAST_FAIL_WIN_UNEXPECTED_HEAP_EXCEPTION = 35,
64 + MD_FAST_FAIL_WIN_INVALID_LOCK_STATE = 36,
65 + MD_FAST_FAIL_WIN_GUARD_JUMPTABLE = 37,
66 + MD_FAST_FAIL_WIN_INVALID_LONGJUMP_TARGET = 38,
67 + MD_FAST_FAIL_WIN_INVALID_DISPATCH_CONTEXT = 39,
68 + MD_FAST_FAIL_WIN_INVALID_THREAD = 40,
69 + MD_FAST_FAIL_WIN_INVALID_SYSCALL_NUMBER = 41,
70 + MD_FAST_FAIL_WIN_INVALID_FILE_OPERATION = 42,
71 + MD_FAST_FAIL_WIN_LPAC_ACCESS_DENIED = 43,
72 + MD_FAST_FAIL_WIN_GUARD_SS_FAILURE = 44,
73 + MD_FAST_FAIL_WIN_LOADER_CONTINUITY_FAILURE = 45,
74 + MD_FAST_FAIL_WIN_GUARD_EXPORT_SUPPRESSION_FAILURE = 46,
75 + MD_FAST_FAIL_WIN_INVALID_CONTROL_STACK = 47,
76 + MD_FAST_FAIL_WIN_SET_CONTEXT_DENIED = 48,
77 + MD_FAST_FAIL_WIN_INVALID_IAT = 49,
78 + MD_FAST_FAIL_WIN_HEAP_METADATA_CORRUPTION = 50,
79 + MD_FAST_FAIL_WIN_PAYLOAD_RESTRICTION_VIOLATION = 51,
80 + MD_FAST_FAIL_WIN_LOW_LABEL_ACCESS_DENIED = 52,
81 + MD_FAST_FAIL_WIN_ENCLAVE_CALL_FAILURE = 53,
82 + MD_FAST_FAIL_WIN_UNHANDLED_LSS_EXCEPTON = 54,
83 + MD_FAST_FAIL_WIN_ADMINLESS_ACCESS_DENIED = 55,
84 + MD_FAST_FAIL_WIN_UNEXPECTED_CALL = 56,
85 + MD_FAST_FAIL_WIN_CONTROL_INVALID_RETURN_ADDRESS = 57,
86 + MD_FAST_FAIL_WIN_UNEXPECTED_HOST_BEHAVIOR = 58,
87 + MD_FAST_FAIL_WIN_FLAGS_CORRUPTION = 59,
88 + MD_FAST_FAIL_WIN_VEH_CORRUPTION = 60,
89 + MD_FAST_FAIL_WIN_ETW_CORRUPTION = 61,
90 + MD_FAST_FAIL_WIN_RIO_ABORT = 62,
91 + MD_FAST_FAIL_WIN_INVALID_PFN = 63,
92 +} MDFastFailWin;
94 #endif /* GOOGLE_BREAKPAD_COMMON_MINIDUMP_EXCEPTION_WIN32_H__ */
95 diff --git a/src/processor/minidump_processor.cc b/src/processor/minidump_processor.cc
96 --- a/src/processor/minidump_processor.cc
97 +++ b/src/processor/minidump_processor.cc
98 @@ -1288,16 +1288,24 @@ string MinidumpProcessor::GetCrashReason
99 case MD_EXCEPTION_CODE_WIN_BAD_FUNCTION_TABLE:
100 reason = "EXCEPTION_BAD_FUNCTION_TABLE";
101 break;
102 case MD_EXCEPTION_CODE_WIN_POSSIBLE_DEADLOCK:
103 reason = "EXCEPTION_POSSIBLE_DEADLOCK";
104 break;
105 case MD_EXCEPTION_CODE_WIN_STACK_BUFFER_OVERRUN:
106 reason = "EXCEPTION_STACK_BUFFER_OVERRUN";
107 + if (raw_exception->exception_record.number_parameters > 0) {
108 + uint32_t fast_fail_code =
109 + static_cast<uint32_t>
110 + (raw_exception->exception_record.exception_information[0]);
111 + reason.append(" / ");
112 + reason.append(FastFailToString(fast_fail_code));
115 break;
116 case MD_EXCEPTION_CODE_WIN_HEAP_CORRUPTION:
117 reason = "EXCEPTION_HEAP_CORRUPTION";
118 break;
119 case MD_EXCEPTION_OUT_OF_MEMORY:
120 reason = "Out of Memory";
121 break;
122 case MD_EXCEPTION_CODE_WIN_UNHANDLED_CPP_EXCEPTION:
123 diff --git a/src/processor/symbolic_constants_win.cc b/src/processor/symbolic_constants_win.cc
124 --- a/src/processor/symbolic_constants_win.cc
125 +++ b/src/processor/symbolic_constants_win.cc
126 @@ -6409,9 +6409,214 @@ string NTStatusToString(uint32_t ntstatu
127 snprintf(reason_string, sizeof(reason_string), "0x%08x", ntstatus);
128 reason = reason_string;
129 break;
132 return reason;
135 +string FastFailToString(uint32_t fast_fail_code) {
136 + string code_string;
137 + // The content of this switch was created from winnt.h in the 10 SDK
138 + // (version 10.0.19041.0) with
139 + //
140 + // egrep '#define FAST_FAIL_[A-Z_0-9]+\s+[0-9]' winnt.h
141 + // | tr -d '\r'
142 + // | sed -r 's@#define FAST_FAIL_([A-Z_0-9]+)\s+([0-9]+).*@\2 \1@'
143 + // | sed -r 's@([0-9]+) ([A-Z_0-9]+)@ case MD_FAST_FAIL_WIN_\2:\n code_string = "FAST_FAIL_\2";\n break;@'
144 + //
145 + // and then the default case added.
146 + switch (fast_fail_code) {
147 + case MD_FAST_FAIL_WIN_LEGACY_GS_VIOLATION:
148 + code_string = "FAST_FAIL_LEGACY_GS_VIOLATION";
149 + break;
150 + case MD_FAST_FAIL_WIN_VTGUARD_CHECK_FAILURE:
151 + code_string = "FAST_FAIL_VTGUARD_CHECK_FAILURE";
152 + break;
153 + case MD_FAST_FAIL_WIN_STACK_COOKIE_CHECK_FAILURE:
154 + code_string = "FAST_FAIL_STACK_COOKIE_CHECK_FAILURE";
155 + break;
156 + case MD_FAST_FAIL_WIN_CORRUPT_LIST_ENTRY:
157 + code_string = "FAST_FAIL_CORRUPT_LIST_ENTRY";
158 + break;
159 + case MD_FAST_FAIL_WIN_INCORRECT_STACK:
160 + code_string = "FAST_FAIL_INCORRECT_STACK";
161 + break;
162 + case MD_FAST_FAIL_WIN_INVALID_ARG:
163 + code_string = "FAST_FAIL_INVALID_ARG";
164 + break;
165 + case MD_FAST_FAIL_WIN_GS_COOKIE_INIT:
166 + code_string = "FAST_FAIL_GS_COOKIE_INIT";
167 + break;
168 + case MD_FAST_FAIL_WIN_FATAL_APP_EXIT:
169 + code_string = "FAST_FAIL_FATAL_APP_EXIT";
170 + break;
171 + case MD_FAST_FAIL_WIN_RANGE_CHECK_FAILURE:
172 + code_string = "FAST_FAIL_RANGE_CHECK_FAILURE";
173 + break;
174 + case MD_FAST_FAIL_WIN_UNSAFE_REGISTRY_ACCESS:
175 + code_string = "FAST_FAIL_UNSAFE_REGISTRY_ACCESS";
176 + break;
177 + case MD_FAST_FAIL_WIN_GUARD_ICALL_CHECK_FAILURE:
178 + code_string = "FAST_FAIL_GUARD_ICALL_CHECK_FAILURE";
179 + break;
180 + case MD_FAST_FAIL_WIN_GUARD_WRITE_CHECK_FAILURE:
181 + code_string = "FAST_FAIL_GUARD_WRITE_CHECK_FAILURE";
182 + break;
183 + case MD_FAST_FAIL_WIN_INVALID_FIBER_SWITCH:
184 + code_string = "FAST_FAIL_INVALID_FIBER_SWITCH";
185 + break;
186 + case MD_FAST_FAIL_WIN_INVALID_SET_OF_CONTEXT:
187 + code_string = "FAST_FAIL_INVALID_SET_OF_CONTEXT";
188 + break;
189 + case MD_FAST_FAIL_WIN_INVALID_REFERENCE_COUNT:
190 + code_string = "FAST_FAIL_INVALID_REFERENCE_COUNT";
191 + break;
192 + case MD_FAST_FAIL_WIN_INVALID_JUMP_BUFFER:
193 + code_string = "FAST_FAIL_INVALID_JUMP_BUFFER";
194 + break;
195 + case MD_FAST_FAIL_WIN_MRDATA_MODIFIED:
196 + code_string = "FAST_FAIL_MRDATA_MODIFIED";
197 + break;
198 + case MD_FAST_FAIL_WIN_CERTIFICATION_FAILURE:
199 + code_string = "FAST_FAIL_CERTIFICATION_FAILURE";
200 + break;
201 + case MD_FAST_FAIL_WIN_INVALID_EXCEPTION_CHAIN:
202 + code_string = "FAST_FAIL_INVALID_EXCEPTION_CHAIN";
203 + break;
204 + case MD_FAST_FAIL_WIN_CRYPTO_LIBRARY:
205 + code_string = "FAST_FAIL_CRYPTO_LIBRARY";
206 + break;
207 + case MD_FAST_FAIL_WIN_INVALID_CALL_IN_DLL_CALLOUT:
208 + code_string = "FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT";
209 + break;
210 + case MD_FAST_FAIL_WIN_INVALID_IMAGE_BASE:
211 + code_string = "FAST_FAIL_INVALID_IMAGE_BASE";
212 + break;
213 + case MD_FAST_FAIL_WIN_DLOAD_PROTECTION_FAILURE:
214 + code_string = "FAST_FAIL_DLOAD_PROTECTION_FAILURE";
215 + break;
216 + case MD_FAST_FAIL_WIN_UNSAFE_EXTENSION_CALL:
217 + code_string = "FAST_FAIL_UNSAFE_EXTENSION_CALL";
218 + break;
219 + case MD_FAST_FAIL_WIN_DEPRECATED_SERVICE_INVOKED:
220 + code_string = "FAST_FAIL_DEPRECATED_SERVICE_INVOKED";
221 + break;
222 + case MD_FAST_FAIL_WIN_INVALID_BUFFER_ACCESS:
223 + code_string = "FAST_FAIL_INVALID_BUFFER_ACCESS";
224 + break;
225 + case MD_FAST_FAIL_WIN_INVALID_BALANCED_TREE:
226 + code_string = "FAST_FAIL_INVALID_BALANCED_TREE";
227 + break;
228 + case MD_FAST_FAIL_WIN_INVALID_NEXT_THREAD:
229 + code_string = "FAST_FAIL_INVALID_NEXT_THREAD";
230 + break;
231 + case MD_FAST_FAIL_WIN_GUARD_ICALL_CHECK_SUPPRESSED:
232 + code_string = "FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED";
233 + break;
234 + case MD_FAST_FAIL_WIN_APCS_DISABLED:
235 + code_string = "FAST_FAIL_APCS_DISABLED";
236 + break;
237 + case MD_FAST_FAIL_WIN_INVALID_IDLE_STATE:
238 + code_string = "FAST_FAIL_INVALID_IDLE_STATE";
239 + break;
240 + case MD_FAST_FAIL_WIN_MRDATA_PROTECTION_FAILURE:
241 + code_string = "FAST_FAIL_MRDATA_PROTECTION_FAILURE";
242 + break;
243 + case MD_FAST_FAIL_WIN_UNEXPECTED_HEAP_EXCEPTION:
244 + code_string = "FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION";
245 + break;
246 + case MD_FAST_FAIL_WIN_INVALID_LOCK_STATE:
247 + code_string = "FAST_FAIL_INVALID_LOCK_STATE";
248 + break;
249 + case MD_FAST_FAIL_WIN_GUARD_JUMPTABLE:
250 + code_string = "FAST_FAIL_GUARD_JUMPTABLE";
251 + break;
252 + case MD_FAST_FAIL_WIN_INVALID_LONGJUMP_TARGET:
253 + code_string = "FAST_FAIL_INVALID_LONGJUMP_TARGET";
254 + break;
255 + case MD_FAST_FAIL_WIN_INVALID_DISPATCH_CONTEXT:
256 + code_string = "FAST_FAIL_INVALID_DISPATCH_CONTEXT";
257 + break;
258 + case MD_FAST_FAIL_WIN_INVALID_THREAD:
259 + code_string = "FAST_FAIL_INVALID_THREAD";
260 + break;
261 + case MD_FAST_FAIL_WIN_INVALID_SYSCALL_NUMBER:
262 + code_string = "FAST_FAIL_INVALID_SYSCALL_NUMBER";
263 + break;
264 + case MD_FAST_FAIL_WIN_INVALID_FILE_OPERATION:
265 + code_string = "FAST_FAIL_INVALID_FILE_OPERATION";
266 + break;
267 + case MD_FAST_FAIL_WIN_LPAC_ACCESS_DENIED:
268 + code_string = "FAST_FAIL_LPAC_ACCESS_DENIED";
269 + break;
270 + case MD_FAST_FAIL_WIN_GUARD_SS_FAILURE:
271 + code_string = "FAST_FAIL_GUARD_SS_FAILURE";
272 + break;
273 + case MD_FAST_FAIL_WIN_LOADER_CONTINUITY_FAILURE:
274 + code_string = "FAST_FAIL_LOADER_CONTINUITY_FAILURE";
275 + break;
276 + case MD_FAST_FAIL_WIN_GUARD_EXPORT_SUPPRESSION_FAILURE:
277 + code_string = "FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE";
278 + break;
279 + case MD_FAST_FAIL_WIN_INVALID_CONTROL_STACK:
280 + code_string = "FAST_FAIL_INVALID_CONTROL_STACK";
281 + break;
282 + case MD_FAST_FAIL_WIN_SET_CONTEXT_DENIED:
283 + code_string = "FAST_FAIL_SET_CONTEXT_DENIED";
284 + break;
285 + case MD_FAST_FAIL_WIN_INVALID_IAT:
286 + code_string = "FAST_FAIL_INVALID_IAT";
287 + break;
288 + case MD_FAST_FAIL_WIN_HEAP_METADATA_CORRUPTION:
289 + code_string = "FAST_FAIL_HEAP_METADATA_CORRUPTION";
290 + break;
291 + case MD_FAST_FAIL_WIN_PAYLOAD_RESTRICTION_VIOLATION:
292 + code_string = "FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION";
293 + break;
294 + case MD_FAST_FAIL_WIN_LOW_LABEL_ACCESS_DENIED:
295 + code_string = "FAST_FAIL_LOW_LABEL_ACCESS_DENIED";
296 + break;
297 + case MD_FAST_FAIL_WIN_ENCLAVE_CALL_FAILURE:
298 + code_string = "FAST_FAIL_ENCLAVE_CALL_FAILURE";
299 + break;
300 + case MD_FAST_FAIL_WIN_UNHANDLED_LSS_EXCEPTON:
301 + code_string = "FAST_FAIL_UNHANDLED_LSS_EXCEPTON";
302 + break;
303 + case MD_FAST_FAIL_WIN_ADMINLESS_ACCESS_DENIED:
304 + code_string = "FAST_FAIL_ADMINLESS_ACCESS_DENIED";
305 + break;
306 + case MD_FAST_FAIL_WIN_UNEXPECTED_CALL:
307 + code_string = "FAST_FAIL_UNEXPECTED_CALL";
308 + break;
309 + case MD_FAST_FAIL_WIN_CONTROL_INVALID_RETURN_ADDRESS:
310 + code_string = "FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS";
311 + break;
312 + case MD_FAST_FAIL_WIN_UNEXPECTED_HOST_BEHAVIOR:
313 + code_string = "FAST_FAIL_UNEXPECTED_HOST_BEHAVIOR";
314 + break;
315 + case MD_FAST_FAIL_WIN_FLAGS_CORRUPTION:
316 + code_string = "FAST_FAIL_FLAGS_CORRUPTION";
317 + break;
318 + case MD_FAST_FAIL_WIN_VEH_CORRUPTION:
319 + code_string = "FAST_FAIL_VEH_CORRUPTION";
320 + break;
321 + case MD_FAST_FAIL_WIN_ETW_CORRUPTION:
322 + code_string = "FAST_FAIL_ETW_CORRUPTION";
323 + break;
324 + case MD_FAST_FAIL_WIN_RIO_ABORT:
325 + code_string = "FAST_FAIL_RIO_ABORT";
326 + break;
327 + case MD_FAST_FAIL_WIN_INVALID_PFN:
328 + code_string = "FAST_FAIL_INVALID_PFN";
329 + break;
330 + default: {
331 + char buffer[11];
332 + snprintf(buffer, sizeof(buffer), "%u", fast_fail_code);
333 + code_string = buffer;
334 + break;
337 + return code_string;
340 } // namespace google_breakpad
341 diff --git a/src/processor/symbolic_constants_win.h b/src/processor/symbolic_constants_win.h
342 --- a/src/processor/symbolic_constants_win.h
343 +++ b/src/processor/symbolic_constants_win.h
344 @@ -41,11 +41,14 @@
345 #include "common/using_std_string.h"
346 #include "google_breakpad/common/breakpad_types.h"
348 namespace google_breakpad {
350 /* Converts a NTSTATUS code to a reason string. */
351 string NTStatusToString(uint32_t ntstatus);
353 +/* Converts a FAST_FAIL code to a reason string. */
354 +string FastFailToString(uint32_t fast_fail_code);
356 } // namespace google_breakpad
358 #endif // GOOGLE_BREAKPAD_PROCESSOR_SYMBOLIC_CONSTANTS_WIN_H_