Skip to content

macos: continue sysext downgrade when stale deactivation is already missing#8812

Open
atavism wants to merge 2 commits into
mainfrom
atavism/fix-downgrade-issue
Open

macos: continue sysext downgrade when stale deactivation is already missing#8812
atavism wants to merge 2 commits into
mainfrom
atavism/fix-downgrade-issue

Conversation

@atavism
Copy link
Copy Markdown
Contributor

@atavism atavism commented May 26, 2026

Fixes a macOS system extension downgrade edge case where the downgrade flow could fail with OSSystemExtensionErrorDomain error 4 (extensionNotFound) during the deactivation step

Changes

  • Treat extensionNotFound during replacement deactivation as recoverable when activateAfter=true
  • Continue by activating the bundled system extension
  • Keep manual deactivation behavior unchanged
  • Add focused tests for replacement deactivation recovery and non-recovery cases

Copilot AI review requested due to automatic review settings May 26, 2026 18:35
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses a macOS system extension downgrade edge case where the deactivate-then-activate replacement flow can fail during deactivation with OSSystemExtensionErrorDomain code extensionNotFound (error 4), and should still proceed to activate the bundled extension when activateAfter=true.

Changes:

  • Adds recovery logic to continue with activation when replacement deactivation fails with extensionNotFound in a deactivate-then-activate flow.
  • Refactors stale-registry error classification with a shared extensionNotFound check helper.
  • Adds focused unit tests covering continue / non-continue scenarios for the new recovery path.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
macos/Runner/VPN/SystemExtensionManager.swift Adds logic to treat extensionNotFound during replacement deactivation as recoverable (continue to activation) and refactors stale-registry detection.
macos/RunnerTests/RunnerTests.swift Adds tests validating the new continue-on-missing-deactivation behavior and negative cases.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +32 to +34
replacementDeactivationFailed: Bool
) -> Bool {
guard replacementDeactivationFailed else { return false }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants