From 8f60fd29d8a61bd1daa7ec5000f0abf89c0abc35 Mon Sep 17 00:00:00 2001 From: PMheart <17109513+PMheart@users.noreply.github.com> Date: Mon, 4 Apr 2022 19:11:17 +0200 Subject: [PATCH] OcAppleKernelLib: Fix mApfsTimeoutPatch --- Library/OcAppleKernelLib/CommonPatches.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/Library/OcAppleKernelLib/CommonPatches.c b/Library/OcAppleKernelLib/CommonPatches.c index 4f2ff49f..66f0ab8c 100644 --- a/Library/OcAppleKernelLib/CommonPatches.c +++ b/Library/OcAppleKernelLib/CommonPatches.c @@ -2045,20 +2045,22 @@ PatchForceSecureBootScheme ( STATIC UINT8 mApfsTimeoutFind[] = { - 0x48, 0x3D, 0x7F, 0x96, 0x98, 0x00 + 0x48, 0x3D, 0x7F, 0x96, 0x98, 0x00 ///< cmp rax, 9999999d }; +STATIC_ASSERT (sizeof (mApfsTimeoutFind) == 6, "Unsupported mApfsTimeoutFind"); STATIC UINT8 mApfsTimeoutReplace[] = { - 0x48, 0x3D, 0x00, 0x00, 0x00, 0x00 ///< To be set by PatchSetApfsTimeout() + 0x48, 0x3D, 0x00, 0x00, 0x00, 0x00 ///< cmp rax, ; To be set by PatchSetApfsTimeout() }; +STATIC_ASSERT (sizeof (mApfsTimeoutReplace) == 6, "Unsupported mApfsTimeoutReplace"); STATIC PATCHER_GENERIC_PATCH mApfsTimeoutPatch = { .Comment = DEBUG_POINTER ("ApfsTimeout"), - .Base = NULL, + .Base = "_nx_mount_trim_thread", .Find = mApfsTimeoutFind, .Mask = NULL, .Replace = mApfsTimeoutReplace, @@ -2122,7 +2124,8 @@ PatchSetApfsTrimTimeout ( // // Disable trim using another patch when timeout is 0. // - if (mApfsTimeoutReplace[2] == 0) { + if (mApfsTimeoutReplace[2] == 0 && mApfsTimeoutReplace[3] == 0 + && mApfsTimeoutReplace[4] == 0 && mApfsTimeoutReplace[5] == 0) { Status = PatcherApplyGenericPatch (Patcher, &mApfsDisableTrimPatch); if (EFI_ERROR (Status)) { DEBUG ((DEBUG_INFO, "OCAK: Failed to apply patch ApfsDisableTrim - %r\n", Status)); @@ -2133,6 +2136,12 @@ PatchSetApfsTrimTimeout ( return Status; } + // + // FIXME: This is wrong! At least from 11.6.1, mApfsTimeoutPatch cannot be applied anymore. + // + // It is only possible to specify trim timeout value from 10.14 to 11.x. + // Starting at 12.0 this is no longer possible. + // if (KernelVersion < KERNEL_VERSION_MONTEREY_MIN) { Status = PatcherApplyGenericPatch (Patcher, &mApfsTimeoutPatch); if (EFI_ERROR (Status)) { @@ -2144,7 +2153,7 @@ PatchSetApfsTrimTimeout ( return Status; } - DEBUG ((DEBUG_INFO, "OCAK: Skipping patch SetApfsTrimTimeout on macOS 12.0+\n")); + DEBUG ((DEBUG_INFO, "OCAK: Skipping SetApfsTrimTimeout on macOS 12.0+, set 0 to disable trim instead\n")); return EFI_SUCCESS; }