Skip to content

← All issues

[Test Report] MacBookAir8,1 (T2) – Why "Dirty" Cover Install is the Only Way to Bypass Early PMU Deadlock

· by @Skjen-911

Device: MacBookAir8,1 (2018, T2 Security Chip)
Tool: OpenCore Legacy Patcher T2 (v4.0.0.190009.7)
Target OS: macOS 26 Tahoe

Summary:
I conducted two days of testing on MacBookAir8,1 to compare a "dirty" cover install versus a clean install. The critical finding is that a "clean" install fails immediately at the PMU clock sync stage. Only a "dirty" cover install (overwriting an existing system volume with complex Preboot residues) can bypass T2's early boot validation and reach the graphical Login Window.

Day 1: The "Mistake" That Proved the Only Way Forward
• Setup (Dirty Environment): The target volume was created locally (no USB) and had a complex history: downgraded to Ventura, then upgraded to Sonoma. This left heavily mixed Preboot environments and security certificates. macOS 26 was then installed directly over this volume.
• Result: The installer completed Stage 1. The system successfully loaded the graphical Login Window. However, upon entering the password, the kernel panicked due to AppleKeyStore timeout (launchd infinite loop).
• Feasibility Analysis: If I had performed a clean install on Day 1 instead of this cover install, the system would never have reached the Login Window. It would have crashed early at the PMU stage (as proven on Day 2). Thus, the "dirty" cover install is currently the only viable method to bypass the early T2 boot validation.
Day 2: The Reality of Clean Install (Pure Environment)
• Setup: Created independent partitions (Installer HFS+ and Tahoe-Test APFS) and executed Reset NVRAM.
• Result: The system failed much earlier. It stalled at using hsynchronous pmu monotonic clock read and entered a launchd deadlock. The graphical installer was never reached.
• Implication: Without legacy Preboot residues to trick T2, the hardware strictly blocks PMU clock synchronization.
Additional Observations:
• Bypassing OpenCore: Booting natively triggers Apple's installer whitelist ("macOS Tahoe is not compatible with this Mac").
• SMBIOS Spoofing: Not feasible in the current OCLP-T2 UI.
Conclusion & Suggestion:
The T2 security chip remains a hard physical lock. The "dirty" cover install proves that the UI and core OS are fully compatible once early validation is bypassed. Future development should focus on dynamically generating or replaying a legitimate Preboot environment (mimicking the dirty state) to bypass the early PMU deadlock, while simultaneously addressing the final AppleKeyStore key exchange during user authentication.

Comments

@Skjen-911 ·

@zkennedy137 @gandolf243 @matteoiacca

Are there currently any reports of someone successfully upgrading a 2018 MacBook Air with a T2 chip to macOS 26 Tahoe?

@albert-mueller ·

4. > @zkennedy137 @gandolf243 @matteoiacca

Are there currently any reports of someone successfully upgrading a 2018 MacBook Air with a T2 chip to macOS 26 Tahoe?

Currently there are reports that it doesn't work yet on T2 Macs (at Stage 2 it gets stuck).

@Skjen-911 ·

4. > @zkennedy137 @gandolf243 @matteoiacca

Are there currently any reports of someone successfully upgrading a 2018 MacBook Air with a T2 chip to macOS 26 Tahoe?

Currently there are reports that it doesn't work yet on T2 Macs (at Stage 2 it gets stuck).

Thanks @albert-mueller! Hope it gets working soon. As a MacBook Air 2018 user, I'll keep following the progress, test the installs, and provide feedback!

@Skjen-911 ·

Image Image With 19.9.9

Thanks for the new photo showing the Privacy/Terms page.

Just to clarify: does this mean your current test progress has only reached this specific page so far?

I want to share a crucial detail from my Day 1 test (using the older .7 version with a dirty cover install): I actually bypassed the installation phase completely and successfully downloaded all the system files. My machine even reached the final macOS 26 graphical Login Window (the password entry screen).

However, the moment I entered my password, the system instantly panicked, threw a screen full of verbose code, and triggered a kernel panic, locking up completely.

I am sharing this to let you know that the software deployment and UI rendering can work, but the final authentication step is where the T2 completely blocks us. I will test 19.9.9 with a clean install as soon as I am back to see if your new T2Fixup changes this behavior!imageimage

@matteoiacca ·

@albert-mueller @zkennedy137 @gandolf243 @Skjen-911
Seeing @Skjen-911 reach the graphical login window on the MacBookAir8,1 is awesome news. It proves GPU acceleration, WindowServer, and the core OS are running fine on T2 once early boot checks are out of the way.
Here is what is happening and how to get past both stops:

  1. Why clean install gets stuck at using synchronous pmu monotonic clock read:
    On a clean drive with reset NVRAM, the T2 chip does not have the legacy Preboot/LocalPolicy data it expects, so it ignores the clock sync requests and the boot hangs. On a dirty install, those older Preboot files are still there from Ventura/Sonoma, so the T2 is happy and lets it boot right through. To fix this for clean installs, we just need OCLP to copy or preserve that legacy Preboot folder onto the target volume.
  2. Why entering the password panics at the Login Window:
    When you type your password, macOS asks the T2 SEP to unlock the account. But the older T2 BridgeOS cannot handle Tahoe's new protocol, so it sits there waiting until it hits a 5-strike timeout and panics the kernel (AppleKeyStore timeout).
    How to fix it:
  • I updated T2TahoeFixup (v1.0.2) so login processes (loginwindow, opendirectoryd, etc.) use software password derivation instead of calling the hardware SEP, exactly like macOS does inside a VM. I also hooked AppleKeyStore so it skips the SEP endpoint and never triggers the timeout panic.
  • As a quick backup, you can also just add aks-endpoint=0 to your OpenCore boot-args. AppleKeyStore natively checks for this boot-arg and skips waiting on the SEP.
    This should let the password login pass right through into the desktop.

T2TahoeFixup-1.0.2-Release.zip

@Skjen-911 ·

@albert-mueller @zkennedy137 @gandolf243 @Skjen-911
Seeing @Skjen-911 reach the graphical login window on the MacBookAir8,1 is awesome news. It proves GPU acceleration, WindowServer, and the core OS are running fine on T2 once early boot checks are out of the way.
Here is what is happening and how to get past both stops:

  1. Why clean install gets stuck at using synchronous pmu monotonic clock read:
    On a clean drive with reset NVRAM, the T2 chip does not have the legacy Preboot/LocalPolicy data it expects, so it ignores the clock sync requests and the boot hangs. On a dirty install, those older Preboot files are still there from Ventura/Sonoma, so the T2 is happy and lets it boot right through. To fix this for clean installs, we just need OCLP to copy or preserve that legacy Preboot folder onto the target volume.
  2. Why entering the password panics at the Login Window:
    When you type your password, macOS asks the T2 SEP to unlock the account. But the older T2 BridgeOS cannot handle Tahoe's new protocol, so it sits there waiting until it hits a 5-strike timeout and panics the kernel (AppleKeyStore timeout).
    How to fix it:
  • I updated T2TahoeFixup (v1.0.2) so login processes (loginwindow, opendirectoryd, etc.) use software password derivation instead of calling the hardware SEP, exactly like macOS does inside a VM. I also hooked AppleKeyStore so it skips the SEP endpoint and never triggers the timeout panic.
  • As a quick backup, you can also just add aks-endpoint=0 to your OpenCore boot-args. AppleKeyStore natively checks for this boot-arg and skips waiting on the SEP.
    This should let the password login pass right through into the desktop.

T2TahoeFixup-1.0.2-Release.zip

Incredible explanation! Everything makes perfect sense now.

I just found all the original photos from my Day 1 and Day 2 tests. I am attaching them to this reply as additional evidence so you can see the exact crash states.

I'm currently away from my Mac, so I will take some time to digest your notes first. As soon as I'm back, I will apply the new v1.0.2 patch and the aks-endpoint=0 boot-arg, and run the test.

I'll report back with the new logs and results. Thanks again for the lightning-fast fix!
image
image
image

@Skjen-911 ·

@albert-mueller @zkennedy137 @gandolf243 @Skjen-911
Seeing @Skjen-911 reach the graphical login window on the MacBookAir8,1 is awesome news. It proves GPU acceleration, WindowServer, and the core OS are running fine on T2 once early boot checks are out of the way.
Here is what is happening and how to get past both stops:

  1. Why clean install gets stuck at using synchronous pmu monotonic clock read:
    On a clean drive with reset NVRAM, the T2 chip does not have the legacy Preboot/LocalPolicy data it expects, so it ignores the clock sync requests and the boot hangs. On a dirty install, those older Preboot files are still there from Ventura/Sonoma, so the T2 is happy and lets it boot right through. To fix this for clean installs, we just need OCLP to copy or preserve that legacy Preboot folder onto the target volume.
  2. Why entering the password panics at the Login Window:
    When you type your password, macOS asks the T2 SEP to unlock the account. But the older T2 BridgeOS cannot handle Tahoe's new protocol, so it sits there waiting until it hits a 5-strike timeout and panics the kernel (AppleKeyStore timeout).
    How to fix it:
  • I updated T2TahoeFixup (v1.0.2) so login processes (loginwindow, opendirectoryd, etc.) use software password derivation instead of calling the hardware SEP, exactly like macOS does inside a VM. I also hooked AppleKeyStore so it skips the SEP endpoint and never triggers the timeout panic.
  • As a quick backup, you can also just add aks-endpoint=0 to your OpenCore boot-args. AppleKeyStore natively checks for this boot-arg and skips waiting on the SEP.
    This should let the password login pass right through into the desktop.

T2TahoeFixup-1.0.2-Release.zip

I just remembered another crucial observation that might be very helpful for the project!

Today, I used EFI Boot (OpenCore environment) to boot my existing Sonoma partition. I wanted to simulate what the hardware status might be like if we successfully reach the macOS 26 desktop.

The result was incredibly promising: Both Wi-Fi and Bluetooth modules were working perfectly normally! The only thing that failed was the GPU acceleration (the system lost the glassmorphism/liquid glass rendering effects and had abnormal resolution).

This proves that the network and Bluetooth kexts injected by OCLP-T2 are fully functional under the T2 spoofing environment. It means once we bypass the login window into macOS 26, we probably only need to worry about the Root Patch for the GPU!

@albert-mueller ·

@albert-mueller @zkennedy137 @gandolf243 @Skjen-911 Seeing @Skjen-911 reach the graphical login window on the MacBookAir8,1 is awesome news. It proves GPU acceleration, WindowServer, and the core OS are running fine on T2 once early boot checks are out of the way. Here is what is happening and how to get past both stops:

  1. Why clean install gets stuck at using synchronous pmu monotonic clock read:
    On a clean drive with reset NVRAM, the T2 chip does not have the legacy Preboot/LocalPolicy data it expects, so it ignores the clock sync requests and the boot hangs. On a dirty install, those older Preboot files are still there from Ventura/Sonoma, so the T2 is happy and lets it boot right through. To fix this for clean installs, we just need OCLP to copy or preserve that legacy Preboot folder onto the target volume.
  2. Why entering the password panics at the Login Window:
    When you type your password, macOS asks the T2 SEP to unlock the account. But the older T2 BridgeOS cannot handle Tahoe's new protocol, so it sits there waiting until it hits a 5-strike timeout and panics the kernel (AppleKeyStore timeout).
    How to fix it:
  • I updated T2TahoeFixup (v1.0.2) so login processes (loginwindow, opendirectoryd, etc.) use software password derivation instead of calling the hardware SEP, exactly like macOS does inside a VM. I also hooked AppleKeyStore so it skips the SEP endpoint and never triggers the timeout panic.
  • As a quick backup, you can also just add aks-endpoint=0 to your OpenCore boot-args. AppleKeyStore natively checks for this boot-arg and skips waiting on the SEP.
    This should let the password login pass right through into the desktop.

T2TahoeFixup-1.0.2-Release.zip

Thanks! Since my SSD runs 26.5.2, I’ll need to update to 26.7.1 and try again. It will take some time before I can booting from the external SSD.

@zkennedy137 ·

8. > Image
> Image
> With 19.9.9

Thanks for the new photo showing the Privacy/Terms page.
Just to clarify: does this mean your current test progress has only reached this specific page so far?
I want to share a crucial detail from my Day 1 test (using the older .7 version with a dirty cover install): I actually bypassed the installation phase completely and successfully downloaded all the system files. My machine even reached the final macOS 26 graphical Login Window (the password entry screen).
However, the moment I entered my password, the system instantly panicked, threw a screen full of verbose code, and triggered a kernel panic, locking up completely.
I am sharing this to let you know that the software deployment and UI rendering can work, but the final authentication step is where the T2 completely blocks us. I will test 19.9.9 with a clean install as soon as I am back to see if your new T2Fixup changes this behavior!![image](https://github.com/user-attachments/assets/94ad0f88-1fa6-4cce-9340-5ae47bd425c3)![image](https://private-user-images.githubusercontent.com/344189995/677167759-08c000c5-9df2-435f-aa0d-7bd6e20ee850.jpeg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTI0MTQxMTgsIm5iZiI6MTc5MjQxMzgxOCwicGF0aCI6Ii8zNDQxODk5OTUvNjc3MTY3NzU5LTA4YzAwMGM1LTlkZjItNDM1Zi1hYTBkLTdiZDZlMjBlZTg1MC5qcGVnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MTAxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjEwMTlUMTI0MzM4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OWZjNjgwMjk1NGQ4OTJhYzg2OTNiYWJmMzU3ZDg1YzQ4ZmZiOTgwMTgyM2YxN2E2YTk2NjIyYjAzMWE2ZDZmZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGanBlZyJ9.52EzcITiJvO_JRRbvF9ZewWjzIfU-PMRqY97VY4GAHM)

You almost assuredly were booting into the volume for file-vault. Even if not enabled you can boot this partition and it will give the illusion of a login screen. It is just to enter your password for file-vault. It would freeze immediately after you enter the password and leave the screen stuck with the “login screen” and then possible shutdown from a panick. @Skjen-911

@matteoiacca ·

@zkennedy137 @albert-mueller

Thanks for the feedback! To clarify on the FileVault theory:

It definitely wasn't the EFI pre-boot FileVault screen. Here is why:

  1. FileVault is completely disabled on this APFS container. When FileVault is off, APFS never mounts a pre-boot auth UI; boot.efi passes control directly to /System/Library/Kernels/kernel.
  2. The system had already completed the full boot chain: launchd (PID 1) was active, root was mounted read-only with the signed system snapshot, WindowServer had launched with full resolution handling, and the Cocoa loginwindow process was actively rendering the UI.
  3. The panic that occurred upon password submission came from inside the running XNU kernel:
    panic: "sks request timeout (5 strikes)" originating from com.apple.driver.AppleKeyStore.
    In an EFI pre-boot FileVault unlock, the macOS kernel isn't even in memory yet, so an IOKit kernel panic like this is physically impossible.

Why AppleKeyStore was called even without FileVault:
Even with FileVault off, macOS always protects the user keychain/dataprotection via a local User Keybag (/var/db/keybags/). At the graphical login window, loginwindow and opendirectoryd submit the password to AppleKeyStore to unwrap this keybag. On T2 Macs, AppleKeyStore defaults to delegating this to the T2 Secure Enclave (SEP) via mailbox IPC. Because BridgeOS doesn't reply with the expected Tahoe response, AppleKeyStore times out 5 consecutive times and halts the kernel.

That's why hooking AppleKeyStore::expect_sep_firmware_to_be_loaded() -> false in T2TahoeFixup v1.0.2 (or setting aks-endpoint=0) solves this: it forces software keybag derivation (just like macOS does in a VM) and bypasses the SEP strike panic entirely.

@albert-mueller Take your time updating to 26.7.1! Looking forward to your results with the external SSD once you're ready.

@Skjen-911 ·

8. > Image
> Image
> With 19.9.9

Thanks for the new photo showing the Privacy/Terms page.
Just to clarify: does this mean your current test progress has only reached this specific page so far?
I want to share a crucial detail from my Day 1 test (using the older .7 version with a dirty cover install): I actually bypassed the installation phase completely and successfully downloaded all the system files. My machine even reached the final macOS 26 graphical Login Window (the password entry screen).
However, the moment I entered my password, the system instantly panicked, threw a screen full of verbose code, and triggered a kernel panic, locking up completely.
I am sharing this to let you know that the software deployment and UI rendering can work, but the final authentication step is where the T2 completely blocks us. I will test 19.9.9 with a clean install as soon as I am back to see if your new T2Fixup changes this behavior!![image](https://github.com/user-attachments/assets/94ad0f88-1fa6-4cce-9340-5ae47bd425c3)![image](https://private-user-images.githubusercontent.com/344189995/677167759-08c000c5-9df2-435f-aa0d-7bd6e20ee850.jpeg?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3OTI0MTQxMTgsIm5iZiI6MTc5MjQxMzgxOCwicGF0aCI6Ii8zNDQxODk5OTUvNjc3MTY3NzU5LTA4YzAwMGM1LTlkZjItNDM1Zi1hYTBkLTdiZDZlMjBlZTg1MC5qcGVnP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI2MTAxOSUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNjEwMTlUMTI0MzM4WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OWZjNjgwMjk1NGQ4OTJhYzg2OTNiYWJmMzU3ZDg1YzQ4ZmZiOTgwMTgyM2YxN2E2YTk2NjIyYjAzMWE2ZDZmZSZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmcmVzcG9uc2UtY29udGVudC10eXBlPWltYWdlJTJGanBlZyJ9.52EzcITiJvO_JRRbvF9ZewWjzIfU-PMRqY97VY4GAHM)

You almost assuredly were booting into the volume for file-vault. Even if not enabled you can boot this partition and it will give the illusion of a login screen. It is just to enter your password for file-vault. It would freeze immediately after you enter the password and leave the screen stuck with the “login screen” and then possible shutdown from a panick. @Skjen-911

@zkennedy137 @matteoiacca Just to add one more visual detail from my Day 1 test, to fully confirm @matteoiacca's theory.

I remember exactly what that login screen looked like, even though I didn't take a photo. It was definitely the macOS graphical Login Window, but severely unaccelerated.

Here is what I saw:
image

@Skjen-911 ·

I just want to mention that I'm located in Asia, so there is a significant time zone difference (around 12 hours) between us. Also, English is not my native language, so please excuse any awkward phrasing in advance.

I am currently quite busy and apologize if I can't reply or test immediately. But I will definitely try the v1.0.2 patch and the aks-endpoint=0 boot-arg as soon as I have time, and I will get back to you with the results.