Skip to content

Commit e3645fb

Browse files
committed
kern_start: Resolve iPad patch regression
Closes acidanthera/bugtracker#2166
1 parent f6f9ec3 commit e3645fb

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

Changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ FeatureUnlock Changelog
22
======================
33
### v1.1.1
44
- Resolved Macmini8,1 patch regression from 1.1.0
5+
- Resolved iPad Sidecar patch regression from 1.1.0
6+
- Applicable if host model did not require Sidecar patch
57

68
### v1.1.0
79
- Refactored model patch set detection

FeatureUnlock/kern_dyld_patch.hpp

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -435,11 +435,20 @@ static const uint8_t kNightShiftPatched[] = {
435435
#pragma mark - Verify Patch Size
436436

437437
// Patching the dyld requires that both the find and replace are of same length
438+
static_assert(sizeof(kSideCarAirPlayiMacOriginal) == sizeof(kSideCarAirPlayiMacPatched), "patch size invalid");
439+
static_assert(sizeof(kSideCarAirPlayiMacAlternative2012Original) == sizeof(kSideCarAirPlayiMacAlternative2012Patched), "patch size invalid");
440+
static_assert(sizeof(kSideCarAirPlayiMacAlternative2013Original) == sizeof(kSideCarAirPlayiMacAlternative2013Patched), "patch size invalid");
441+
static_assert(sizeof(kSideCarAirPlayiMacAlternative2014Original) == sizeof(kSideCarAirPlayiMacAlternative2014Patched), "patch size invalid");
438442
static_assert(sizeof(kSideCarAirPlayMacBookOriginal) == sizeof(kSideCarAirPlayMacBookPatched), "patch size invalid");
443+
static_assert(sizeof(kSideCarAirPlayMacBookMacBookAir2012Original) == sizeof(kSideCarAirPlayMacBooMacBookAir2012Patched), "patch size invalid");
444+
static_assert(sizeof(kSideCarAirPlayMacBookAir2013_2015Original) == sizeof(kSideCarAirPlayMacBookAir2013_2015Patched), "patch size invalid");
439445
static_assert(sizeof(kSideCarAirPlayMacBookProOriginal) == sizeof(kSideCarAirPlayMacBookProPatched), "patch size invalid");
440-
static_assert(sizeof(kSideCarAirPlayiMacOriginal) == sizeof(kSideCarAirPlayiMacPatched), "patch size invalid");
446+
static_assert(sizeof(kSideCarAirPlayMacBookPro2012Original) == sizeof(kSideCarAirPlayMacBookPro2012Patched), "patch size invalid");
447+
static_assert(sizeof(kSideCarAirPlayMacBookPro2013_2015Original) == sizeof(kSideCarAirPlayMacBookPro2013_2015Patched), "patch size invalid");
441448
static_assert(sizeof(kSideCarAirPlayStandaloneDesktopOriginal) == sizeof(kSideCarAirPlayStandaloneDesktopPatched), "patch size invalid");
442-
static_assert(sizeof(kMacModelAirplayExtendedOriginal) == sizeof(kMacModelAirplayExtendedPatched), "patch size invalid");
449+
static_assert(sizeof(kSideCarAirPlayMacProOriginal) == sizeof(kSideCarAirPlayMacProPatched), "patch size invalid");
450+
static_assert(sizeof(kSideCarAirPlayMacminiOriginal) == sizeof(kSideCarAirPlayMacminiPatched), "patch size invalid");
443451
static_assert(sizeof(kSidecariPadModelOriginal) == sizeof(kSidecariPadModelPatched), "patch size invalid");
444-
static_assert(sizeof(kNightShiftLegacyOriginal) == sizeof(kNightShiftLegacyPatched), "patch size invalid");
445-
static_assert(sizeof(kNightShiftOriginal) == sizeof(kNightShiftPatched), "patch size invalid");
452+
static_assert(sizeof(kMacModelAirplayExtendedOriginal) == sizeof(kMacModelAirplayExtendedPatched), "patch size invalid");
453+
static_assert(sizeof(kAirPlayVmmOriginal) == sizeof(kAirPlayVmmPatched), "patch size invalid");
454+
static_assert(sizeof(kNightShiftOriginal) == sizeof(kNightShiftPatched), "patch size invalid");

FeatureUnlock/kern_start.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -298,19 +298,18 @@ static void patched_cs_validate_page(vnode_t vp, memory_object_t pager, memory_o
298298
}
299299
}
300300
}
301-
302-
// Sidecar iPad check
303-
if (allow_sidecar_ipad && !has_applied_iPad_sidecar_patch) {
304-
patch_result = searchAndPatch(data, PAGE_SIZE, path, kSidecariPadModelOriginal, kSidecariPadModelPatched, "Sidecar (iPad)", true);
305-
if (patch_result) {
306-
has_applied_iPad_sidecar_patch = true;
307-
}
308-
}
309-
301+
}
302+
// Sidecar iPad check
303+
if (allow_sidecar_ipad && !has_applied_iPad_sidecar_patch) {
304+
patch_result = searchAndPatch(data, PAGE_SIZE, path, kSidecariPadModelOriginal, kSidecariPadModelPatched, "Sidecar (iPad)", true);
310305
if (patch_result) {
311-
return;
306+
has_applied_iPad_sidecar_patch = true;
312307
}
313308
}
309+
310+
if (patch_result) {
311+
return;
312+
}
314313
}
315314
}
316315
// Individual binary patching
@@ -586,6 +585,11 @@ static void detectSupportedPatchSets() {
586585
}
587586
}
588587
if (!disable_sidecar_mac && (os_supports_sidecar || os_supports_airplay_to_mac || os_supports_universal_control)) {
588+
// Sidecar (iPad specific)
589+
if (allow_sidecar_ipad) {
590+
DBGLOG(MODULE_SHORT, "Model requested Sidecar iPad patch");
591+
}
592+
589593
// Sidecar and AirPlay to Mac
590594
if (// Ivy Bridge to Broadwell (including MacPro5,1)
591595
model_is_iMac_2012 || model_is_iMac_2013 || model_is_iMac_2014 || model_is_iMac_2015_broadwell || \

0 commit comments

Comments
 (0)