diff --git a/CHANGELOG.md b/CHANGELOG.md index 2952c5c40..c5aa0e837 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # OpenCore Legacy Patcher changelog ## 1.4.2 +- Resolve Auto-Join support for Modern Wireless on macOS 14.4 + - Applicable for BCM94360, 4360, 4350, 4331 and 43224 chipsets +- Resolve WiFi support for Legacy Wireless on macOS 12.7.4 and 13.6.5 + - Applicable for BCM94328, BCM94322 and Atheros chipsets +- Resolve USB 1.1 on macOS Ventura regression from OCLP 1.4.0 +- Increment Binaries: + - PatcherSupportPkg 1.4.8 - release ## 1.4.1 - Update updater implementation diff --git a/data/sys_patch_dict.py b/data/sys_patch_dict.py index 788d2aa07..3b5e3dd2d 100644 --- a/data/sys_patch_dict.py +++ b/data/sys_patch_dict.py @@ -1,6 +1,8 @@ # Dictionary defining patch sets used during Root Volume patching (sys_patch.py) # Copyright (C) 2022-2023, Mykola Grymalyuk +import packaging.version + from data import os_data @@ -9,7 +11,7 @@ class SystemPatchDictionary(): Library for generating patch sets for sys_patch.py and supporting modules Usage: - >>> patchsets = SystemPatchDictionary(22, 0, [20, 21, 22]).patchset_dict + >>> patchsets = SystemPatchDictionary(22, 0, [20, 21, 22], "13.0").patchset_dict Patchset Schema: @@ -49,12 +51,13 @@ class SystemPatchDictionary(): Note: Stubbed binaries are OS specific, thus use the 'self.os_major' variable to denounce which folder variant to use """ - def __init__(self, os_major: int, os_minor: int, non_metal_os_support: list) -> None: + def __init__(self, os_major: int, os_minor: int, non_metal_os_support: list, marketing_version: str) -> None: """ Parameters: os_major (int): Major XNU Kernel version os_minor (int): Minor XNU Kernel version non_metal_os_support (list): List of supported non-metal OSes (XNU Major Versions) + marketing_version (str): Marketing version of the OS 'non_metal_os_support' is assumed to be sorted from oldest to newest """ @@ -64,6 +67,9 @@ class SystemPatchDictionary(): self.os_float: float = float(f"{self.os_major}.{self.os_minor}") self.non_metal_os_support: list = non_metal_os_support self.patchset_dict: dict = {} + self.marketing_version: str = marketing_version + + self.affected_by_cve_2024_23227: bool = self.__is_affect_by_cve_2024_23227() # XNU Kernel versions self.macOS_12_0_B7: float = 21.1 @@ -120,6 +126,27 @@ class SystemPatchDictionary(): return "12.5-23.4" + def __is_affect_by_cve_2024_23227(self) -> bool: + """ + CVE-2024-23227 broke our airportd patches for 12.7.4, 13.6.5 and 14.4 + + Note that since the XNU version's security patch level is not increment + """ + + if self.os_major > os_data.os_data.sonoma: + return True + + parsed_version = packaging.version.parse(self.marketing_version) + if self.marketing_version.startswith("12"): + return parsed_version >= packaging.version.parse("12.7.4") + if self.marketing_version.startswith("13"): + return parsed_version >= packaging.version.parse("13.6.5") + if self.marketing_version.startswith("14"): + return parsed_version >= packaging.version.parse("14.4") + + return False + + def _generate_sys_patch_dict(self): """ Generates the sys_patch_dict dictionary @@ -1151,7 +1178,7 @@ class SystemPatchDictionary(): }, "Install": { "/usr/libexec": { - "airportd": "11.7.10" if self.os_float < self.macOS_14_4 else "11.7.10-23.4", + "airportd": "11.7.10" if self.affected_by_cve_2024_23227 is False else "11.7.10-Sandbox", }, "/System/Library/CoreServices": { "WiFiAgent.app": "11.7.10", @@ -1207,16 +1234,16 @@ class SystemPatchDictionary(): }, "Install": { "/usr/libexec": { - "airportd": "13.6.2" if self.os_float < self.macOS_14_4 else "13.6.2-23.4", - "wifip2pd": "13.6.2", + "airportd": "13.6.5", + "wifip2pd": "13.6.5", }, "/System/Library/Frameworks": { - "CoreWLAN.framework": "13.6.2", + "CoreWLAN.framework": "13.6.5", }, "/System/Library/PrivateFrameworks": { - "CoreWiFi.framework": "13.6.2", - "IO80211.framework": "13.6.2", - "WiFiPeerToPeer.framework": "13.6.2", + "CoreWiFi.framework": "13.6.5", + "IO80211.framework": "13.6.5", + "WiFiPeerToPeer.framework": "13.6.5", }, }, }, @@ -1308,7 +1335,7 @@ class SystemPatchDictionary(): }, "Install": { "/System/Library/Extensions": { - "IOUSBHostFamily.kext": "12.6.2", + "IOUSBHostFamily.kext": "12.6.2" if self.os_major < self.macOS_14_4 else "12.6.2-23.4", }, }, }, diff --git a/resources/constants.py b/resources/constants.py index d2abb2ebb..493ee5972 100644 --- a/resources/constants.py +++ b/resources/constants.py @@ -14,7 +14,7 @@ class Constants: def __init__(self) -> None: # Patcher Versioning self.patcher_version: str = "1.4.2" # OpenCore-Legacy-Patcher - self.patcher_support_pkg_version: str = "1.4.7" # PatcherSupportPkg + self.patcher_support_pkg_version: str = "1.4.8" # PatcherSupportPkg self.copyright_date: str = "Copyright © 2020-2024 Dortania" self.patcher_name: str = "OpenCore Legacy Patcher" diff --git a/resources/sys_patch/sys_patch_generate.py b/resources/sys_patch/sys_patch_generate.py index 60a0bd0b0..ea8010771 100644 --- a/resources/sys_patch/sys_patch_generate.py +++ b/resources/sys_patch/sys_patch_generate.py @@ -35,7 +35,7 @@ class GenerateRootPatchSets: dict: Dictionary of patches to be applied from sys_patch_dict.py """ - all_hardware_patchset: dict = sys_patch_dict.SystemPatchDictionary(self.constants.detected_os, self.constants.detected_os_minor, self.constants.legacy_accel_support).patchset_dict + all_hardware_patchset: dict = sys_patch_dict.SystemPatchDictionary(self.constants.detected_os, self.constants.detected_os_minor, self.constants.legacy_accel_support, self.constants.detected_os_version).patchset_dict required_patches: dict = {} utilities.cls() diff --git a/resources/validation.py b/resources/validation.py index 32f3360f1..4385a29dd 100644 --- a/resources/validation.py +++ b/resources/validation.py @@ -104,7 +104,7 @@ class PatcherValidation: minor_kernel (int): Minor kernel version """ - patchset = sys_patch_dict.SystemPatchDictionary(major_kernel, minor_kernel, self.constants.legacy_accel_support).patchset_dict + patchset = sys_patch_dict.SystemPatchDictionary(major_kernel, minor_kernel, self.constants.legacy_accel_support, self.constants.detected_os_version).patchset_dict host_os_float = float(f"{major_kernel}.{minor_kernel}") for patch_subject in patchset: