Skip to content

Commit

Permalink
kern_start: Resolve iPad patch regression
Browse files Browse the repository at this point in the history
  • Loading branch information
khronokernel committed Nov 27, 2022
1 parent f6f9ec3 commit e3645fb
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 14 deletions.
2 changes: 2 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ FeatureUnlock Changelog
======================
### v1.1.1
- Resolved Macmini8,1 patch regression from 1.1.0
- Resolved iPad Sidecar patch regression from 1.1.0
- Applicable if host model did not require Sidecar patch

### v1.1.0
- Refactored model patch set detection
Expand Down
17 changes: 13 additions & 4 deletions FeatureUnlock/kern_dyld_patch.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -435,11 +435,20 @@ static const uint8_t kNightShiftPatched[] = {
#pragma mark - Verify Patch Size

// Patching the dyld requires that both the find and replace are of same length
static_assert(sizeof(kSideCarAirPlayiMacOriginal) == sizeof(kSideCarAirPlayiMacPatched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayiMacAlternative2012Original) == sizeof(kSideCarAirPlayiMacAlternative2012Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayiMacAlternative2013Original) == sizeof(kSideCarAirPlayiMacAlternative2013Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayiMacAlternative2014Original) == sizeof(kSideCarAirPlayiMacAlternative2014Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacBookOriginal) == sizeof(kSideCarAirPlayMacBookPatched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacBookMacBookAir2012Original) == sizeof(kSideCarAirPlayMacBooMacBookAir2012Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacBookAir2013_2015Original) == sizeof(kSideCarAirPlayMacBookAir2013_2015Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacBookProOriginal) == sizeof(kSideCarAirPlayMacBookProPatched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayiMacOriginal) == sizeof(kSideCarAirPlayiMacPatched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacBookPro2012Original) == sizeof(kSideCarAirPlayMacBookPro2012Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacBookPro2013_2015Original) == sizeof(kSideCarAirPlayMacBookPro2013_2015Patched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayStandaloneDesktopOriginal) == sizeof(kSideCarAirPlayStandaloneDesktopPatched), "patch size invalid");
static_assert(sizeof(kMacModelAirplayExtendedOriginal) == sizeof(kMacModelAirplayExtendedPatched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacProOriginal) == sizeof(kSideCarAirPlayMacProPatched), "patch size invalid");
static_assert(sizeof(kSideCarAirPlayMacminiOriginal) == sizeof(kSideCarAirPlayMacminiPatched), "patch size invalid");
static_assert(sizeof(kSidecariPadModelOriginal) == sizeof(kSidecariPadModelPatched), "patch size invalid");
static_assert(sizeof(kNightShiftLegacyOriginal) == sizeof(kNightShiftLegacyPatched), "patch size invalid");
static_assert(sizeof(kNightShiftOriginal) == sizeof(kNightShiftPatched), "patch size invalid");
static_assert(sizeof(kMacModelAirplayExtendedOriginal) == sizeof(kMacModelAirplayExtendedPatched), "patch size invalid");
static_assert(sizeof(kAirPlayVmmOriginal) == sizeof(kAirPlayVmmPatched), "patch size invalid");
static_assert(sizeof(kNightShiftOriginal) == sizeof(kNightShiftPatched), "patch size invalid");
24 changes: 14 additions & 10 deletions FeatureUnlock/kern_start.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -298,19 +298,18 @@ static void patched_cs_validate_page(vnode_t vp, memory_object_t pager, memory_o
}
}
}

// Sidecar iPad check
if (allow_sidecar_ipad && !has_applied_iPad_sidecar_patch) {
patch_result = searchAndPatch(data, PAGE_SIZE, path, kSidecariPadModelOriginal, kSidecariPadModelPatched, "Sidecar (iPad)", true);
if (patch_result) {
has_applied_iPad_sidecar_patch = true;
}
}

}
// Sidecar iPad check
if (allow_sidecar_ipad && !has_applied_iPad_sidecar_patch) {
patch_result = searchAndPatch(data, PAGE_SIZE, path, kSidecariPadModelOriginal, kSidecariPadModelPatched, "Sidecar (iPad)", true);
if (patch_result) {
return;
has_applied_iPad_sidecar_patch = true;
}
}

if (patch_result) {
return;
}
}
}
// Individual binary patching
Expand Down Expand Up @@ -586,6 +585,11 @@ static void detectSupportedPatchSets() {
}
}
if (!disable_sidecar_mac && (os_supports_sidecar || os_supports_airplay_to_mac || os_supports_universal_control)) {
// Sidecar (iPad specific)
if (allow_sidecar_ipad) {
DBGLOG(MODULE_SHORT, "Model requested Sidecar iPad patch");
}

// Sidecar and AirPlay to Mac
if (// Ivy Bridge to Broadwell (including MacPro5,1)
model_is_iMac_2012 || model_is_iMac_2013 || model_is_iMac_2014 || model_is_iMac_2015_broadwell || \
Expand Down

0 comments on commit e3645fb

Please sign in to comment.