@@ -90,7 +90,7 @@ static void doKernelPatch(void (^patchFunc)(void)) {
9090}
9191
9292template <size_t patchSize>
93- static inline void searchAndPatch (const void *haystack,
93+ static inline bool searchAndPatch (const void *haystack,
9494 size_t haystackSize,
9595 const char (&path)[kPathMaxLen],
9696 const char (&dylibCachePath)[kPathMaxLen],
@@ -105,8 +105,10 @@ static inline void searchAndPatch(const void *haystack,
105105 doKernelPatch (^{
106106 lilu_os_memcpy (res, patch, patchSize);
107107 });
108+ return true ;
108109 }
109110 }
111+ return false ;
110112}
111113
112114#pragma mark - Patched functions
@@ -139,7 +141,14 @@ static void patched_cs_validate_page(vnode_t vp,
139141 int pathlen = kPathMaxLen ;
140142 FunctionCast (patched_cs_validate_page, orig_cs_validate)(vp, pager, page_offset, data, arg4, arg5, arg6);
141143 if (vn_getpath (vp, path, &pathlen) == 0 ) {
142- searchAndPatch (data, PAGE_SIZE, path, kBigSurDyldCachePath , kBigSurAmdBronzeMtlAddrLibGetBaseArrayModeReturnOriginal , kBigSurAmdBronzeMtlAddrLibGetBaseArrayModeReturnPatched );
144+ // covers pattern in macOS 11.0-11.2
145+ if (searchAndPatch (data, PAGE_SIZE, path, kBigSurDyldCachePath , kBigSurAmdBronzeMtlAddrLibGetBaseArrayModeReturnOriginal , kBigSurAmdBronzeMtlAddrLibGetBaseArrayModeReturnPatched )) {
146+ return ;
147+ }
148+ // covers pattern in macOS 11.3
149+ if (searchAndPatch (data, PAGE_SIZE, path, kBigSurDyldCachePath , kAmdBronzeMtlAddrLibGetBaseArrayModeReturnOriginal , kAmdBronzeMtlAddrLibGetBaseArrayModeReturnPatched )) {
150+ return ;
151+ }
143152 }
144153}
145154
0 commit comments