OcAppleKernelLib: Add new patch for macOS 13.3+ IOAHCIBlockStorage patch, by @vit9696 (#438)

This commit is contained in:
PMheart 2023-03-30 01:04:26 +02:00 committed by GitHub
parent 852016cd85
commit edb04199d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -856,6 +856,71 @@ PATCHER_GENERIC_PATCH
.Skip = 0
};
STATIC
CONST UINT8
mIOAHCIBlockStoragePatch133Find1[] = {
0x48, 0x8D, 0x3D, 0x00, 0x00, 0x00, 0x00,
0xBA, 0x09, 0x00, 0x00, 0x00
};
STATIC
CONST UINT8
mIOAHCIBlockStoragePatch133Find2[] = {
0x48, 0x8D, 0x3D, 0x00, 0x00, 0x00, 0x00,
0xBA, 0x05, 0x00, 0x00, 0x00
};
STATIC
CONST UINT8
mIOAHCIBlockStoragePatch133FindMask[] = {
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
STATIC
CONST UINT8
mIOAHCIBlockStoragePatch133Replace[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xBA, 0x00, 0x00, 0x00, 0x00
};
STATIC
CONST UINT8
mIOAHCIBlockStoragePatch133ReplaceMask[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF
};
STATIC
PATCHER_GENERIC_PATCH
mIOAHCIBlockStoragePatch133Part1 = {
.Comment = DEBUG_POINTER ("IOAHCIBlockStorage trim 13.3+ part 1"),
.Base = "__ZN24IOAHCIBlockStorageDriver23DetermineDeviceFeaturesEPt",
.Find = mIOAHCIBlockStoragePatch133Find1,
.Mask = mIOAHCIBlockStoragePatch133FindMask,
.Replace = mIOAHCIBlockStoragePatch133Replace,
.ReplaceMask = mIOAHCIBlockStoragePatch133ReplaceMask,
.Size = sizeof (mIOAHCIBlockStoragePatch133Find1),
.Count = 1,
.Skip = 0,
.Limit = 4096
};
STATIC
PATCHER_GENERIC_PATCH
mIOAHCIBlockStoragePatch133Part2 = {
.Comment = DEBUG_POINTER ("IOAHCIBlockStorage trim 13.3+ part 2"),
.Base = "__ZN24IOAHCIBlockStorageDriver23DetermineDeviceFeaturesEPt",
.Find = mIOAHCIBlockStoragePatch133Find2,
.Mask = mIOAHCIBlockStoragePatch133FindMask,
.Replace = mIOAHCIBlockStoragePatch133Replace,
.ReplaceMask = mIOAHCIBlockStoragePatch133ReplaceMask,
.Size = sizeof (mIOAHCIBlockStoragePatch133Find2),
.Count = 1,
.Skip = 0,
.Limit = 4096
};
STATIC
EFI_STATUS
PatchThirdPartyDriveSupport (
@ -870,22 +935,44 @@ PatchThirdPartyDriveSupport (
return EFI_NOT_FOUND;
}
//
// Starting with macOS 13.3 (Darwin 22.4.0), a new set of patches are required, discovered by @vit9696.
//
if (OcMatchDarwinVersion (KernelVersion, KERNEL_VERSION (KERNEL_VERSION_VENTURA, 4, 0), 0)) {
Status = PatcherApplyGenericPatch (Patcher, &mIOAHCIBlockStoragePatch133Part1);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: [FAIL] Failed to apply patch 13.3+ com.apple.iokit.IOAHCIBlockStorage part 1 - %r\n", Status));
return Status;
} else {
DEBUG ((DEBUG_INFO, "OCAK: [OK] Patch success 13.3+ com.apple.iokit.IOAHCIBlockStorage part 1\n"));
}
Status = PatcherApplyGenericPatch (Patcher, &mIOAHCIBlockStoragePatch133Part2);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: [FAIL] Failed to apply patch 13.3+ com.apple.iokit.IOAHCIBlockStorage part 2 - %r\n", Status));
} else {
DEBUG ((DEBUG_INFO, "OCAK: [OK] Patch success 13.3+ com.apple.iokit.IOAHCIBlockStorage part 2\n"));
}
return Status;
}
Status = PatcherApplyGenericPatch (Patcher, &mIOAHCIBlockStoragePatchV1);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: [FAIL] Failed to apply patch com.apple.iokit.IOAHCIBlockStorage V1 - %r\n", Status));
DEBUG ((DEBUG_INFO, "OCAK: [FAIL] Failed to apply patch legacy com.apple.iokit.IOAHCIBlockStorage V1 - %r\n", Status));
} else {
DEBUG ((DEBUG_INFO, "OCAK: [OK] Patch success com.apple.iokit.IOAHCIBlockStorage V1\n"));
DEBUG ((DEBUG_INFO, "OCAK: [OK] Patch success legacy com.apple.iokit.IOAHCIBlockStorage V1\n"));
}
if (OcMatchDarwinVersion (KernelVersion, KERNEL_VERSION_CATALINA_MIN, 0)) {
Status = PatcherApplyGenericPatch (Patcher, &mIOAHCIBlockStoragePatchV2);
if (EFI_ERROR (Status)) {
DEBUG ((DEBUG_INFO, "OCAK: [FAIL] Failed to apply patch com.apple.iokit.IOAHCIBlockStorage V2 - %r\n", Status));
DEBUG ((DEBUG_INFO, "OCAK: [FAIL] Failed to apply patch legacy com.apple.iokit.IOAHCIBlockStorage V2 - %r\n", Status));
} else {
DEBUG ((DEBUG_INFO, "OCAK: [OK] Patch success com.apple.iokit.IOAHCIBlockStorage V2\n"));
DEBUG ((DEBUG_INFO, "OCAK: [OK] Patch success legacy com.apple.iokit.IOAHCIBlockStorage V2\n"));
}
} else {
DEBUG ((DEBUG_INFO, "OCAK: [OK] Skipping IOAHCIBlockStorage V2 on %u\n", KernelVersion));
DEBUG ((DEBUG_INFO, "OCAK: [OK] Skipping IOAHCIBlockStorage legacy V2 on %u\n", KernelVersion));
}
//
@ -895,7 +982,7 @@ PatchThirdPartyDriveSupport (
if ( EFI_ERROR (Status)
&& OcMatchDarwinVersion (KernelVersion, KERNEL_VERSION_SNOW_LEOPARD_MIN, KERNEL_VERSION_SNOW_LEOPARD_MAX))
{
DEBUG ((DEBUG_INFO, "OCAK: [OK] Assuming success for IOAHCIBlockStorage on %u\n", KernelVersion));
DEBUG ((DEBUG_INFO, "OCAK: [OK] Assuming success for legacy IOAHCIBlockStorage on %u\n", KernelVersion));
return EFI_SUCCESS;
}