OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
OcAppleSecureBootLib.c
Go to the documentation of this file.
1
15#include <Uefi.h>
16
17#include <Guid/AppleVariable.h>
18
21#include <Protocol/SimpleFileSystem.h>
22
23#include <Library/BaseLib.h>
24#include <Library/BaseMemoryLib.h>
25#include <Library/BaseOverflowLib.h>
26#include <Library/DebugLib.h>
27#include <Library/MemoryAllocationLib.h>
29#include <Library/OcFileLib.h>
30#include <Library/OcMiscLib.h>
31#include <Library/OcStringLib.h>
32#include <Library/PrintLib.h>
33#include <Library/UefiBootServicesTableLib.h>
34#include <Library/UefiRuntimeServicesTableLib.h>
35
37STATIC CHAR8 mSbHardwareModel[16];
38STATIC UINT64 mSbEcid;
39STATIC BOOLEAN mDmgLoading = FALSE;
41STATIC BOOLEAN mSbAvailable = TRUE;
43STATIC UINT8 mSbWindowsPolicy = 1;
44STATIC BOOLEAN mSbWindowsPolicyValid = TRUE;
45
46STATIC
47UINT8
50 IN UINT8 SbPolicy,
51 IN EFI_STATUS Status
52 )
53{
54 UINT8 Reason;
55
56 ASSERT (This != NULL);
57
58 switch (Status) {
59 case EFI_SUCCESS:
60 case EFI_UNSUPPORTED:
61 {
62 Reason = 0x00;
63 break;
64 }
65
66 case EFI_NOT_FOUND:
67 {
68 Reason = (((SbPolicy == AppleImg4SbModeFull) ? 1U : 0U) << 4U) | 1U;
69 break;
70 }
71
72 case EFI_SECURITY_VIOLATION:
73 {
74 Reason = (((SbPolicy == AppleImg4SbModeFull) ? 1U : 0U) << 4U) | 2U;
75 break;
76 }
77
78 default:
79 {
80 Reason = 0xFF;
81 break;
82 }
83 }
84
85 return Reason;
86}
87
88EFI_STATUS
90 IN CONST CHAR8 *Model,
91 IN UINT64 Ecid OPTIONAL
92 )
93{
94 EFI_STATUS Status;
95 CHAR8 BridgeModel[16];
96 UINTN BridgeModelSize;
97
98 ASSERT (Model != NULL);
99
100 Status = OcAsciiSafeSPrint (
102 sizeof (mSbHardwareModel),
103 "%aap",
104 Model
105 );
106
107 if (EFI_ERROR (Status)) {
108 return Status;
109 }
110
111 for (BridgeModelSize = 0; mSbHardwareModel[BridgeModelSize] != '\0'; ++BridgeModelSize) {
112 BridgeModel[BridgeModelSize] = AsciiCharToUpper (mSbHardwareModel[BridgeModelSize]);
113 }
114
115 BridgeModel[BridgeModelSize] = '\0';
116
117 Status = gRT->SetVariable (
120 EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
121 BridgeModelSize,
122 BridgeModel
123 );
124
125 if (EFI_ERROR (Status)) {
126 return Status;
127 }
128
129 Status = gRT->SetVariable (
130 L"HardwareModel",
132 EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
133 AsciiStrSize (mSbHardwareModel),
135 );
136
137 mSbEcid = Ecid;
138
139 return Status;
140}
141
149STATIC
150VOID
151EFIAPI
154 IN BOOLEAN Available
155 )
156{
157 mSbAvailable = Available;
158}
159
171STATIC
172EFI_STATUS
173EFIAPI
176 OUT UINT8 *Policy
177 )
178{
179 if (Policy == NULL) {
180 return EFI_INVALID_PARAMETER;
181 }
182
183 if (!mSbAvailable) {
184 *Policy = 0;
185 return EFI_SUCCESS;
186 }
187
189 return EFI_NOT_FOUND;
190 }
191
192 *Policy = mSbWindowsPolicy;
193 return EFI_SUCCESS;
194}
195
206STATIC
207EFI_STATUS
208EFIAPI
211 OUT UINT8 *Reason
212 )
213{
214 UINTN DataSize;
215 UINT8 FailReason;
216
217 if (Reason == NULL) {
218 return EFI_INVALID_PARAMETER;
219 }
220
221 FailReason = 0;
222
223 DataSize = sizeof (FailReason);
224 gRT->GetVariable (
225 L"AppleSecureBootWindowsFailureReason",
227 NULL,
228 &DataSize,
229 &FailReason
230 );
231
232 *Reason = FailReason;
233 return EFI_SUCCESS;
234}
235
246STATIC
247EFI_STATUS
248EFIAPI
251 IN UINT8 Reason
252 )
253{
254 if (!mSbAvailable) {
255 return EFI_UNSUPPORTED;
256 }
257
258 return gRT->SetVariable (
259 L"AppleSecureBootWindowsFailureReason",
261 EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
262 sizeof (Reason),
263 &Reason
264 );
265}
266
267STATIC
268VOID *
270 IN EFI_FILE_PROTOCOL *Volume,
271 IN CHAR16 *FilePath,
272 OUT UINT32 *FileSize
273 )
274{
275 EFI_STATUS Status;
276
277 EFI_FILE_PROTOCOL *FileHandle;
278 UINT8 *FileBuffer;
279 UINT32 FileReadSize;
280
281 ASSERT (Volume != NULL);
282 ASSERT (FilePath != NULL);
283 ASSERT (FileSize != NULL);
284
285 Status = OcSafeFileOpen (Volume, &FileHandle, FilePath, EFI_FILE_MODE_READ, 0);
286 if (EFI_ERROR (Status)) {
287 return NULL;
288 }
289
290 Status = OcGetFileSize (FileHandle, &FileReadSize);
291 if (EFI_ERROR (Status)) {
292 FileHandle->Close (FileHandle);
293 return NULL;
294 }
295
296 FileBuffer = AllocatePool (FileReadSize);
297 if (FileBuffer == NULL) {
298 FileHandle->Close (FileHandle);
299 return NULL;
300 }
301
302 Status = OcGetFileData (
303 FileHandle,
304 0,
305 FileReadSize,
306 FileBuffer
307 );
308
309 FileHandle->Close (FileHandle);
310
311 if (EFI_ERROR (Status)) {
312 FreePool (FileBuffer);
313 return NULL;
314 }
315
316 *FileSize = FileReadSize;
317 return FileBuffer;
318}
319
330STATIC
331EFI_STATUS
332EFIAPI
335 OUT UINT8 *Reason
336 )
337{
338 UINTN DataSize;
339 UINT8 FailReason;
340
341 if (Reason == NULL) {
342 return EFI_INVALID_PARAMETER;
343 }
344
345 FailReason = 0;
346
347 DataSize = sizeof (FailReason);
348 gRT->GetVariable (
349 L"AppleSecureBootFailureReason",
351 NULL,
352 &DataSize,
353 &FailReason
354 );
355
356 *Reason = FailReason;
357 return EFI_SUCCESS;
358}
359
370STATIC
371EFI_STATUS
372EFIAPI
375 IN UINT8 Reason
376 )
377{
378 if (!mSbAvailable) {
379 return EFI_UNSUPPORTED;
380 }
381
382 return gRT->SetVariable (
383 L"AppleSecureBootFailureReason",
385 EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
386 sizeof (Reason),
387 &Reason
388 );
389}
390
401STATIC
402EFI_STATUS
403EFIAPI
406 OUT UINT8 *Reason
407 )
408{
409 UINTN DataSize;
410 UINT8 FailReason;
411
412 if (Reason == NULL) {
413 return EFI_INVALID_PARAMETER;
414 }
415
416 FailReason = 0;
417
418 DataSize = sizeof (FailReason);
419 gRT->GetVariable (
420 L"AppleSecureBootKernelFailureReason",
422 NULL,
423 &DataSize,
424 &FailReason
425 );
426
427 *Reason = FailReason;
428 return EFI_SUCCESS;
429}
430
441STATIC
442EFI_STATUS
443EFIAPI
446 IN UINT8 Reason
447 )
448{
449 if (!mSbAvailable) {
450 return EFI_UNSUPPORTED;
451 }
452
453 return gRT->SetVariable (
454 L"AppleSecureBootKernelFailureReason",
456 EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
457 sizeof (Reason),
458 &Reason
459 );
460}
461
473STATIC
474EFI_STATUS
475EFIAPI
478 OUT UINT8 *Policy
479 )
480{
481 if (Policy == NULL) {
482 return EFI_INVALID_PARAMETER;
483 }
484
485 if (!mSbAvailable) {
486 *Policy = AppleImg4SbModeDisabled;
487 return EFI_SUCCESS;
488 }
489
490 *Policy = mSbPolicy;
491 return EFI_SUCCESS;
492}
493
494STATIC
495EFI_STATUS
498 IN CONST VOID *ImageBuffer,
499 IN UINTN ImageSize,
500 IN CONST VOID *ManifestBuffer,
501 IN UINTN ManifestSize,
502 IN UINT32 ObjType,
503 IN BOOLEAN SetFailureReason,
504 IN UINT8 SbPolicy
505 )
506{
507 STATIC APPLE_IMG4_VERIFICATION_PROTOCOL *Img4Verify = NULL;
508
509 EFI_STATUS Status;
510
511 ASSERT (ImageBuffer != NULL);
512 ASSERT (ImageSize != 0);
513 ASSERT (ManifestBuffer != NULL);
514 ASSERT (ManifestSize > 0);
515
516 if (Img4Verify == NULL) {
517 Status = gBS->LocateProtocol (
519 NULL,
520 (VOID **)&Img4Verify
521 );
522 if (EFI_ERROR (Status)) {
523 return EFI_UNSUPPORTED;
524 }
525 }
526
527 //
528 // Apple Secure Boot Policy matches SB Mode so far.
529 //
530 if ((SbPolicy != AppleImg4SbModeMedium) && (SbPolicy != AppleImg4SbModeFull)) {
531 return EFI_LOAD_ERROR;
532 }
533
534 Status = Img4Verify->Verify (
535 Img4Verify,
536 ObjType,
537 ImageBuffer,
538 ImageSize,
539 SbPolicy,
540 ManifestBuffer,
541 ManifestSize,
542 NULL,
543 NULL
544 );
545 if (EFI_ERROR (Status)) {
546 return EFI_SECURITY_VIOLATION;
547 }
548
549 return EFI_SUCCESS;
550}
551
552STATIC
553EFI_STATUS
554EFIAPI
557 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
558 IN UINT8 SbPolicy,
559 OUT VOID **ManifestBufferPtr,
560 OUT UINTN *ManifestSizePtr
561 )
562{
563 EFI_STATUS Status;
564 BOOLEAN Result;
565
566 UINTN ImagePathSize;
567 UINTN ManifestPathSize;
568 CHAR16 *Path;
569 CHAR16 *ManifestSuffix;
570
571 EFI_HANDLE Device;
572 EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem;
573 EFI_FILE_PROTOCOL *Root;
574
575 VOID *ManifestBuffer;
576 UINT32 ManifestSize;
577
578 UINT64 Ecid;
579
580 STATIC CONST UINTN ManifestSuffixMaxSize =
581 (((ARRAY_SIZE (mSbHardwareModel) - 1 + (2 * sizeof (Ecid))) * sizeof (CHAR16))
582 + L_STR_SIZE_NT (L"...im4m"));
583
584 Status = gBS->LocateDevicePath (
586 &DevicePath,
587 &Device
588 );
589 if (EFI_ERROR (Status)) {
590 return EFI_NO_MEDIA;
591 }
592
593 ImagePathSize = OcFileDevicePathFullNameSize (DevicePath);
594 if (ImagePathSize == 0) {
595 return EFI_NO_MEDIA;
596 }
597
598 Result = BaseOverflowAddUN (
599 ImagePathSize,
600 ManifestSuffixMaxSize,
601 &ManifestPathSize
602 );
603 if (Result) {
604 return EFI_NOT_FOUND;
605 }
606
607 Path = AllocatePool (ManifestPathSize);
608 if (Path == NULL) {
609 return EFI_OUT_OF_RESOURCES;
610 }
611
612 Status = gBS->HandleProtocol (
613 Device,
615 (VOID **)&FileSystem
616 );
617 if (EFI_ERROR (Status)) {
618 FreePool (Path);
619 return EFI_NO_MEDIA;
620 }
621
622 Status = FileSystem->OpenVolume (FileSystem, &Root);
623 if (EFI_ERROR (Status)) {
624 FreePool (Path);
625 return EFI_NO_MEDIA;
626 }
627
629 Path,
630 (FILEPATH_DEVICE_PATH *)DevicePath,
631 ImagePathSize
632 );
633
634 Result = mSbHardwareModel[0] != '\0';
635 if (Result) {
636 ManifestSuffix = &Path[(ImagePathSize / sizeof (*Path)) - 1];
637 if (SbPolicy == AppleImg4SbModeMedium) {
638 UnicodeSPrint (
639 ManifestSuffix,
640 ManifestSuffixMaxSize,
641 L".%a.im4m",
643 );
644 } else if (SbPolicy == AppleImg4SbModeFull) {
645 UnicodeSPrint (
646 ManifestSuffix,
647 ManifestSuffixMaxSize,
648 L".%a.%LX.im4m",
650 mSbEcid
651 );
652 } else {
653 Result = FALSE;
654 }
655 }
656
657 if (!Result) {
658 FreePool (Path);
659 Root->Close (Root);
660 return EFI_LOAD_ERROR;
661 }
662
663 ManifestBuffer = InternalReadFile (Root, Path, &ManifestSize);
664
665 FreePool (Path);
666 Root->Close (Root);
667
668 if (ManifestBuffer == NULL) {
669 return EFI_NOT_FOUND;
670 }
671
672 *ManifestBufferPtr = ManifestBuffer;
673 *ManifestSizePtr = ManifestSize;
674
675 return EFI_SUCCESS;
676}
677
698STATIC
699EFI_STATUS
700EFIAPI
703 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
704 IN UINT32 ObjType,
705 IN BOOLEAN SetFailureReason
706 )
707{
708 //
709 // This interface is vulnerable. Just bail and error.
710 //
711 DEBUG ((DEBUG_ERROR, "OCSB: Attempted to call VerifyImg4ByPath\n"));
712 CpuDeadLoop ();
713 return EFI_SECURITY_VIOLATION;
714}
715
736STATIC
737EFI_STATUS
738EFIAPI
741 IN CONST VOID *ImageBuffer,
742 IN UINTN ImageSize,
743 IN CONST VOID *ManifestBuffer,
744 IN UINTN ManifestSize,
745 IN UINT32 ObjType,
746 IN BOOLEAN SetFailureReason
747 )
748{
749 EFI_STATUS Status;
750 UINT8 SbPolicy;
751 UINT8 Reason;
752
753 if (!mSbAvailable) {
754 return EFI_UNSUPPORTED;
755 }
756
757 AppleSbGetPolicy (This, &SbPolicy);
758 if (SbPolicy == 0) {
759 Status = EFI_UNSUPPORTED;
760 } else if ((ImageBuffer == NULL) || (ImageSize == 0)) {
761 Status = EFI_INVALID_PARAMETER;
762 } else if ((ManifestBuffer == NULL) || (ManifestSize == 0)) {
763 Status = EFI_NOT_FOUND;
764 } else {
765 Status = InternalVerifyImg4Worker (
766 This,
767 ImageBuffer,
768 ImageSize,
769 ManifestBuffer,
770 ManifestSize,
771 ObjType,
772 SetFailureReason,
773 SbPolicy
774 );
775 }
776
777 if (SetFailureReason) {
778 Reason = InternalImg4GetFailureReason (This, SbPolicy, Status);
779 if ( (ObjType == APPLE_SB_OBJ_KERNEL)
780 || (ObjType == APPLE_SB_OBJ_KERNEL_DEBUG))
781 {
782 AppleSbSetKernelFailureReason (This, Reason);
783 } else {
784 AppleSbSetFailureReason (This, Reason);
785 }
786 }
787
788 return Status;
789}
790
810STATIC
811EFI_STATUS
812EFIAPI
815 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
816 IN BOOLEAN SetFailureReason
817 )
818{
819 //
820 // This interface is vulnerable. Just bail and error.
821 //
822 DEBUG ((DEBUG_ERROR, "OCSB: Attempted to call VerifyWindowsByPath\n"));
823 CpuDeadLoop ();
824 return EFI_SECURITY_VIOLATION;
825}
826
844STATIC
845EFI_STATUS
846EFIAPI
849 IN CONST VOID *TargetBuffer,
850 IN UINTN TargetSize,
851 IN BOOLEAN SetFailureReason
852 )
853{
854 EFI_STATUS Status;
855 UINT8 WinPolicy;
856 UINT8 Reason;
857
858 if (!mSbAvailable) {
859 return EFI_UNSUPPORTED;
860 }
861
862 Reason = 0x00;
863
864 if ((TargetBuffer == NULL) || (TargetSize == 0)) {
865 Status = EFI_INVALID_PARAMETER;
866 Reason = 0xFF;
867 } else {
868 Status = EFI_UNSUPPORTED;
869
870 AppleSbGetWindowsPolicy (This, &WinPolicy);
871 if (WinPolicy == 1) {
872 //
873 // We rely on UEFI Secure Boot to perform the verification.
874 //
875 Status = EFI_SUCCESS;
876 } else if (WinPolicy != 0) {
877 Status = EFI_LOAD_ERROR;
878 Reason = 0xFF;
879 }
880 }
881
882 if (SetFailureReason) {
883 AppleSbSetWindowsFailureReason (This, Reason);
884 }
885
886 return Status;
887}
888
891 IN BOOLEAN Reinstall,
892 IN UINT8 SbPolicy,
893 IN UINT8 SbWinPolicy OPTIONAL,
894 IN BOOLEAN SbWinPolicyValid
895 )
896{
897 STATIC APPLE_SECURE_BOOT_PROTOCOL SecureBoot = {
912 };
913
914 EFI_STATUS Status;
916 EFI_HANDLE Handle;
917 UINTN DataSize;
918
919 if (Reinstall) {
921 if (EFI_ERROR (Status)) {
922 DEBUG ((DEBUG_ERROR, "OCSB: Uninstall failed - %r\n", Status));
923 return NULL;
924 }
925 } else {
926 Status = gBS->LocateProtocol (
928 NULL,
929 (VOID **)&Protocol
930 );
931 if (!EFI_ERROR (Status)) {
932 mSecureBoot = Protocol;
933 return Protocol;
934 }
935 }
936
937 Handle = NULL;
938 Status = gBS->InstallMultipleProtocolInterfaces (
939 &Handle,
941 (VOID **)&SecureBoot,
942 NULL
943 );
944 if (EFI_ERROR (Status)) {
945 return NULL;
946 }
947
948 mSecureBoot = &SecureBoot;
949 mSbPolicy = SbPolicy;
950 mSbWindowsPolicy = SbWinPolicy;
951 mSbWindowsPolicyValid = SbWinPolicyValid;
952
953 DataSize = sizeof (SbPolicy);
954 gRT->SetVariable (
955 L"AppleSecureBootPolicy",
957 EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
958 DataSize,
959 &SbPolicy
960 );
961 if (SbWinPolicyValid) {
962 DataSize = sizeof (SbWinPolicy);
963 gRT->SetVariable (
964 L"AppleSecureBootWindowsPolicy",
966 EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
967 DataSize,
968 &SbWinPolicy
969 );
970 }
971
972 return &SecureBoot;
973}
974
977 VOID
978 )
979{
980 ASSERT (mSecureBoot != NULL);
981 return mSecureBoot;
982}
983
984VOID
986 IN BOOLEAN LoadingDmg
987 )
988{
989 EFI_STATUS Status;
990
991 ASSERT (mSecureBoot != NULL);
992
993 mDmgLoading = LoadingDmg;
994
996 if (EFI_ERROR (Status)) {
998 }
999
1000 if (LoadingDmg) {
1001 DEBUG ((DEBUG_INFO, "OCSB: Disabling secure boot for Apple images\n"));
1003 } else {
1004 DEBUG ((DEBUG_INFO, "OCSB: Reenabling secure boot after Apple images\n"));
1006 }
1007}
1008
1009BOOLEAN
1011 OUT UINT8 *RealPolicy OPTIONAL
1012 )
1013{
1014 if (RealPolicy != NULL) {
1015 *RealPolicy = mDmgLoadingPolicy;
1016 }
1017
1018 return mDmgLoading;
1019}
1020
1021EFI_STATUS
1023 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
1024 IN VOID *SourceBuffer,
1025 IN UINTN SourceSize
1026 )
1027{
1028 EFI_STATUS Status;
1029 APPLE_SECURE_BOOT_PROTOCOL *SecureBoot;
1030 UINT8 Policy;
1031 VOID *ManifestBuffer;
1032 UINTN ManifestSize;
1033 UINTN Index;
1034
1035 SecureBoot = OcAppleSecureBootGetProtocol ();
1036 ASSERT (SecureBoot != NULL);
1037
1038 //
1039 // Something is borked if this fails.
1040 //
1041 Status = SecureBoot->GetPolicy (
1042 SecureBoot,
1043 &Policy
1044 );
1045 if (EFI_ERROR (Status)) {
1046 DEBUG ((DEBUG_WARN, "OCSB: No secure boot policy - %r\n", Status));
1047 return EFI_SECURITY_VIOLATION;
1048 }
1049
1050 //
1051 // Blindly report success within DMG loading.
1052 // We have already checked DMG integrity earlier.
1053 // This is not nice, but we have to follow Apple, starting with Big Sur
1054 // they do not even have global manifests in DMG images.
1055 // Can consider checking boot.efi codesign integrity if we want.
1056 //
1057 if ((Policy == AppleImg4SbModeDisabled) && OcAppleSecureBootGetDmgLoading (NULL)) {
1058 DEBUG ((DEBUG_INFO, "OCSB: Direct booting for DMG image\n"));
1059 return EFI_SUCCESS;
1060 }
1061
1062 //
1063 // For everything else it is unsupported, meaning let the system decide.
1064 //
1065 if (Policy == AppleImg4SbModeDisabled) {
1066 DEBUG ((DEBUG_INFO, "OCSB: Secure boot is disabled, skipping\n"));
1067 return EFI_UNSUPPORTED;
1068 }
1069
1070 Status = InternalGetImg4ByPath (
1071 SecureBoot,
1072 DevicePath,
1073 Policy,
1074 &ManifestBuffer,
1075 &ManifestSize
1076 );
1077 if (EFI_ERROR (Status)) {
1078 DEBUG ((DEBUG_INFO, "OCSB: No IMG4 found - %r\n", Status));
1079 return EFI_UNSUPPORTED;
1080 }
1081
1082 STATIC UINT32 mCheckedObjects[] = {
1086 };
1087
1088 for (Index = 0; Index < ARRAY_SIZE (mCheckedObjects); ++Index) {
1089 Status = SecureBoot->VerifyImg4 (
1090 SecureBoot,
1091 SourceBuffer,
1092 SourceSize,
1093 ManifestBuffer,
1094 ManifestSize,
1095 mCheckedObjects[Index],
1096 FALSE
1097 );
1098
1099 //
1100 // We are successful.
1101 //
1102 if (!EFI_ERROR (Status)) {
1103 DEBUG ((DEBUG_INFO, "OCSB: Verified IMG4 without issues\n"));
1104 FreePool (ManifestBuffer);
1105 return EFI_SUCCESS;
1106 }
1107 }
1108
1109 //
1110 // No suitable signature in the manifest.
1111 // Treat as a hard error, as this should not happen.
1112 //
1113 DEBUG ((DEBUG_WARN, "OCSB: No suitable signature - %r\n", Status));
1114 FreePool (ManifestBuffer);
1115 return EFI_SECURITY_VIOLATION;
1116}
EFI_GUID gAppleImg4VerificationProtocolGuid
@ AppleImg4SbModeFull
@ AppleImg4SbModeMedium
@ AppleImg4SbModeDisabled
#define ARRAY_SIZE(Array)
Definition AppleMacEfi.h:34
#define APPLE_SB_OBJ_KERNEL_DEBUG
#define APPLE_SB_OBJ_EFIBOOT
#define APPLE_SB_OBJ_KERNEL
EFI_GUID gAppleSecureBootProtocolGuid
#define APPLE_SB_OBJ_EFIBOOT_DEBUG
#define APPLE_SECURE_BOOT_PROTOCOL_REVISION
#define APPLE_SB_OBJ_EFIBOOT_BASE
EFI_GUID gAppleVendorVariableGuid
EFI_GUID gAppleSecureBootVariableGuid
#define APPLE_BRIDGE_OS_HARDWARE_MODEL_VARIABLE_NAME
DMG_FILEPATH_DEVICE_PATH FilePath
APPLE_SECURE_BOOT_PROTOCOL * OcAppleSecureBootGetProtocol(VOID)
STATIC VOID * InternalReadFile(IN EFI_FILE_PROTOCOL *Volume, IN CHAR16 *FilePath, OUT UINT32 *FileSize)
STATIC EFI_STATUS EFIAPI AppleSbGetFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, OUT UINT8 *Reason)
STATIC EFI_STATUS EFIAPI AppleSbSetKernelFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN UINT8 Reason)
STATIC EFI_STATUS EFIAPI AppleSbVerifyWindows(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN CONST VOID *TargetBuffer, IN UINTN TargetSize, IN BOOLEAN SetFailureReason)
EFI_STATUS OcAppleSecureBootVerify(IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN VOID *SourceBuffer, IN UINTN SourceSize)
STATIC EFI_STATUS InternalVerifyImg4Worker(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN CONST VOID *ImageBuffer, IN UINTN ImageSize, IN CONST VOID *ManifestBuffer, IN UINTN ManifestSize, IN UINT32 ObjType, IN BOOLEAN SetFailureReason, IN UINT8 SbPolicy)
STATIC APPLE_SECURE_BOOT_PROTOCOL * mSecureBoot
STATIC EFI_STATUS EFIAPI AppleSbGetKernelFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, OUT UINT8 *Reason)
STATIC BOOLEAN mSbAvailable
STATIC EFI_STATUS EFIAPI AppleSbGetPolicy(IN APPLE_SECURE_BOOT_PROTOCOL *This, OUT UINT8 *Policy)
APPLE_SECURE_BOOT_PROTOCOL * OcAppleSecureBootInstallProtocol(IN BOOLEAN Reinstall, IN UINT8 SbPolicy, IN UINT8 SbWinPolicy OPTIONAL, IN BOOLEAN SbWinPolicyValid)
STATIC VOID EFIAPI AppleSbSetAvailability(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN BOOLEAN Available)
STATIC UINT8 mDmgLoadingPolicy
STATIC EFI_STATUS EFIAPI AppleSbSetWindowsFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN UINT8 Reason)
STATIC UINT8 mSbPolicy
STATIC BOOLEAN mSbWindowsPolicyValid
EFI_STATUS OcAppleSecureBootBootstrapValues(IN CONST CHAR8 *Model, IN UINT64 Ecid OPTIONAL)
STATIC BOOLEAN mDmgLoading
STATIC EFI_STATUS EFIAPI AppleSbGetWindowsPolicy(IN APPLE_SECURE_BOOT_PROTOCOL *This, OUT UINT8 *Policy)
BOOLEAN OcAppleSecureBootGetDmgLoading(OUT UINT8 *RealPolicy OPTIONAL)
STATIC EFI_STATUS EFIAPI AppleSbGetWindowsFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, OUT UINT8 *Reason)
STATIC EFI_STATUS EFIAPI AppleSbSetFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN UINT8 Reason)
STATIC CHAR8 mSbHardwareModel[16]
STATIC EFI_STATUS EFIAPI AppleSbVerifyImg4ByPath(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN UINT32 ObjType, IN BOOLEAN SetFailureReason)
STATIC EFI_STATUS EFIAPI AppleSbVerifyImg4(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN CONST VOID *ImageBuffer, IN UINTN ImageSize, IN CONST VOID *ManifestBuffer, IN UINTN ManifestSize, IN UINT32 ObjType, IN BOOLEAN SetFailureReason)
STATIC EFI_STATUS EFIAPI InternalGetImg4ByPath(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN UINT8 SbPolicy, OUT VOID **ManifestBufferPtr, OUT UINTN *ManifestSizePtr)
STATIC UINT64 mSbEcid
STATIC UINT8 mSbWindowsPolicy
VOID OcAppleSecureBootSetDmgLoading(IN BOOLEAN LoadingDmg)
STATIC UINT8 InternalImg4GetFailureReason(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN UINT8 SbPolicy, IN EFI_STATUS Status)
STATIC EFI_STATUS EFIAPI AppleSbVerifyWindowsByPath(IN APPLE_SECURE_BOOT_PROTOCOL *This, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN BOOLEAN SetFailureReason)
EFI_BOOT_SERVICES * gBS
VOID OcFileDevicePathFullName(OUT CHAR16 *PathName, IN CONST FILEPATH_DEVICE_PATH *FilePath, IN UINTN PathNameSize)
UINTN OcFileDevicePathFullNameSize(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath)
EFI_STATUS OcGetFileSize(IN EFI_FILE_PROTOCOL *File, OUT UINT32 *Size)
EFI_STATUS OcGetFileData(IN EFI_FILE_PROTOCOL *File, IN UINT32 Position, IN UINT32 Size, OUT UINT8 *Buffer)
EFI_STATUS OcSafeFileOpen(IN CONST EFI_FILE_PROTOCOL *Directory, OUT EFI_FILE_PROTOCOL **NewHandle, IN CONST CHAR16 *FileName, IN CONST UINT64 OpenMode, IN CONST UINT64 Attributes)
Definition OpenFile.c:29
EFI_STATUS OcUninstallAllProtocolInstances(EFI_GUID *Protocol)
EFI_STATUS EFIAPI OcAsciiSafeSPrint(OUT CHAR8 *StartOfBuffer, IN UINTN BufferSize, IN CONST CHAR8 *FormatString,...)
Definition OcAsciiLib.c:190
#define L_STR_SIZE_NT(String)
Definition OcStringLib.h:44
APPLE_EVENT_HANDLE Handle
Definition OcTypingLib.h:45
EFI_RUNTIME_SERVICES * gRT
EFI_GUID gEfiSimpleFileSystemProtocolGuid
#define ASSERT(x)
Definition coder.h:55
APPLE_SB_GET_POLICY GetPolicy
APPLE_SB_VERIFY_IMG4 VerifyImg4
APPLE_SB_SET_AVAILABILITY SetAvailability