From 6f91e974db8713b9879a5b4bd5a129d2fe38db26 Mon Sep 17 00:00:00 2001 From: vit9696 Date: Wed, 10 Apr 2019 12:37:33 +0300 Subject: [PATCH] OpenCore: Connect HaltLevel, DisplayLevel, ExposeBootPath Misc preferences --- Application/Bootstrap/Bootstrap.c | 19 +++++-- Docs/Configuration.pdf | Bin 243133 -> 245277 bytes Docs/Configuration.tex | 80 +++++++++++++++++++++++++----- Docs/Sample.plist | 11 +++- Include/OpenCore.h | 2 + Include/Protocol/OcBootstrap.h | 6 ++- Platform/OpenCore/OpenCore.c | 73 +++++++++++++++++++++++---- Platform/OpenCore/OpenCore.inf | 3 ++ Platform/OpenCore/OpenCoreNvram.c | 6 +-- 9 files changed, 165 insertions(+), 35 deletions(-) diff --git a/Application/Bootstrap/Bootstrap.c b/Application/Bootstrap/Bootstrap.c index 34bd84ba..89ddad70 100644 --- a/Application/Bootstrap/Bootstrap.c +++ b/Application/Bootstrap/Bootstrap.c @@ -94,7 +94,8 @@ LoadOpenCore ( STATIC VOID StartOpenCore ( - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem, + IN EFI_HANDLE LoadHandle ) { EFI_STATUS Status; @@ -112,7 +113,17 @@ StartOpenCore ( return; } - Bootstrap->ReRun (Bootstrap, FileSystem); + if (Bootstrap->Revision != OC_BOOTSTRAP_PROTOCOL_REVISION) { + DEBUG (( + DEBUG_ERROR, + "BS: Unsupported bootstrap protocol %u vs %u\n", + Bootstrap->Revision, + OC_BOOTSTRAP_PROTOCOL_REVISION + )); + return; + } + + Bootstrap->ReRun (Bootstrap, FileSystem, LoadHandle); } EFI_STATUS @@ -168,7 +179,7 @@ UefiMain ( // DEBUG ((DEBUG_INFO, "BS: Trying to start loaded OpenCore image...\n")); - StartOpenCore (FileSystem); + StartOpenCore (FileSystem, LoadedImage->FilePath); DEBUG ((DEBUG_INFO, "BS: Trying to load OpenCore image...\n")); Status = LoadOpenCore (FileSystem, ImageHandle, &OcImageHandle); @@ -177,7 +188,7 @@ UefiMain ( return EFI_NOT_FOUND; } - StartOpenCore (FileSystem); + StartOpenCore (FileSystem, LoadedImage->FilePath); DEBUG ((DEBUG_ERROR, "BS: Failed to start OpenCore image...\n")); return EFI_NOT_FOUND; diff --git a/Docs/Configuration.pdf b/Docs/Configuration.pdf index bc94d68ed3a3357cf90810c17c69ad1ab9ce672b..f7d0fdea0704c23d7f4fd8da7f73a086c9d331af 100644 GIT binary patch delta 31019 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 diff --git a/Docs/Configuration.tex b/Docs/Configuration.tex index 0187c6d8..a0ce3cce 100644 --- a/Docs/Configuration.tex +++ b/Docs/Configuration.tex @@ -485,7 +485,7 @@ Add \texttt{.clang\_complete} file with similar content to your UDK root: -Wno-missing-field-initializers -Wno-tautological-compare -Wno-sign-compare --Wno-varargs +-Wno-varargs -Wno-unused-const-variable \end{lstlisting} @@ -1165,6 +1165,13 @@ behaviour that does not go to any other sections \textbf{Description}: Apply debug configuration described in \hyperref[miscdebugprops]{Debug Properties} section below. +\item + \texttt{Security}\\ + \textbf{Type}: \texttt{plist\ dict}\\ + \textbf{Description}: Apply security configuration described in + \hyperref[miscsecurityprops]{Security Properties} section below. + + \end{enumerate} \subsection{Debug Properties}\label{miscdebugprops} @@ -1179,37 +1186,72 @@ behaviour that does not go to any other sections every printed line of visible logging output like console, Data Hub, or serial port. +\item + \texttt{DisplayLevel}\\ + \textbf{Type}: \texttt{plist\ integer}, 64 bit\\ + \textbf{Default value}: \texttt{0}\\ + \textbf{Description}: EDK II debug level bitmask (sum) showed onscreen. + Unless \texttt{Target} enables console (onscreen) printing, + onscreen debug output will not be visible. The following levels + are supported (discover more in + \href{https://github.com/tianocore/edk2/blob/UDK2018/MdePkg/Include/Library/DebugLib.h}{DebugLib.h}): + + \begin{itemize} + \tightlist + \item \texttt{0x00000002} --- \texttt{DEBUG\_WARN} in \texttt{DEBUG}, + \texttt{NOOPT}, \texttt{RELEASE}. + \item \texttt{0x00000040} --- \texttt{DEBUG\_INFO} in \texttt{DEBUG}, + \texttt{NOOPT}. + \item \texttt{0x00400000} --- \texttt{DEBUG\_VERBOSE} in custom builds. + \item \texttt{0x80000000} --- \texttt{DEBUG\_ERROR} in \texttt{DEBUG}, + \texttt{NOOPT}, \texttt{RELEASE}. + \end{itemize} + +\item + \texttt{ExposeBootPath}\\ + \textbf{Type}: \texttt{plist\ boolean}\\ + \textbf{Default value}: \texttt{false}\\ + \textbf{Description}: Expose printable booter path to OpenCore.efi or its booter + (depending on the load order) as an UEFI variable. + + To obtain booter path use the following command in macOS: +\begin{lstlisting}[label=nvrampath, style=ocbash] +nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:boot-path +\end{lstlisting} + + \item \texttt{Target}\\ \textbf{Type}: \texttt{plist\ integer}\\ \textbf{Default value}: \texttt{0}\\ \textbf{Description}: A bitmask (sum) of enabled logging targets. By default all the logging output is hidden, so this option is - required to be set when debugging is necessary. The following - logging targets are supported: + required to be set when debugging is necessary. + + The following logging targets are supported: \begin{itemize} \tightlist - \item \texttt{ 1} --- Enable logging, otherwise all log is discarded. - \item \texttt{ 2} --- Enable basic console (onscreen) logging. - \item \texttt{ 4} --- Enable logging to Data Hub. - \item \texttt{ 8} --- Enable serial port logging. - \item \texttt{16} --- Enable UEFI variable logging. - \item \texttt{32} --- Enable non-volatile UEFI variable logging. - \item \texttt{64} --- Enable logging to file. + \item \texttt{0x01} --- Enable logging, otherwise all log is discarded. + \item \texttt{0x02} --- Enable basic console (onscreen) logging. + \item \texttt{0x04} --- Enable logging to Data Hub. + \item \texttt{0x08} --- Enable serial port logging. + \item \texttt{0x10} --- Enable UEFI variable logging. + \item \texttt{0x20} --- Enable non-volatile UEFI variable logging. + \item \texttt{0x40} --- Enable logging to file. \end{itemize} - \emph{Note}: Console logging prints less than all the other variants. + Console logging prints less than all the other variants. Depending on the build type (\texttt{RELEASE}, \texttt{DEBUG}, or \texttt{NOOPT}) different amount of logging may be read (from least to most). - \emph{Note}: To obtain Data Hub log use the following command + To obtain Data Hub log use the following command in macOS: \begin{lstlisting}[label=dhublog, style=ocbash] ioreg -lw0 -p IODeviceTree | grep boot-log | sort | sed 's/.*<\(.*\)>.*/\1/' | xxd -r -p \end{lstlisting} - \emph{Note}: UEFI variable log may get truncated on some firmwares. + UEFI variable log may get truncated on some firmwares. Using non-volatile flag will write the log to NVRAM flash after every printed line. To obtain UEFI variable log use the following command in macOS: @@ -1222,6 +1264,18 @@ nvram 4D1FDA02-38C7-4A6A-9CC6-4BCCA8B30102:boot-log | \ \end{enumerate} +\subsection{Security Properties}\label{miscsecurityprops} + +\begin{enumerate} +\item + \texttt{HaltLevel}\\ + \textbf{Type}: \texttt{plist\ integer}, 64 bit\\ + \textbf{Default value}: \texttt{0x80000000} (\texttt{DEBUG\_ERROR})\\ + \textbf{Description}: EDK II debug level bitmask (sum) causing CPU to + halt (stop execution) after obtaining a message of \texttt{HaltLevel}. + Possible values match \texttt{DisplayLevel} values. +\end{enumerate} + \section{NVRAM}\label{nvram} \subsection{Introduction}\label{nvramintro} diff --git a/Docs/Sample.plist b/Docs/Sample.plist index 8cbd0e7e..0ed22304 100755 --- a/Docs/Sample.plist +++ b/Docs/Sample.plist @@ -435,9 +435,18 @@ Delay 0 + DisplayLevel + 2147483650 + ExposeBootPath + Target 7 + Security + + HaltLevel + 2147483648 + NVRAM @@ -534,7 +543,7 @@ BIOSVersion 142.0.0.0.0 BIOSReleaseDate - 02/14/19 + 02/14/2019 SystemManufacturer SystemProductName diff --git a/Include/OpenCore.h b/Include/OpenCore.h index feef31aa..a51ed33a 100644 --- a/Include/OpenCore.h +++ b/Include/OpenCore.h @@ -31,6 +31,8 @@ #define OPEN_CORE_KEXT_PATH L"Kexts\\" +#define OPEN_CORE_NVRAM_ATTR (EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS) + /** Load ACPI compatibility support like custom tables. diff --git a/Include/Protocol/OcBootstrap.h b/Include/Protocol/OcBootstrap.h index 7906e77b..04e36321 100644 --- a/Include/Protocol/OcBootstrap.h +++ b/Include/Protocol/OcBootstrap.h @@ -28,7 +28,7 @@ /// /// OC_BOOTSTRAP_PROTOCOL revision /// -#define OC_BOOTSTRAP_PROTOCOL_REVISION 1 +#define OC_BOOTSTRAP_PROTOCOL_REVISION 2 /// /// Forward declaration of OC_BOOTSTRAP_PROTOCOL structure. @@ -40,12 +40,14 @@ typedef struct OC_BOOTSTRAP_PROTOCOL_ OC_BOOTSTRAP_PROTOCOL; @param[in] This This protocol. @param[in] FileSystem File system to bootstrap in. + @param[in] LoadPath EFI device path to loaded image. **/ typedef VOID (EFIAPI *OC_BOOTSTRAP_RERUN) ( IN OC_BOOTSTRAP_PROTOCOL *This, - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem, + IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL ); /// diff --git a/Platform/OpenCore/OpenCore.c b/Platform/OpenCore/OpenCore.c index 2c16f763..f3ebf9a0 100644 --- a/Platform/OpenCore/OpenCore.c +++ b/Platform/OpenCore/OpenCore.c @@ -15,6 +15,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include +#include + #include #include #include @@ -28,6 +30,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include #include +#include #include #include #include @@ -142,14 +145,57 @@ OcStartImage ( STATIC VOID -OcMain ( - IN OC_STORAGE_CONTEXT *Storage +OcStoreLoadPath ( + IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL ) { - EFI_STATUS Status; - CHAR8 *Config; - UINT32 ConfigSize; - OC_CPU_INFO CpuInfo; + EFI_STATUS Status; + CHAR16 *DevicePath; + CHAR8 OutPath[256]; + + if (LoadPath != NULL) { + DevicePath = ConvertDevicePathToText (LoadPath, FALSE, FALSE); + if (DevicePath != NULL) { + AsciiSPrint (OutPath, sizeof (OutPath), "%s", DevicePath); + FreePool (DevicePath); + } else { + LoadPath = NULL; + } + } + + if (LoadPath == NULL) { + AsciiSPrint (OutPath, sizeof (OutPath), "Unknown"); + } + + Status = gRT->SetVariable ( + OC_LOG_VARIABLE_PATH, + &gOcLogVariableGuid, + OPEN_CORE_NVRAM_ATTR, + AsciiStrSize (OutPath), + OutPath + ); + + DEBUG (( + EFI_ERROR (Status) ? DEBUG_WARN : DEBUG_INFO, + "OC: Setting NVRAM %g:%a = %a - %r\n", + &gOcLogVariableGuid, + OC_LOG_VARIABLE_PATH, + OutPath, + Status + )); +} + +STATIC +VOID +OcMain ( + IN OC_STORAGE_CONTEXT *Storage, + IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL + ) +{ + EFI_STATUS Status; + CHAR8 *Config; + UINT32 ConfigSize; + OC_CPU_INFO CpuInfo; Config = OcStorageReadFileUnicode ( Storage, @@ -172,9 +218,15 @@ OcMain ( OcConfigureLogProtocol ( mOpenCoreConfiguration.Misc.Debug.Target, - mOpenCoreConfiguration.Misc.Debug.Delay + mOpenCoreConfiguration.Misc.Debug.Delay, + (UINTN) mOpenCoreConfiguration.Misc.Debug.DisplayLevel, + (UINTN) mOpenCoreConfiguration.Misc.Security.HaltLevel ); + if (mOpenCoreConfiguration.Misc.Debug.ExposeBootPath) { + OcStoreLoadPath (LoadPath); + } + OcCpuScanProcessor (&CpuInfo); OcLoadUefiSupport (Storage, &mOpenCoreConfiguration, &CpuInfo); OcLoadPlatformSupport (&mOpenCoreConfiguration, &CpuInfo); @@ -206,7 +258,8 @@ VOID EFIAPI OcBootstrapRerun ( IN OC_BOOTSTRAP_PROTOCOL *This, - IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem + IN EFI_SIMPLE_FILE_SYSTEM_PROTOCOL *FileSystem, + IN EFI_DEVICE_PATH_PROTOCOL *LoadPath OPTIONAL ) { EFI_STATUS Status; @@ -229,7 +282,7 @@ OcBootstrapRerun ( return; } - OcMain (&mOpenCoreStorage); + OcMain (&mOpenCoreStorage, LoadPath); OcStorageFree (&mOpenCoreStorage); } @@ -317,7 +370,7 @@ UefiMain ( // Return success in either case to let rerun work afterwards. // if (FileSystem != NULL) { - mOpenCoreBootStrap.ReRun (&mOpenCoreBootStrap, FileSystem); + mOpenCoreBootStrap.ReRun (&mOpenCoreBootStrap, FileSystem, LoadedImage->FilePath); DEBUG ((DEBUG_ERROR, "OC: Failed to boot\n")); } else { DEBUG ((DEBUG_ERROR, "OC: Failed to locate file system\n")); diff --git a/Platform/OpenCore/OpenCore.inf b/Platform/OpenCore/OpenCore.inf index 4c8f4dda..b2a3d2e1 100644 --- a/Platform/OpenCore/OpenCore.inf +++ b/Platform/OpenCore/OpenCore.inf @@ -51,6 +51,9 @@ MdePkg/MdePkg.dec MdeModulePkg/MdeModulePkg.dec +[Guids] + gOcLogVariableGuid + [Protocols] gEfiDevicePathProtocolGuid ## CONSUMES gEfiDevicePathProtocolGuid ## CONSUMES diff --git a/Platform/OpenCore/OpenCoreNvram.c b/Platform/OpenCore/OpenCoreNvram.c index 424ab461..cda725b3 100644 --- a/Platform/OpenCore/OpenCoreNvram.c +++ b/Platform/OpenCore/OpenCoreNvram.c @@ -23,10 +23,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. #include #include -STATIC -CONST UINT32 -mDefaultAttributes = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS; - VOID OcLoadNvramSupport ( IN OC_GLOBAL_CONFIG *Config @@ -131,7 +127,7 @@ OcLoadNvramSupport ( Status = gRT->SetVariable ( UnicodeVariableName, &VariableGuid, - mDefaultAttributes, + OPEN_CORE_NVRAM_ATTR, VariableSize, VariableData );