Skip to content
This repository has been archived by the owner on Jun 27, 2018. It is now read-only.

Commit

Permalink
Sync user defined boot-args with NVRAM boot-args once at first boot.
Browse files Browse the repository at this point in the history
Sync the way to set BooterConfig & CsrActiveConfig to NVRAM / boot.efi
(-D NO_NVRAM_SIP).
More Apple way in internal disabling SIP.
Replace ambiguous SMBIOS->SmUUIDConfig to: SMBIOS->SystemID (fake
"system-id") & SMBIOS->PlatformUUID (fixed "PlatformUUID").
Ignore RSDT_TABLE, only support ACPI ver 2 & up with XSDT_TABLE.
  • Loading branch information
cecekpawon committed Jul 24, 2017
1 parent 8b0f452 commit cf50f5f
Show file tree
Hide file tree
Showing 13 changed files with 490 additions and 646 deletions.
10 changes: 5 additions & 5 deletions Application/Clover/Main.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ RefitMain (
DBG ("UnicodeCollation Status=%r\n", Status);
}

GetDefaultConfig (); // Init gSettings
InitializeSettings (); // Init gSettings

if (FileExists (SelfRootDir, DEV_MARK)) {
gSettings.Dev = TRUE;
Expand Down Expand Up @@ -297,6 +297,9 @@ RefitMain (
AfterTool = FALSE;
gGuiIsReady = TRUE;

// get boot-args
SyncBootArgsFromNvram ();

MainMenu.TimeoutSeconds = (!gSettings.FastBoot && (gSettings.Timeout >= 0)) ? gSettings.Timeout : 0;

DrawLoadMessage (L"Scan Entries");
Expand All @@ -311,9 +314,6 @@ RefitMain (

ScanVolumes ();

// get boot-args
SyncBootArgsFromNvram ();

if (!gSettings.FastBoot) {
CHAR16 *TmpArgs;

Expand All @@ -329,7 +329,7 @@ RefitMain (
gThemeChanged = FALSE;
MsgLog ("Choosing theme: %s\n", GlobalConfig.Theme);

TmpArgs = PoolPrint (L"%a ", gSettings.BootArgs);
TmpArgs = PoolPrint (L"%a", gSettings.BootArgs);
gSettings.OptionsBits = EncodeOptions (TmpArgs);
FreePool (TmpArgs);

Expand Down
40 changes: 29 additions & 11 deletions Include/Library/Platform/Platform.h
Original file line number Diff line number Diff line change
Expand Up @@ -201,8 +201,15 @@ Headers collection for procedures
#define CLOVER_BUILDINFOS_STR "Unknown"
#endif

#define DEF_NOSIP_CSR_ACTIVE_CONFIG (CSR_ALLOW_APPLE_INTERNAL + CSR_ALLOW_UNRESTRICTED_NVRAM + CSR_ALLOW_DEVICE_CONFIGURATION + CSR_ALLOW_ANY_RECOVERY_OS)
#define DEF_NOSIP_BOOTER_CONFIG (kBootArgsFlagCSRActiveConfig + kBootArgsFlagCSRConfigMode + kBootArgsFlagCSRBoot)
#define DEF_NOSIP_CSR_ACTIVE_CONFIG ( \
CSR_ALLOW_UNTRUSTED_KEXTS | \
CSR_ALLOW_UNRESTRICTED_FS | \
CSR_ALLOW_TASK_FOR_PID | \
CSR_ALLOW_APPLE_INTERNAL | \
CSR_ALLOW_UNRESTRICTED_DTRACE | \
CSR_ALLOW_UNRESTRICTED_NVRAM \
) // 0x77, 0x67 without CSR_ALLOW_APPLE_INTERNAL
#define DEF_NOSIP_BOOTER_CONFIG (kBootArgsFlagCSRActiveConfig /* + kBootArgsFlagCSRConfigMode */ + kBootArgsFlagCSRBoot)

#define DEF_DISK_TEMPLATE L"$label $platform on $path"
#define DEF_DARWIN_DISK_TEMPLATE L"$platform $label $version ($build) on $path"
Expand Down Expand Up @@ -898,8 +905,9 @@ typedef struct {
CHAR8 ProductName[64];
CHAR8 VersionNr[64];
CHAR8 SerialNr[64];
EFI_GUID SmUUID;
BOOLEAN SmUUIDConfig;
EFI_GUID OemSystemID;
EFI_GUID SystemID;
EFI_GUID PlatformUUID;
CHAR8 FamilyName[64];
CHAR8 OEMProduct[64];
CHAR8 OEMVendor[64];
Expand Down Expand Up @@ -984,7 +992,6 @@ typedef struct {

//Injections
BOOLEAN EFIStringInjector;
//BOOLEAN InjectSystemID;
BOOLEAN NoDefaultProperties;

BOOLEAN ReuseFFFF;
Expand Down Expand Up @@ -1236,6 +1243,10 @@ FixBiosDsdt (
BOOLEAN Patched
);


VOID
DumpFixBiosDsdt ();

//VOID
//GetBiosRegions (
// EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *fadt
Expand Down Expand Up @@ -1298,9 +1309,9 @@ FillInputs (
VOID
ApplyInputs ();

VOID
ToAppleGuid (
IN OUT EFI_GUID *AppleGuid
EFI_GUID *
SwapGuid (
IN EFI_GUID Guid
);

BOOLEAN
Expand All @@ -1325,7 +1336,7 @@ GetCrc32 (
);

VOID
GetDefaultConfig ();
InitializeSettings ();

VOID
SyncDefaultSettings ();
Expand Down Expand Up @@ -1380,7 +1391,9 @@ SetFSInjection (
);

VOID
ReadCsrCfg ();
ReadCsrCfg (
IN LOADER_ENTRY *Entry
);

//VOID
//ParseLoadOptions (
Expand Down Expand Up @@ -1486,7 +1499,9 @@ SaveDarwinLog ();

EFI_STATUS
EFIAPI
SetVariablesForOSX ();
SetVariablesForOSX (
IN LOADER_ENTRY *Entry
);

VOID
EFIAPI
Expand Down Expand Up @@ -1613,6 +1628,9 @@ GetPropertyInteger (
INTN Default
);

VOID
ReInitializeSettings ();

EFI_STATUS
SaveSettings ();

Expand Down
16 changes: 10 additions & 6 deletions Library/Common/Lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -2376,13 +2376,17 @@ TimeCompare (
return Comparison;
}

VOID
ToAppleGuid (
IN OUT EFI_GUID *AppleGuid
EFI_GUID *
SwapGuid (
IN EFI_GUID Guid
) {
(*AppleGuid).Data1 = SwapBytes32 ((*AppleGuid).Data1);
(*AppleGuid).Data2 = SwapBytes16 ((*AppleGuid).Data2);
(*AppleGuid).Data3 = SwapBytes16 ((*AppleGuid).Data3);
IN EFI_GUID *NewGuid = AllocateCopyPool (sizeof (EFI_GUID), &Guid);

(*NewGuid).Data1 = SwapBytes32 ((*NewGuid).Data1);
(*NewGuid).Data2 = SwapBytes16 ((*NewGuid).Data2);
(*NewGuid).Data3 = SwapBytes16 ((*NewGuid).Data3);

return NewGuid;
}

/** Returns TRUE is Str is ascii Guid in format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx */
Expand Down
113 changes: 94 additions & 19 deletions Library/Entry/Loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -2551,21 +2551,7 @@ StartLoader (
MsgLog (" %a\n", Entry->OSVersion);
}

if (OSX_GT (Entry->OSVersion, DARWIN_OS_VER_STR_ELCAPITAN)) {
//if (
// (Entry->OSVersionMajor > DARWIN_OS_VER_MAJOR_10) ||
// (
// (Entry->OSVersionMajor == DARWIN_OS_VER_MAJOR_10) &&
// (Entry->OSVersionMinor > DARWIN_OS_VER_MINOR_ELCAPITAN)
// )
//) {
if (BIT_ISSET (Entry->Flags, OSFLAG_NOSIP)) {
gSettings.CsrActiveConfig = (UINT32)DEF_NOSIP_CSR_ACTIVE_CONFIG;
gSettings.BooterConfig = (UINT16)DEF_NOSIP_BOOTER_CONFIG;
}

ReadCsrCfg ();
}
ReadCsrCfg (Entry);

FilterKextPatches (Entry);

Expand Down Expand Up @@ -2630,7 +2616,7 @@ StartLoader (
SetFSInjection (Entry);
//PauseForKey (L"SetFSInjection");

SetVariablesForOSX ();
SetVariablesForOSX (Entry);

EventsInitialize (Entry);

Expand Down Expand Up @@ -2674,14 +2660,12 @@ StartLoader (
//DBG ("Closing events for Windows\n");

PatchACPI (/* FALSE,*/ Entry->LoaderType);
//PauseForKey (L"continue");

} else if (OSTYPE_IS_LINUX_GLOB (Entry->LoaderType)) {
//DBG ("Closing events for Linux\n");

//FinalizeSmbios ();
PatchACPI (/* FALSE,*/ Entry->LoaderType);
//PauseForKey (L"continue");
}

SaveOemDsdt (FALSE, Entry->LoaderType);
Expand All @@ -2695,6 +2679,31 @@ StartLoader (
RemoveStartupDiskVolume ();
}

#if 0
if (BIT_ISSET (Entry->Flags, OSFLAG_USEGRAPHICS)) DBG ("- %a\n", "OSFLAG_USEGRAPHICS");
if (BIT_ISSET (Entry->Flags, OSFLAG_WITHKEXTS)) DBG ("- %a\n", "OSFLAG_WITHKEXTS");
if (BIT_ISSET (Entry->Flags, OSFLAG_CHECKFAKESMC)) DBG ("- %a\n", "OSFLAG_CHECKFAKESMC");
if (BIT_ISSET (Entry->Flags, OSFLAG_NOCACHES)) DBG ("- %a\n", "OSFLAG_NOCACHES");
if (BIT_ISSET (Entry->Flags, OSFLAG_NODEFAULTARGS)) DBG ("- %a\n", "OSFLAG_NODEFAULTARGS");
if (BIT_ISSET (Entry->Flags, OSFLAG_NODEFAULTMENU)) DBG ("- %a\n", "OSFLAG_NODEFAULTMENU");
if (BIT_ISSET (Entry->Flags, OSFLAG_HIDDEN)) DBG ("- %a\n", "OSFLAG_HIDDEN");
if (BIT_ISSET (Entry->Flags, OSFLAG_DISABLED)) DBG ("- %a\n", "OSFLAG_DISABLED");
if (BIT_ISSET (Entry->Flags, OSFLAG_HIBERNATED)) DBG ("- %a\n", "OSFLAG_HIBERNATED");
if (BIT_ISSET (Entry->Flags, OSFLAG_NOSIP)) DBG ("- %a\n", "OSFLAG_NOSIP");
if (BIT_ISSET (Entry->Flags, OSFLAG_DBGPATCHES)) DBG ("- %a\n", "OSFLAG_DBGPATCHES");
if (BIT_ISSET (Entry->Flags, OSFLAG_ALLOW_KEXT_PATCHES)) DBG ("- %a\n", "OSFLAG_ALLOW_KEXT_PATCHES");
if (BIT_ISSET (Entry->Flags, OSFLAG_ALLOW_KERNEL_PATCHES)) DBG ("- %a\n", "OSFLAG_ALLOW_KERNEL_PATCHES");
if (BIT_ISSET (Entry->Flags, OSFLAG_ALLOW_BOOTER_PATCHES)) DBG ("- %a\n", "OSFLAG_ALLOW_BOOTER_PATCHES");
if (BIT_ISSET (Entry->Flags, OPT_VERBOSE)) DBG ("- %a\n", "OPT_VERBOSE");
if (BIT_ISSET (Entry->Flags, OPT_SINGLE_USER)) DBG ("- %a\n", "OPT_SINGLE_USER");
if (BIT_ISSET (Entry->Flags, OPT_SAFE)) DBG ("- %a\n", "OPT_SAFE");
if (BIT_ISSET (Entry->Flags, OPT_QUIET)) DBG ("- %a\n", "OPT_QUIET");
if (BIT_ISSET (Entry->Flags, OPT_SPLASH)) DBG ("- %a\n", "OPT_SPLASH");
if (BIT_ISSET (Entry->Flags, OPT_NOMODESET)) DBG ("- %a\n", "OPT_NOMODESET");
if (BIT_ISSET (Entry->Flags, OPT_HDD)) DBG ("- %a\n", "OPT_HDD");
if (BIT_ISSET (Entry->Flags, OPT_CDROM)) DBG ("- %a\n", "OPT_CDROM");
#endif

// re-Unified
gSettings.OptionsBits = Entry->Flags;
DecodeOptions (Entry);
Expand Down Expand Up @@ -2863,7 +2872,7 @@ SetFSInjection (
}

VOID
ReadCsrCfg () {
PrintCsrCfg () {
UINT32 csrCfg = gSettings.CsrActiveConfig & CSR_VALID_FLAGS;
UINTN Len = SVALUE_MAX_SIZE;
CHAR16 *csrLog = AllocateZeroPool (Len);
Expand Down Expand Up @@ -2897,3 +2906,69 @@ ReadCsrCfg () {

FreePool (csrLog);
}

VOID
ReadCsrCfg (
IN LOADER_ENTRY *Entry
) {
UINT16 FixFlags = 0xFFFF;
UINT32 FixCsrActiveConfig = 0xFFFF;
BOOLEAN IsNoSIP = FALSE;

if (OSX_LT (Entry->OSVersion, DARWIN_OS_VER_STR_ELCAPITAN)) {
gSettings.CsrActiveConfig = 0xFFFF;
gSettings.BooterConfig = 0xFFFF;
return;
}

IsNoSIP = BIT_ISSET (Entry->Flags, OSFLAG_NOSIP);

if (IsNoSIP) {
goto NoSIP;
}

// user defined
if (gSettings.BooterConfig != 0xFFFF) {
FixFlags = gSettings.BooterConfig;
}

if (gSettings.CsrActiveConfig != 0xFFFF) {
FixCsrActiveConfig = gSettings.CsrActiveConfig;
}

switch (Entry->LoaderType) {
case OSTYPE_DARWIN_RECOVERY:
case OSTYPE_DARWIN_INSTALLER:
IsNoSIP = TRUE;
break;
default:
break;
}

NoSIP:

if (IsNoSIP) {
gSettings.BooterConfig = DEF_NOSIP_BOOTER_CONFIG;
gSettings.CsrActiveConfig = DEF_NOSIP_CSR_ACTIVE_CONFIG;
goto Finish;
}

if (FixCsrActiveConfig != 0xFFFF) {
if (FixFlags == 0xFFFF) {
FixFlags = 0;
}

FixFlags |= kBootArgsFlagCSRActiveConfig;

if (BIT_ISSET (FixCsrActiveConfig, CSR_ALLOW_DEVICE_CONFIGURATION)) {
FixFlags |= kBootArgsFlagCSRConfigMode;
}
}

gSettings.BooterConfig = FixFlags;
gSettings.CsrActiveConfig = FixCsrActiveConfig;

Finish:

PrintCsrCfg ();
}
Loading

0 comments on commit cf50f5f

Please sign in to comment.