Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
OpenCorePKG_MOD
提交
e2f9022a
O
OpenCorePKG_MOD
项目概览
btwise
/
OpenCorePKG_MOD
通知
26
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
OpenCorePKG_MOD
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e2f9022a
编写于
4月 03, 2020
作者:
V
vit9696
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
OcAppleBootCompatLib: Also wrap AllocatePool
上级
bd17802d
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
61 addition
and
27 deletion
+61
-27
Library/OcAppleBootCompatLib/BootCompatInternal.h
Library/OcAppleBootCompatLib/BootCompatInternal.h
+5
-0
Library/OcAppleBootCompatLib/ServiceOverrides.c
Library/OcAppleBootCompatLib/ServiceOverrides.c
+56
-27
未找到文件。
Library/OcAppleBootCompatLib/BootCompatInternal.h
浏览文件 @
e2f9022a
...
...
@@ -142,6 +142,11 @@ typedef struct UEFI_SERVICES_POINTERS_ {
///
EFI_ALLOCATE_PAGES
AllocatePages
;
///
/// Original pool allocator. We override it to fix memory
/// attributes table as it is updated after pool alloc.
///
EFI_ALLOCATE_POOL
AllocatePool
;
///
/// Original memory map function. We override it to make
/// memory map shrinking and CSM region protection.
///
...
...
Library/OcAppleBootCompatLib/ServiceOverrides.c
浏览文件 @
e2f9022a
...
...
@@ -34,6 +34,30 @@
#include <Protocol/OcFirmwareRuntime.h>
/**
Helper function to mark OpenRuntime as executable with proper permissions.
@param[in] BootCompat Boot compatibility context.
**/
STATIC
VOID
FixRuntimeAttributes
(
IN
BOOT_COMPAT_CONTEXT
*
BootCompat
)
{
EFI_STATUS
Status
;
EFI_PHYSICAL_ADDRESS
Address
;
UINTN
Pages
;
if
(
BootCompat
->
Settings
.
SyncRuntimePermissions
&&
BootCompat
->
ServiceState
.
FwRuntime
!=
NULL
)
{
Status
=
BootCompat
->
ServiceState
.
FwRuntime
->
GetExecArea
(
&
Address
,
&
Pages
);
if
(
!
EFI_ERROR
(
Status
))
{
OcUpdateAttributes
(
Address
,
EfiRuntimeServicesCode
,
EFI_MEMORY_RO
,
EFI_MEMORY_XP
);
}
}
}
/**
Helper function to call ExitBootServices that can handle outdated MapKey issues.
...
...
@@ -275,8 +299,6 @@ OcAllocatePages (
{
EFI_STATUS
Status
;
BOOT_COMPAT_CONTEXT
*
BootCompat
;
EFI_PHYSICAL_ADDRESS
Address
;
UINTN
Pages
;
BOOLEAN
IsPerfAlloc
;
BootCompat
=
GetBootCompatContext
();
...
...
@@ -302,13 +324,7 @@ OcAllocatePages (
);
if
(
!
EFI_ERROR
(
Status
))
{
if
(
BootCompat
->
Settings
.
SyncRuntimePermissions
&&
BootCompat
->
ServiceState
.
FwRuntime
!=
NULL
)
{
Status
=
BootCompat
->
ServiceState
.
FwRuntime
->
GetExecArea
(
&
Address
,
&
Pages
);
if
(
!
EFI_ERROR
(
Status
))
{
OcUpdateAttributes
(
Address
,
EfiRuntimeServicesCode
,
EFI_MEMORY_RO
,
EFI_MEMORY_XP
);
}
}
FixRuntimeAttributes
(
BootCompat
);
if
(
BootCompat
->
ServiceState
.
AppleBootNestedCount
>
0
)
{
if
(
IsPerfAlloc
)
{
...
...
@@ -341,6 +357,33 @@ OcAllocatePages (
return
Status
;
}
STATIC
EFI_STATUS
EFIAPI
OcAllocatePool
(
IN
EFI_MEMORY_TYPE
PoolType
,
IN
UINTN
Size
,
OUT
VOID
**
Buffer
)
{
EFI_STATUS
Status
;
BOOT_COMPAT_CONTEXT
*
BootCompat
;
BootCompat
=
GetBootCompatContext
();
Status
=
BootCompat
->
ServicePtrs
.
AllocatePool
(
PoolType
,
Size
,
Buffer
);
if
(
!
EFI_ERROR
(
Status
))
{
FixRuntimeAttributes
(
BootCompat
);
}
return
Status
;
}
/**
UEFI Boot Services GetMemoryMap override.
Returns shrinked memory map as XNU can handle up to PMAP_MEMORY_REGIONS_SIZE (128) entries.
...
...
@@ -472,8 +515,6 @@ OcStartImage (
BOOT_COMPAT_CONTEXT
*
BootCompat
;
OC_FWRT_CONFIG
Config
;
UINTN
DataSize
;
EFI_PHYSICAL_ADDRESS
Address
;
UINTN
Pages
;
BootCompat
=
GetBootCompatContext
();
AppleLoadedImage
=
OcGetAppleBootLoadedImage
(
ImageHandle
);
...
...
@@ -489,13 +530,7 @@ OcStartImage (
gBS
->
CalculateCrc32
(
gBS
,
gBS
->
Hdr
.
HeaderSize
,
&
gBS
->
Hdr
.
CRC32
);
}
if
(
BootCompat
->
Settings
.
SyncRuntimePermissions
&&
BootCompat
->
ServiceState
.
FwRuntime
!=
NULL
)
{
Status
=
BootCompat
->
ServiceState
.
FwRuntime
->
GetExecArea
(
&
Address
,
&
Pages
);
if
(
!
EFI_ERROR
(
Status
))
{
OcUpdateAttributes
(
Address
,
EfiRuntimeServicesCode
,
EFI_MEMORY_RO
,
EFI_MEMORY_XP
);
}
}
FixRuntimeAttributes
(
BootCompat
);
//
// Clear monitoring vars
...
...
@@ -627,8 +662,6 @@ OcExitBootServices (
{
EFI_STATUS
Status
;
BOOT_COMPAT_CONTEXT
*
BootCompat
;
EFI_PHYSICAL_ADDRESS
Address
;
UINTN
Pages
;
UINTN
Index
;
BootCompat
=
GetBootCompatContext
();
...
...
@@ -649,13 +682,7 @@ OcExitBootServices (
}
}
if
(
BootCompat
->
Settings
.
SyncRuntimePermissions
&&
BootCompat
->
ServiceState
.
FwRuntime
!=
NULL
)
{
Status
=
BootCompat
->
ServiceState
.
FwRuntime
->
GetExecArea
(
&
Address
,
&
Pages
);
if
(
!
EFI_ERROR
(
Status
))
{
OcUpdateAttributes
(
Address
,
EfiRuntimeServicesCode
,
EFI_MEMORY_RO
,
EFI_MEMORY_XP
);
}
}
FixRuntimeAttributes
(
BootCompat
);
//
// For non-macOS operating systems return directly.
...
...
@@ -882,12 +909,14 @@ InstallServiceOverrides (
OriginalTpl
=
gBS
->
RaiseTPL
(
TPL_HIGH_LEVEL
);
ServicePtrs
->
AllocatePages
=
gBS
->
AllocatePages
;
ServicePtrs
->
AllocatePool
=
gBS
->
AllocatePool
;
ServicePtrs
->
GetMemoryMap
=
gBS
->
GetMemoryMap
;
ServicePtrs
->
ExitBootServices
=
gBS
->
ExitBootServices
;
ServicePtrs
->
StartImage
=
gBS
->
StartImage
;
ServicePtrs
->
SetVirtualAddressMap
=
gRT
->
SetVirtualAddressMap
;
gBS
->
AllocatePages
=
OcAllocatePages
;
gBS
->
AllocatePool
=
OcAllocatePool
;
gBS
->
GetMemoryMap
=
OcGetMemoryMap
;
gBS
->
ExitBootServices
=
OcExitBootServices
;
gBS
->
StartImage
=
OcStartImage
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录