macOS Tahoe Stage 2 Firmware & Root Hash Manifest Fix for dropped T2 Macs (2018–2019). Includes scoped per-process VMM spoofing, bridge-model swap, opt-in Stage 2 Board-ID swap, and in-kernel code validation bypass for OSIUpdateFirmwareElement.
kern.hv_vmm_present = 1, per process —1only to software-update / installer helpers (softwareupdated,com.apple.Mobile, etc.), real bare-metal value to everyone else so APFS disk crypto and Secure Enclave remain unaffected.- bridge-model SWAP — overwrite
bridge-modelon every IODeviceTree node that has it with a valid supported-Mac value (J215AP, override withspoofvmm-bridge=). ON by default. This clears the Stage 1 compatibility gate. - board-id SWAP (Stage 2 Root Hash Manifest fix) — overwrite
board-idwith a valid Tahoe-supported value (Mac-5F9802EFE386AA28, Albert's MacBookPro16,2). During Stage 2 prepare, MobileSoftwareUpdate (MSU) queriesboard-idto look forboot/Firmware/<Board-ID>.dmg.root_hashand mtree manifests. Tahoe dropped boards lack these manifests and fail withNSPOSIXErrorDomain:2/com.apple.osinstall:-81. Opt-in for installation/Stage 2 (-spoofvmmbid/-spoofvmmstage2) so normal desktop boots leave Wi-Fi antenna calibration untouched. - In-Kernel Stage 2 Firmware Bypass (
_cs_validate_page) — intercepts binary code pages forOSInstaller.frameworkandosinstallersetupdat the kernel validation boundary. Binary-patches the entry point of-[OSIUpdateFirmwareElement runReturningError:]withb0 01 c3(mov al, 1; ret) so BridgeOS firmware verification succeeds automatically without userland dylibs or SIP modifications.
- The compatibility gate keys off bridge-model only.
- A bridge-model that is present and set to a supported-Mac value passes the gate and boots fine.
- Board-id spoofing is not needed for the gate and was the sole cause of the WiFi connect failure across v4.1–v4.8. Simply not touching it fixes WiFi with no fix-up required.
- This build does NO model spoofing. Model identity is supplied by OpenCore (PlatformInfo/SMBIOS → MacBookPro16,4).
- Deleting bridge-model boots but does not pass the gate.
./bootstrap.sh
make # release -> build/SpoofVMM.kext
make CONFIG=Debug # debug build (enables -spoofvmmdbg logging)Type log commands directly in Terminal rather than pasting — copying from a
rich-text source can turn -- into a single em-dash and break flag parsing:
log show --last boot --predicate 'eventMessage CONTAINS "svmm"' --style compactVerify:
ioreg -l -p IODeviceTree | grep -iE "board-id|bridge-model"board-id should now show the machine's real value everywhere (since
it's never touched at all), while bridge-model shows the spoofed swap
value. WiFi should work normally.
Expected log, in order:
registered (v4.9: VMM + bridge-model swap only - board-id and the WiFi fix-up have been removed entirely, see notes), waiting for kernel patcher
bridge-model: swap=on value=J215AP (N) | delete=off (0)
route installed (per-process spoof, real value for others)
Everything in this build is confirmed on hardware — the VMM spoof and
bridge-model swap (unchanged since v4.5), and now the removal of board-id,
validated by the -spoofvmmnobid test in v4.8. This is the first version
since v4.5 with no untested or known-ineffective code paths in it.
