OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
KextInject.c
Go to the documentation of this file.
1
15#include <Library/DebugLib.h>
16#include <Library/MemoryAllocationLib.h>
19#include <Library/OcMiscLib.h>
21
22#include <string.h>
23#include <sys/time.h>
24
25#include <UserFile.h>
26
27STATIC BOOLEAN FailedToProcess = FALSE;
28STATIC UINT32 KernelVersion = 0;
29
30STATIC EFI_FILE_PROTOCOL NilFileProtocol;
31
32STATIC UINT8 *mPrelinked = NULL;
33STATIC UINT32 mPrelinkedSize = 0;
34
35STATIC
36CONST CHAR8
38 0x3C, 0x3F, 0x78, 0x6D, 0x6C, 0x20, 0x76, 0x65,
39 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31,
40 0x2E, 0x30, 0x22, 0x20, 0x65, 0x6E, 0x63, 0x6F,
41 0x64, 0x69, 0x6E, 0x67, 0x3D, 0x22, 0x55, 0x54,
42 0x46, 0x2D, 0x38, 0x22, 0x3F, 0x3E, 0x0D, 0x3C,
43 0x21, 0x44, 0x4F, 0x43, 0x54, 0x59, 0x50, 0x45,
44 0x20, 0x70, 0x6C, 0x69, 0x73, 0x74, 0x20, 0x50,
45 0x55, 0x42, 0x4C, 0x49, 0x43, 0x20, 0x22, 0x2D,
46 0x2F, 0x2F, 0x41, 0x70, 0x70, 0x6C, 0x65, 0x2F,
47 0x2F, 0x44, 0x54, 0x44, 0x20, 0x50, 0x4C, 0x49,
48 0x53, 0x54, 0x20, 0x31, 0x2E, 0x30, 0x2F, 0x2F,
49 0x45, 0x4E, 0x22, 0x20, 0x22, 0x68, 0x74, 0x74,
50 0x70, 0x3A, 0x2F, 0x2F, 0x77, 0x77, 0x77, 0x2E,
51 0x61, 0x70, 0x70, 0x6C, 0x65, 0x2E, 0x63, 0x6F,
52 0x6D, 0x2F, 0x44, 0x54, 0x44, 0x73, 0x2F, 0x50,
53 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x4C,
54 0x69, 0x73, 0x74, 0x2D, 0x31, 0x2E, 0x30, 0x2E,
55 0x64, 0x74, 0x64, 0x22, 0x3E, 0x0D, 0x3C, 0x70,
56 0x6C, 0x69, 0x73, 0x74, 0x20, 0x76, 0x65, 0x72,
57 0x73, 0x69, 0x6F, 0x6E, 0x3D, 0x22, 0x31, 0x2E,
58 0x30, 0x22, 0x3E, 0x0D, 0x3C, 0x64, 0x69, 0x63,
59 0x74, 0x3E, 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79,
60 0x3E, 0x43, 0x46, 0x42, 0x75, 0x6E, 0x64, 0x6C,
61 0x65, 0x49, 0x64, 0x65, 0x6E, 0x74, 0x69, 0x66,
62 0x69, 0x65, 0x72, 0x3C, 0x2F, 0x6B, 0x65, 0x79,
63 0x3E, 0x0D, 0x09, 0x3C, 0x73, 0x74, 0x72, 0x69,
64 0x6E, 0x67, 0x3E, 0x61, 0x73, 0x2E, 0x76, 0x69,
65 0x74, 0x39, 0x36, 0x39, 0x36, 0x2E, 0x54, 0x65,
66 0x73, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72,
67 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
68 0x3E, 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E,
69 0x43, 0x46, 0x42, 0x75, 0x6E, 0x64, 0x6C, 0x65,
70 0x49, 0x6E, 0x66, 0x6F, 0x44, 0x69, 0x63, 0x74,
71 0x69, 0x6F, 0x6E, 0x61, 0x72, 0x79, 0x56, 0x65,
72 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3C, 0x2F, 0x6B,
73 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x3C, 0x73, 0x74,
74 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x36, 0x2E, 0x30,
75 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
76 0x3E, 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E,
77 0x43, 0x46, 0x42, 0x75, 0x6E, 0x64, 0x6C, 0x65,
78 0x4E, 0x61, 0x6D, 0x65, 0x3C, 0x2F, 0x6B, 0x65,
79 0x79, 0x3E, 0x0D, 0x09, 0x3C, 0x73, 0x74, 0x72,
80 0x69, 0x6E, 0x67, 0x3E, 0x43, 0x50, 0x55, 0x46,
81 0x72, 0x69, 0x65, 0x6E, 0x64, 0x44, 0x61, 0x74,
82 0x61, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64, 0x65,
83 0x72, 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E,
84 0x67, 0x3E, 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79,
85 0x3E, 0x43, 0x46, 0x42, 0x75, 0x6E, 0x64, 0x6C,
86 0x65, 0x50, 0x61, 0x63, 0x6B, 0x61, 0x67, 0x65,
87 0x54, 0x79, 0x70, 0x65, 0x3C, 0x2F, 0x6B, 0x65,
88 0x79, 0x3E, 0x0D, 0x09, 0x3C, 0x73, 0x74, 0x72,
89 0x69, 0x6E, 0x67, 0x3E, 0x4B, 0x45, 0x58, 0x54,
90 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
91 0x3E, 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E,
92 0x43, 0x46, 0x42, 0x75, 0x6E, 0x64, 0x6C, 0x65,
93 0x53, 0x68, 0x6F, 0x72, 0x74, 0x56, 0x65, 0x72,
94 0x73, 0x69, 0x6F, 0x6E, 0x53, 0x74, 0x72, 0x69,
95 0x6E, 0x67, 0x3C, 0x2F, 0x6B, 0x65, 0x79, 0x3E,
96 0x0D, 0x09, 0x3C, 0x73, 0x74, 0x72, 0x69, 0x6E,
97 0x67, 0x3E, 0x31, 0x2E, 0x30, 0x2E, 0x30, 0x3C,
98 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E,
99 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E, 0x43,
100 0x46, 0x42, 0x75, 0x6E, 0x64, 0x6C, 0x65, 0x56,
101 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x3C, 0x2F,
102 0x6B, 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x3C, 0x73,
103 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x31, 0x2E,
104 0x30, 0x2E, 0x30, 0x3C, 0x2F, 0x73, 0x74, 0x72,
105 0x69, 0x6E, 0x67, 0x3E, 0x0D, 0x09, 0x3C, 0x6B,
106 0x65, 0x79, 0x3E, 0x49, 0x4F, 0x4B, 0x69, 0x74,
107 0x50, 0x65, 0x72, 0x73, 0x6F, 0x6E, 0x61, 0x6C,
108 0x69, 0x74, 0x69, 0x65, 0x73, 0x3C, 0x2F, 0x6B,
109 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x3C, 0x64, 0x69,
110 0x63, 0x74, 0x3E, 0x0D, 0x09, 0x09, 0x3C, 0x6B,
111 0x65, 0x79, 0x3E, 0x54, 0x65, 0x73, 0x74, 0x44,
112 0x61, 0x74, 0x61, 0x50, 0x72, 0x6F, 0x76, 0x69,
113 0x64, 0x65, 0x72, 0x3C, 0x2F, 0x6B, 0x65, 0x79,
114 0x3E, 0x0D, 0x09, 0x09, 0x3C, 0x64, 0x69, 0x63,
115 0x74, 0x3E, 0x0D, 0x09, 0x09, 0x09, 0x3C, 0x6B,
116 0x65, 0x79, 0x3E, 0x43, 0x46, 0x42, 0x75, 0x6E,
117 0x64, 0x6C, 0x65, 0x49, 0x64, 0x65, 0x6E, 0x74,
118 0x69, 0x66, 0x69, 0x65, 0x72, 0x3C, 0x2F, 0x6B,
119 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x09, 0x09, 0x3C,
120 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x63,
121 0x6F, 0x6D, 0x2E, 0x61, 0x70, 0x70, 0x6C, 0x65,
122 0x2E, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x2E,
123 0x41, 0x70, 0x70, 0x6C, 0x65, 0x41, 0x43, 0x50,
124 0x49, 0x50, 0x6C, 0x61, 0x74, 0x66, 0x6F, 0x72,
125 0x6D, 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E,
126 0x67, 0x3E, 0x0D, 0x09, 0x09, 0x09, 0x3C, 0x6B,
127 0x65, 0x79, 0x3E, 0x49, 0x4F, 0x43, 0x6C, 0x61,
128 0x73, 0x73, 0x3C, 0x2F, 0x6B, 0x65, 0x79, 0x3E,
129 0x0D, 0x09, 0x09, 0x09, 0x3C, 0x73, 0x74, 0x72,
130 0x69, 0x6E, 0x67, 0x3E, 0x41, 0x70, 0x70, 0x6C,
131 0x65, 0x41, 0x43, 0x50, 0x49, 0x43, 0x50, 0x55,
132 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
133 0x3E, 0x0D, 0x09, 0x09, 0x09, 0x3C, 0x6B, 0x65,
134 0x79, 0x3E, 0x49, 0x4F, 0x4E, 0x61, 0x6D, 0x65,
135 0x4D, 0x61, 0x74, 0x63, 0x68, 0x3C, 0x2F, 0x6B,
136 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x09, 0x09, 0x3C,
137 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x70,
138 0x72, 0x6F, 0x63, 0x65, 0x73, 0x73, 0x6F, 0x72,
139 0x3C, 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
140 0x3E, 0x0D, 0x09, 0x09, 0x09, 0x3C, 0x6B, 0x65,
141 0x79, 0x3E, 0x49, 0x4F, 0x50, 0x72, 0x6F, 0x62,
142 0x65, 0x53, 0x63, 0x6F, 0x72, 0x65, 0x3C, 0x2F,
143 0x6B, 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x09, 0x09,
144 0x3C, 0x69, 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72,
145 0x3E, 0x31, 0x31, 0x30, 0x30, 0x3C, 0x2F, 0x69,
146 0x6E, 0x74, 0x65, 0x67, 0x65, 0x72, 0x3E, 0x0D,
147 0x09, 0x09, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E,
148 0x49, 0x4F, 0x50, 0x72, 0x6F, 0x76, 0x69, 0x64,
149 0x65, 0x72, 0x43, 0x6C, 0x61, 0x73, 0x73, 0x3C,
150 0x2F, 0x6B, 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x09,
151 0x09, 0x3C, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
152 0x3E, 0x49, 0x4F, 0x41, 0x43, 0x50, 0x49, 0x50,
153 0x6C, 0x61, 0x74, 0x66, 0x6F, 0x72, 0x6D, 0x44,
154 0x65, 0x76, 0x69, 0x63, 0x65, 0x3C, 0x2F, 0x73,
155 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x0D, 0x09,
156 0x09, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E, 0x4F,
157 0x70, 0x65, 0x6E, 0x43, 0x6F, 0x72, 0x65, 0x3C,
158 0x2F, 0x6B, 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x09,
159 0x09, 0x3C, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67,
160 0x3E, 0x48, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 0x57,
161 0x6F, 0x72, 0x6C, 0x64, 0x21, 0x3C, 0x2F, 0x73,
162 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x0D, 0x09,
163 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x63, 0x74, 0x3E,
164 0x0D, 0x09, 0x3C, 0x2F, 0x64, 0x69, 0x63, 0x74,
165 0x3E, 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E,
166 0x4E, 0x53, 0x48, 0x75, 0x6D, 0x61, 0x6E, 0x52,
167 0x65, 0x61, 0x64, 0x61, 0x62, 0x6C, 0x65, 0x43,
168 0x6F, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74,
169 0x3C, 0x2F, 0x6B, 0x65, 0x79, 0x3E, 0x0D, 0x09,
170 0x3C, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E,
171 0x43, 0x6F, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68,
172 0x74, 0x20, 0xC2, 0xA9, 0x20, 0x32, 0x30, 0x31,
173 0x39, 0x20, 0x76, 0x69, 0x74, 0x39, 0x36, 0x39,
174 0x36, 0x2E, 0x20, 0x41, 0x6C, 0x6C, 0x20, 0x72,
175 0x69, 0x67, 0x68, 0x74, 0x73, 0x20, 0x72, 0x65,
176 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x2E, 0x3C,
177 0x2F, 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E,
178 0x0D, 0x09, 0x3C, 0x6B, 0x65, 0x79, 0x3E, 0x4F,
179 0x53, 0x42, 0x75, 0x6E, 0x64, 0x6C, 0x65, 0x52,
180 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x3C,
181 0x2F, 0x6B, 0x65, 0x79, 0x3E, 0x0D, 0x09, 0x3C,
182 0x73, 0x74, 0x72, 0x69, 0x6E, 0x67, 0x3E, 0x52,
183 0x6F, 0x6F, 0x74, 0x3C, 0x2F, 0x73, 0x74, 0x72,
184 0x69, 0x6E, 0x67, 0x3E, 0x0D, 0x3C, 0x2F, 0x64,
185 0x69, 0x63, 0x74, 0x3E, 0x0D, 0x3C, 0x2F, 0x70,
186 0x6C, 0x69, 0x73, 0x74, 0x3E
187};
188
189STATIC
190CONST UINT8
192 0x31, 0xC0, 0xC3 // xor eax, eax ; ret
193};
194
195STATIC
198 .Base = "__ZN10IOAHCIPort5startEP9IOService",
199 .Find = NULL,
200 .Mask = NULL,
201 .Replace = DisableIOAHCIPatchReplace,
202 .ReplaceMask = NULL,
203 .Size = sizeof (DisableIOAHCIPatchReplace),
204 .Count = 1,
205 .Skip = 0
206};
207
208STATIC
209CONST UINT8
211 0xC3
212};
213
214STATIC
217 .Base = "_IOLog",
218 .Find = NULL,
219 .Mask = NULL,
220 .Replace = DisableKernelLog,
221 .Size = sizeof (DisableKernelLog),
222 .Count = 1,
223 .Skip = 0
224};
225
226STATIC
227VOID
229 IN OUT PRELINKED_CONTEXT *Context
230 )
231{
232 EFI_STATUS Status;
233 PATCHER_CONTEXT Patcher;
234
236 &Patcher,
237 Context,
238 "com.apple.iokit.IOAHCIFamily"
239 );
240 if (!EFI_ERROR (Status)) {
241 Status = PatcherApplyGenericPatch (&Patcher, &DisableIOAHCIPatch);
242 if (EFI_ERROR (Status)) {
243 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply patch com.apple.iokit.IOAHCIFamily - %r\n", Status));
244 FailedToProcess = TRUE;
245 } else {
246 DEBUG ((DEBUG_WARN, "[OK] Patch success com.apple.iokit.IOAHCIFamily\n"));
247 }
248 } else {
249 DEBUG ((DEBUG_WARN, "[FAIL] Failed to find com.apple.iokit.IOAHCIFamily - %r\n", Status));
250 FailedToProcess = TRUE;
251 }
252
254 &Patcher,
255 Context,
256 "com.apple.iokit.IOHIDFamily"
257 );
258 if (!EFI_ERROR (Status)) {
259 Status = PatcherBlockKext (&Patcher);
260 if (EFI_ERROR (Status)) {
261 DEBUG ((DEBUG_WARN, "[FAIL] Failed to block com.apple.iokit.IOHIDFamily - %r\n", Status));
262 FailedToProcess = TRUE;
263 } else {
264 DEBUG ((DEBUG_WARN, "[OK] Block success com.apple.iokit.IOHIDFamily\n"));
265 }
266 } else {
267 DEBUG ((DEBUG_WARN, "[FAIL] Failed to find com.apple.iokit.IOHIDFamily - %r\n", Status));
268 FailedToProcess = TRUE;
269 }
270
272 &Patcher,
273 Context,
274 "com.apple.driver.Intel82574LEthernet"
275 );
276 if (!EFI_ERROR (Status)) {
277 Status = PatcherExcludePrelinkedKext ("com.apple.driver.Intel82574LEthernet", &Patcher, Context);
278 if (EFI_ERROR (Status)) {
279 DEBUG ((DEBUG_WARN, "[FAIL] Failed to exclude com.apple.driver.Intel82574LEthernet - %r\n", Status));
280 FailedToProcess = TRUE;
281 } else {
282 DEBUG ((DEBUG_WARN, "[OK] Exclude success com.apple.driver.Intel82574LEthernet\n"));
283 }
284 } else {
285 DEBUG ((DEBUG_WARN, "[FAIL] Failed to find com.apple.driver.Intel82574LEthernet - %r\n", Status));
286 FailedToProcess = TRUE;
287 }
288
290 if (EFI_ERROR (Status)) {
291 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkAppleCpuPmCfgLock - %r\n", Status));
292 FailedToProcess = TRUE;
293 } else {
294 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkAppleCpuPmCfgLock\n"));
295 }
296
298 if (EFI_ERROR (Status)) {
299 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkCustomSmbiosGuid1 - %r\n", Status));
300 FailedToProcess = TRUE;
301 } else {
302 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkCustomSmbiosGuid1\n"));
303 }
304
306 if (EFI_ERROR (Status)) {
307 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkCustomSmbiosGuid2 - %r\n", Status));
308 FailedToProcess = TRUE;
309 } else {
310 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkCustomSmbiosGuid2\n"));
311 }
312
314 if (EFI_ERROR (Status)) {
315 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkDisableIoMapper - %r\n", Status));
316 FailedToProcess = TRUE;
317 } else {
318 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkDisableIoMapper\n"));
319 }
320
322 if (EFI_ERROR (Status)) {
323 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkDisableIoMapperMapping - %r\n", Status));
324 FailedToProcess = TRUE;
325 } else {
326 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkDisableIoMapperMapping\n"));
327 }
328
330 if (EFI_ERROR (Status)) {
331 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkDisableRtcChecksum - %r\n", Status));
332 FailedToProcess = TRUE;
333 } else {
334 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkDisableRtcChecksum\n"));
335 }
336
338 if (EFI_ERROR (Status)) {
339 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkDummyPowerManagement - %r\n", Status));
340 FailedToProcess = TRUE;
341 } else {
342 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkDummyPowerManagement\n"));
343 }
344
346 if (EFI_ERROR (Status)) {
347 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkExtendBTFeatureFlags - %r\n", Status));
348 FailedToProcess = TRUE;
349 } else {
350 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkExtendBTFeatureFlags\n"));
351 }
352
354 if (EFI_ERROR (Status)) {
355 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkExternalDiskIcons - %r\n", Status));
356 FailedToProcess = TRUE;
357 } else {
358 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkExternalDiskIcons\n"));
359 }
360
362 if (EFI_ERROR (Status)) {
363 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkForceAquantiaEthernet - %r\n", Status));
364 FailedToProcess = TRUE;
365 } else {
366 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkForceAquantiaEthernet\n"));
367 }
368
370 if (EFI_ERROR (Status)) {
371 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkForceSecureBootScheme - %r\n", Status));
372 FailedToProcess = TRUE;
373 } else {
374 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkForceSecureBootScheme\n"));
375 }
376
378 if (EFI_ERROR (Status)) {
379 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkIncreasePciBarSize - %r\n", Status));
380 FailedToProcess = TRUE;
381 } else {
382 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkIncreasePciBarSize\n"));
383 }
384
386 if (EFI_ERROR (Status)) {
387 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkSetApfsTrimTimeout - %r\n", Status));
388 FailedToProcess = TRUE;
389 } else {
390 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkSetApfsTrimTimeout\n"));
391 }
392
394 if (EFI_ERROR (Status)) {
395 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkThirdPartyDrives - %r\n", Status));
396 FailedToProcess = TRUE;
397 } else {
398 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkThirdPartyDrives\n"));
399 }
400
402 if (EFI_ERROR (Status)) {
403 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkXhciPortLimit1 - %r\n", Status));
404 FailedToProcess = TRUE;
405 } else {
406 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkXhciPortLimit1\n"));
407 }
408
410 if (EFI_ERROR (Status)) {
411 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkXhciPortLimit2 - %r\n", Status));
412 FailedToProcess = TRUE;
413 } else {
414 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkXhciPortLimit2\n"));
415 }
416
418 if (EFI_ERROR (Status)) {
419 DEBUG ((DEBUG_WARN, "[FAIL] Failed to apply KernelQuirkXhciPortLimit3 - %r\n", Status));
420 FailedToProcess = TRUE;
421 } else {
422 DEBUG ((DEBUG_WARN, "[OK] Success KernelQuirkXhciPortLimit3\n"));
423 }
424}
425
426VOID
428 IN OUT UINT8 *Kernel,
429 IN UINT32 Size
430 )
431{
432 EFI_STATUS Status;
433 PATCHER_CONTEXT Patcher;
434
436 &Patcher,
437 Kernel,
438 Size,
439 FALSE
440 );
441 if (EFI_ERROR (Status)) {
442 DEBUG ((DEBUG_WARN, "Failed to find kernel - %r\n", Status));
443 FailedToProcess = TRUE;
444 return;
445 }
446
447 Status = PatcherApplyGenericPatch (&Patcher, &DisableIoLogPatch);
448 if (EFI_ERROR (Status)) {
449 DEBUG ((DEBUG_WARN, "[FAIL] DisableIoLogPatch kernel patch - %r\n", Status));
450 FailedToProcess = TRUE;
451 } else {
452 DEBUG ((DEBUG_WARN, "[OK] DisableIoLogPatch kernel patch\n"));
453 }
454
455 UINT32 VirtualCpuid[4] = { 0, 0, 0, 0 };
456 UINT32 VirtualCpuidMask[4] = { 0xFFFFFFFF, 0, 0, 0 };
457 OC_CPU_INFO CpuInfo;
458
459 ZeroMem (&CpuInfo, sizeof (CpuInfo));
460 Status = PatchKernelCpuId (
461 &Patcher,
462 &CpuInfo,
463 VirtualCpuid,
464 VirtualCpuidMask,
466 );
467 if (EFI_ERROR (Status)) {
468 DEBUG ((DEBUG_WARN, "[FAIL] CPUID kernel patch - %r\n", Status));
469 FailedToProcess = TRUE;
470 } else {
471 DEBUG ((DEBUG_WARN, "[OK] CPUID kernel patch\n"));
472 }
473
475 if (EFI_ERROR (Status)) {
476 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkAppleXcpmCfgLock - %r\n", Status));
477 FailedToProcess = TRUE;
478 } else {
479 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkAppleXcpmCfgLock patch\n"));
480 }
481
483 if (EFI_ERROR (Status)) {
484 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkAppleXcpmExtraMsrs - %r\n", Status));
485 FailedToProcess = TRUE;
486 } else {
487 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkAppleXcpmExtraMsrs patch\n"));
488 }
489
491 if (EFI_ERROR (Status)) {
492 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkAppleXcpmForceBoost - %r\n", Status));
493 FailedToProcess = TRUE;
494 } else {
495 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkAppleXcpmForceBoost patch\n"));
496 }
497
498 UINTN RegisterBasePmio = 0x2008;
499 UINT32 RegisterStride = 4;
500
501 PatchSetPciSerialDevice (RegisterBasePmio, RegisterStride);
503 if (EFI_ERROR (Status)) {
504 DEBUG ((DEBUG_WARN, "[FAIL] CustomPciSerialDevice - %r\n", Status));
505 FailedToProcess = TRUE;
506 } else {
507 DEBUG ((DEBUG_WARN, "[OK] CustomPciSerialDevice patch\n"));
508 }
509
511 if (EFI_ERROR (Status)) {
512 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkSegmentJettison - %r\n", Status));
513 FailedToProcess = TRUE;
514 } else {
515 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkSegmentJettison patch\n"));
516 }
517
519 if (EFI_ERROR (Status)) {
520 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkLapicKernelPanic - %r\n", Status));
521 FailedToProcess = TRUE;
522 } else {
523 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkLapicKernelPanic patch\n"));
524 }
525
526 //
527 // This is not for modern systems. Commenting out.
528 //
529 //
530 // Status = KernelApplyQuirk (KernelQuirkLegacyCommpage, &Patcher, KernelVersion);
531 // if (EFI_ERROR (Status)) {
532 // DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkLegacyCommpage - %r\n", Status));
533 // FailedToProcess = TRUE;
534 // } else {
535 // DEBUG ((DEBUG_WARN, "[OK] KernelQuirkLegacyCommpage patch\n"));
536 // }
537
539 if (EFI_ERROR (Status)) {
540 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkPanicNoKextDump - %r\n", Status));
541 FailedToProcess = TRUE;
542 } else {
543 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkPanicNoKextDump patch\n"));
544 }
545
547 if (EFI_ERROR (Status)) {
548 DEBUG ((DEBUG_WARN, "[FAIL] KernelQuirkPowerTimeoutKernelPanic - %r\n", Status));
549 FailedToProcess = TRUE;
550 } else {
551 DEBUG ((DEBUG_WARN, "[OK] KernelQuirkPowerTimeoutKernelPanic patch\n"));
552 }
553}
554
555EFI_STATUS
557 IN EFI_FILE_PROTOCOL *File,
558 IN UINT32 Position,
559 IN UINT32 Size,
560 OUT UINT8 *Buffer
561 )
562{
563 ASSERT (File == &NilFileProtocol);
564
565 if ((UINT64)Position + Size > mPrelinkedSize) {
566 return EFI_INVALID_PARAMETER;
567 }
568
569 CopyMem (&Buffer[0], &mPrelinked[Position], Size);
570 return EFI_SUCCESS;
571}
572
573EFI_STATUS
575 IN EFI_FILE_PROTOCOL *File,
576 OUT UINT32 *Size
577 )
578{
579 ASSERT (File == &NilFileProtocol);
581 return EFI_SUCCESS;
582}
583
584int
586 int argc,
587 char *argv[]
588 )
589{
590 UINT32 AllocSize;
591 PRELINKED_CONTEXT Context;
592
593 PcdGet32 (PcdFixedDebugPrintErrorLevel) |= DEBUG_INFO | DEBUG_VERBOSE;
594 PcdGet32 (PcdDebugPrintErrorLevel) |= DEBUG_INFO | DEBUG_VERBOSE;
595 PcdGet8 (PcdDebugPropertyMask) |= DEBUG_PROPERTY_DEBUG_CODE_ENABLED;
596
597 CONST CHAR8 *FileName;
598
599 FileName = argc > 1 ? argv[1] : "/System/Library/PrelinkedKernels/prelinkedkernel";
600 if ((mPrelinked = UserReadFile (FileName, &mPrelinkedSize)) == NULL) {
601 DEBUG ((DEBUG_ERROR, "Read fail %a\n", FileName));
602 return -1;
603 }
604
605 UINT32 ReservedInfoSize = PRELINK_INFO_RESERVE_SIZE;
606 UINT32 ReservedExeSize = 0;
607
608 for (int argi = 0; argc - argi > 2; argi += 2) {
609 UINT8 *TestData = NULL;
610 UINT32 TestDataSize = 0;
611 CHAR8 *TestPlist = NULL;
612 UINT32 TestPlistSize = 0;
613
614 if (argc - argi > 2) {
615 if ((argv[argi + 2][0] == 'n') && (argv[argi + 2][1] == 0)) {
616 TestData = NULL;
617 TestDataSize = 0;
618 } else {
619 TestData = UserReadFile (argv[argi + 2], &TestDataSize);
620 if (TestData == NULL) {
621 DEBUG ((DEBUG_ERROR, "Read data fail %a\n", argv[argi + 2]));
622 abort ();
623 return -1;
624 }
625 }
626 }
627
628 if (argc - argi > 3) {
629 TestPlist = (CHAR8 *)UserReadFile (argv[argi + 3], &TestPlistSize);
630 if (TestPlist == NULL) {
631 DEBUG ((DEBUG_ERROR, "Read plist fail\n"));
632 FreePool (TestData);
633 abort ();
634 return -1;
635 }
636
637 FreePool (TestPlist);
638 }
639
640 EFI_STATUS Status = PrelinkedReserveKextSize (
641 &ReservedInfoSize,
642 &ReservedExeSize,
643 TestPlistSize,
644 TestData,
645 TestDataSize,
646 FALSE
647 );
648
649 FreePool (TestData);
650
651 if (EFI_ERROR (Status)) {
652 DEBUG ((
653 DEBUG_ERROR,
654 "OC: Failed to fit kext %a\n",
655 argv[argi + 2]
656 ));
657 FailedToProcess = TRUE;
658 }
659 }
660
661 UINT32 LinkedExpansion = KcGetSegmentFixupChainsSize (ReservedExeSize);
662
663 if (LinkedExpansion == 0) {
664 FailedToProcess = TRUE;
665 return -1;
666 }
667
668 UINT8 *NewPrelinked;
669 UINT32 NewPrelinkedSize;
670 UINT8 Sha384[48];
671 BOOLEAN Is32Bit;
672 EFI_STATUS Status = ReadAppleKernel (
674 FALSE,
675 &Is32Bit,
676 &NewPrelinked,
677 &NewPrelinkedSize,
678 &AllocSize,
679 ReservedInfoSize + ReservedExeSize + LinkedExpansion,
680 Sha384
681 );
682
683 if (!EFI_ERROR (Status)) {
684 FreePool (mPrelinked);
685 mPrelinked = NewPrelinked;
686 mPrelinkedSize = NewPrelinkedSize;
687 DEBUG ((DEBUG_WARN, "[OK] Sha384 is %02X%02X%02X%02X\n", Sha384[0], Sha384[1], Sha384[2], Sha384[3]));
688 } else {
689 DEBUG ((DEBUG_WARN, "[FAIL] Kernel unpack failure - %r\n", Status));
690 FailedToProcess = TRUE;
691 return -1;
692 }
693
695 if (KernelVersion != 0) {
696 DEBUG ((DEBUG_WARN, "[OK] Got version %u\n", KernelVersion));
697 } else {
698 DEBUG ((DEBUG_WARN, "[FAIL] Failed to detect version\n"));
699 FailedToProcess = TRUE;
700 }
701
703
704 PATCHER_CONTEXT Patcher;
705
707 &Patcher,
710 FALSE
711 );
712 if (!EFI_ERROR (Status)) {
713 DEBUG ((DEBUG_WARN, "[OK] Patcher init success\n"));
714 } else {
715 DEBUG ((DEBUG_WARN, "[FAIL] Patcher init failure - %r\n", Status));
716 FailedToProcess = TRUE;
717 }
718
719 Status = PrelinkedContextInit (&Context, mPrelinked, mPrelinkedSize, AllocSize, FALSE);
720 if (!EFI_ERROR (Status)) {
721 ApplyKextPatches (&Context);
722
723 Status = PrelinkedInjectPrepare (&Context, LinkedExpansion, ReservedExeSize);
724 if (EFI_ERROR (Status)) {
725 DEBUG ((DEBUG_WARN, "[FAIL] Prelink inject prepare error %r\n", Status));
726 FailedToProcess = TRUE;
727 return -1;
728 }
729
730 CHAR8 BundleVersion[MAX_INFO_BUNDLE_VERSION_KEY_SIZE];
731 //
732 // Assume no bundle version from the beginning.
733 // 'v' will be printed in the message, and hence is omitted here.
734 //
735 AsciiStrCpyS (BundleVersion, MAX_INFO_BUNDLE_VERSION_KEY_SIZE, "ersion unavailable");
736 Status = PrelinkedInjectKext (
737 &Context,
738 NULL,
739 "/Library/Extensions/PlistKext.kext",
741 sizeof (KextInfoPlistData),
742 NULL,
743 NULL,
744 0,
745 BundleVersion
746 );
747 if (!EFI_ERROR (Status)) {
748 DEBUG ((
749 DEBUG_WARN,
750 "[OK] PlistKext.kext injected - %r (v%a)\n",
751 Status,
752 BundleVersion
753 ));
754 } else {
755 DEBUG ((DEBUG_WARN, "[FAIL] PlistKext.kext injected - %r\n", Status));
756 FailedToProcess = TRUE;
757 }
758
759 int c = 0;
760 while (argc > 2) {
761 UINT8 *TestData = NULL;
762 UINT32 TestDataSize = 0;
763 CHAR8 *TestPlist = NULL;
764 UINT32 TestPlistSize = 0;
765
766 if (argc > 2) {
767 if ((argv[2][0] == 'n') && (argv[2][1] == 0)) {
768 TestData = NULL;
769 TestDataSize = 0;
770 } else {
771 TestData = UserReadFile (argv[2], &TestDataSize);
772 if (TestData == NULL) {
773 DEBUG ((DEBUG_ERROR, "Read data fail %a\n", argv[2]));
774 abort ();
775 return -1;
776 }
777 }
778 }
779
780 if (argc > 3) {
781 TestPlist = (CHAR8 *)UserReadFile (argv[3], &TestPlistSize);
782 if (TestPlist == NULL) {
783 DEBUG ((DEBUG_ERROR, "Read plist fail\n"));
784 abort ();
785 return -1;
786 }
787 }
788
789 char KextPath[64];
790 snprintf (KextPath, sizeof (KextPath), "/Library/Extensions/Kex%d.kext", c);
791
792 CHAR8 BundleVersion[MAX_INFO_BUNDLE_VERSION_KEY_SIZE];
793 //
794 // Assume no bundle version from the beginning.
795 // 'v' will be printed in the message, and hence is omitted here.
796 //
797 AsciiStrCpyS (BundleVersion, MAX_INFO_BUNDLE_VERSION_KEY_SIZE, "ersion unavailable");
798 Status = PrelinkedInjectKext (
799 &Context,
800 NULL,
801 KextPath,
802 TestPlist,
803 TestPlistSize,
804 "Contents/MacOS/Kext",
805 TestData,
806 TestDataSize,
807 BundleVersion
808 );
809
810 if (!EFI_ERROR (Status)) {
811 DEBUG ((
812 DEBUG_WARN,
813 "[OK] %a injected - %r (v%a)\n",
814 argv[2],
815 Status,
816 BundleVersion
817 ));
818 } else {
819 DEBUG ((DEBUG_WARN, "[FAIL] %a injected - %r\n", argv[2], Status));
820 FailedToProcess = TRUE;
821 }
822
823 if (argc > 2) {
824 free (TestData);
825 }
826
827 if (argc > 3) {
828 free (TestPlist);
829 }
830
831 argc -= 2;
832 argv += 2;
833 c++;
834 }
835
836 ASSERT (Context.PrelinkedSize - Context.KextsFileOffset <= ReservedExeSize);
837
838 Status = PrelinkedInjectComplete (&Context);
839 UserWriteFile ("out.bin", mPrelinked, Context.PrelinkedSize);
840 if (!EFI_ERROR (Status)) {
841 DEBUG ((DEBUG_WARN, "[OK] Prelink inject complete success\n"));
842 } else {
843 DEBUG ((DEBUG_WARN, "[FAIL] Prelink inject complete error %r\n", Status));
844 FailedToProcess = TRUE;
845 }
846
847 PrelinkedContextFree (&Context);
848 } else {
849 DEBUG ((DEBUG_WARN, "[FAIL] Context creation error %r\n", Status));
850 FailedToProcess = TRUE;
851 }
852
853 FreePool (mPrelinked);
854
855 return 0;
856}
857
858int
860 const uint8_t *Data,
861 size_t Size
862 )
863{
864 UINT32 PrelinkedSize;
865 UINT32 AllocSize;
866 UINT8 *Prelinked;
867 PRELINKED_CONTEXT Context;
868 EFI_STATUS Status;
869
870 if (Size == 0) {
871 return 0;
872 }
873
874 if ((Prelinked = UserReadFile ("prelinkedkernel.unpack", &PrelinkedSize)) == NULL) {
875 DEBUG ((DEBUG_ERROR, "Read fail\n"));
876 return 0;
877 }
878
879 AllocSize = MACHO_ALIGN (PrelinkedSize + 64*1024*1024);
880 Prelinked = ReallocatePool (PrelinkedSize, AllocSize, Prelinked);
881 if (Prelinked == NULL) {
882 return 0;
883 }
884
885 Status = PrelinkedContextInit (&Context, Prelinked, PrelinkedSize, AllocSize, FALSE);
886 if (EFI_ERROR (Status)) {
887 FreePool (Prelinked);
888 return 0;
889 }
890
891 Status = PrelinkedInjectPrepare (&Context, BASE_2MB, BASE_2MB);
892 if (EFI_ERROR (Status)) {
893 DEBUG ((DEBUG_WARN, "Prelink inject prepare error %r\n", Status));
894 PrelinkedContextFree (&Context);
895 FreePool (Prelinked);
896 return 0;
897 }
898
899 Status = PrelinkedInjectKext (
900 &Context,
901 NULL,
902 "/Library/Extensions/Lilu.kext",
904 sizeof (KextInfoPlistData),
905 "Contents/MacOS/Lilu",
906 Data,
907 Size,
908 NULL
909 );
910
911 PrelinkedInjectComplete (&Context);
912 PrelinkedContextFree (&Context);
913 FreePool (Prelinked);
914
915 return 0;
916}
917
918int
920 int argc,
921 char *argv[]
922 )
923{
924 int code;
925
926 code = WrapMain (argc, argv);
927 if (FailedToProcess) {
928 code = -1;
929 }
930
931 return code;
932}
VOID ApplyKernelPatches(IN OUT UINT8 *Kernel, IN UINT32 Size)
Definition KextInject.c:427
STATIC CONST CHAR8 KextInfoPlistData[]
Definition KextInject.c:37
STATIC PATCHER_GENERIC_PATCH DisableIOAHCIPatch
Definition KextInject.c:197
int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
Definition KextInject.c:859
EFI_STATUS OcGetFileSize(IN EFI_FILE_PROTOCOL *File, OUT UINT32 *Size)
Definition KextInject.c:574
STATIC PATCHER_GENERIC_PATCH DisableIoLogPatch
Definition KextInject.c:216
STATIC UINT32 KernelVersion
Definition KextInject.c:28
STATIC EFI_FILE_PROTOCOL NilFileProtocol
Definition KextInject.c:30
STATIC UINT32 mPrelinkedSize
Definition KextInject.c:33
int WrapMain(int argc, char *argv[])
Definition KextInject.c:585
STATIC UINT8 * mPrelinked
Definition KextInject.c:32
EFI_STATUS OcGetFileData(IN EFI_FILE_PROTOCOL *File, IN UINT32 Position, IN UINT32 Size, OUT UINT8 *Buffer)
Definition KextInject.c:556
STATIC VOID ApplyKextPatches(IN OUT PRELINKED_CONTEXT *Context)
Definition KextInject.c:228
STATIC BOOLEAN FailedToProcess
Definition KextInject.c:27
STATIC CONST UINT8 DisableKernelLog[]
Definition KextInject.c:210
STATIC CONST UINT8 DisableIOAHCIPatchReplace[]
Definition KextInject.c:191
DMG_SIZE_DEVICE_PATH Size
EFI_STATUS ReadAppleKernel(IN EFI_FILE_PROTOCOL *File, IN BOOLEAN Prefer32Bit, OUT BOOLEAN *Is32Bit, OUT UINT8 **Kernel, OUT UINT32 *KernelSize, OUT UINT32 *AllocatedSize, IN UINT32 ReservedSize, OUT UINT8 *Digest OPTIONAL)
EFI_STATUS PatcherBlockKext(IN OUT PATCHER_CONTEXT *Context)
VOID PrelinkedContextFree(IN OUT PRELINKED_CONTEXT *Context)
EFI_STATUS PatcherExcludePrelinkedKext(IN CONST CHAR8 *Identifier, IN OUT PATCHER_CONTEXT *PatcherContext, IN OUT PRELINKED_CONTEXT *PrelinkedContext)
EFI_STATUS PrelinkedContextInit(IN OUT PRELINKED_CONTEXT *Context, IN OUT UINT8 *Prelinked, IN UINT32 PrelinkedSize, IN UINT32 PrelinkedAllocSize, IN BOOLEAN Is32Bit)
EFI_STATUS KernelApplyQuirk(IN KERNEL_QUIRK_NAME Name, IN OUT PATCHER_CONTEXT *Patcher OPTIONAL, IN UINT32 KernelVersion)
EFI_STATUS PrelinkedInjectPrepare(IN OUT PRELINKED_CONTEXT *Context, IN UINT32 LinkedExpansion, IN UINT32 ReservedExeSize)
VOID PatchSetPciSerialDevice(IN UINTN RegisterBase, IN UINT32 RegisterStride)
#define PRELINK_INFO_RESERVE_SIZE
#define MAX_INFO_BUNDLE_VERSION_KEY_SIZE
EFI_STATUS PrelinkedContextApplyQuirk(IN OUT PRELINKED_CONTEXT *Context, IN KERNEL_QUIRK_NAME Quirk, IN UINT32 KernelVersion)
EFI_STATUS PrelinkedReserveKextSize(IN OUT UINT32 *ReservedInfoSize, IN OUT UINT32 *ReservedExeSize, IN UINT32 InfoPlistSize, IN UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, IN BOOLEAN Is32Bit)
EFI_STATUS PrelinkedInjectKext(IN OUT PRELINKED_CONTEXT *Context, IN CONST CHAR8 *Identifier OPTIONAL, IN CONST CHAR8 *BundlePath, IN CONST CHAR8 *InfoPlist, IN UINT32 InfoPlistSize, IN CONST CHAR8 *ExecutablePath OPTIONAL, IN OUT CONST UINT8 *Executable OPTIONAL, IN UINT32 ExecutableSize OPTIONAL, OUT CHAR8 BundleVersion[MAX_INFO_BUNDLE_VERSION_KEY_SIZE] OPTIONAL)
EFI_STATUS PatcherApplyGenericPatch(IN OUT PATCHER_CONTEXT *Context, IN PATCHER_GENERIC_PATCH *Patch)
UINT32 OcKernelReadDarwinVersion(IN CONST UINT8 *Kernel, IN UINT32 KernelSize)
@ KernelQuirkDisableRtcChecksum
@ KernelQuirkPanicNoKextDump
@ KernelQuirkCustomSmbiosGuid1
@ KernelQuirkForceSecureBootScheme
@ KernelQuirkPowerTimeoutKernelPanic
@ KernelQuirkLapicKernelPanic
@ KernelQuirkCustomSmbiosGuid2
@ KernelQuirkAppleCpuPmCfgLock
@ KernelQuirkAppleXcpmExtraMsrs
@ KernelQuirkAppleXcpmForceBoost
@ KernelQuirkXhciPortLimit2
@ KernelQuirkSetApfsTrimTimeout
@ KernelQuirkThirdPartyDrives
@ KernelQuirkDisableIoMapperMapping
@ KernelQuirkAppleXcpmCfgLock
@ KernelQuirkDummyPowerManagement
@ KernelQuirkDisableIoMapper
@ KernelQuirkExternalDiskIcons
@ KernelQuirkXhciPortLimit1
@ KernelQuirkExtendBTFeatureFlags
@ KernelQuirkForceAquantiaEthernet
@ KernelQuirkXhciPortLimit3
@ KernelQuirkSegmentJettison
@ KernelQuirkIncreasePciBarSize
@ KernelQuirkCustomPciSerialDevice
EFI_STATUS PatcherInitContextFromBuffer(IN OUT PATCHER_CONTEXT *Context, IN OUT UINT8 *Buffer, IN UINT32 BufferSize, IN BOOLEAN Use32Bit)
EFI_STATUS PatcherInitContextFromPrelinked(IN OUT PATCHER_CONTEXT *Context, IN OUT PRELINKED_CONTEXT *Prelinked, IN CONST CHAR8 *Name)
Definition KextPatcher.c:99
EFI_STATUS PrelinkedInjectComplete(IN OUT PRELINKED_CONTEXT *Context)
UINT32 KcGetSegmentFixupChainsSize(IN UINT32 SegmentSize)
EFI_STATUS PatchKernelCpuId(IN OUT PATCHER_CONTEXT *Patcher, IN OC_CPU_INFO *CpuInfo, IN UINT32 *Data, IN UINT32 *DataMask, IN UINT32 KernelVersion)
VOID Sha384(UINT8 *Hash, CONST UINT8 *Data, UINTN Len)
#define MACHO_ALIGN(x)
Definition OcMachoLib.h:28
OC_TYPING_BUFFER_ENTRY Buffer[OC_TYPING_BUFFER_SIZE]
Definition OcTypingLib.h:42
#define snprintf
Definition Ubsan.h:205
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
UINT8 * UserReadFile(IN CONST CHAR8 *FileName, OUT UINT32 *Size)
Definition UserFile.c:62
VOID UserWriteFile(IN CONST CHAR8 *FileName, IN CONST VOID *Data, IN UINT32 Size)
Definition UserFile.c:116
#define ASSERT(x)
Definition coder.h:55
UINT8 uint8_t
#define free(Ptr)
Definition lzss.h:50
int ENTRY_POINT(void)