402 Star 1.4K Fork 1.3K

GVPopenEuler / kernel

 / 详情

Arm64:memmap支持内核地址随机冲突检测

已完成
任务
创建于  
2022-07-26 19:22

openeuler代码Arm64架构支持memmap功能,但是不支持memmap支持内核地址随机冲突检测,当使能内核物理地址随机化且Image随机在memmap预留内存区域时,会导致image内存被踩的问题,导致系统异常复位
解决这个问题,需要在UEFI启动加载内核阶段,提前解析CMDLINE参数的memmap配置,并通过alloc_page进行内存预留,从而避免内核随机时落在memmap的内存区域,造成Image与memmap内存冲突

评论 (3)

cuigaosheng 创建了任务

Hi cuigaosheng, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Kernel, and any of the maintainers: @YangYingliang , @成坚 (CHENG Jian) , @jiaoff , @zhengzengkai , @刘勇强 , @wangxiongfeng , @朱科潜 , @WangShaoBo , @lujialin , @wuxu_buque , @Xu Kuohai , @冷嘲啊 , @Lingmingqiang , @yuzenghui , @岳海兵 , @juntian , @OSSIM , @陈结松 , @whoisxxx , @koulihong , @刘恺 , @hanjun-guo , @woqidaideshi , @Chiqijun , @Kefeng , @ThunderTown , @AlexGuo , @kylin-mayukun , @Zheng Zucheng , @柳歆 , @Jackie Liu , @zhujianwei001 , @郑振鹏 , @SuperSix173 , @colyli , @Zhang Yi , @htforge , @Xie XiuQi

openeuler-ci-bot 添加了
 
sig/Kernel
标签

测试方案一:
1、cmdline中配置memmap预留内存段,比如memmap=200m$0x0000000040010000,0x10000$0x0000000090000000(注意均选择合法的物理地址段)
2、启动内核,内核启动成功,且不会有错误日志打印则符合功能预期,日志如下:
输入图片说明
测试方案二:
可以增加debug补丁,打印内核随机关键信息,观测内核启动过程中是否跳过指定内存段,如下:
输入图片说明
关于更多:
测试过程中,通过调整memmap配置参数,采用不同的(合法、非法等)地址和size组合,完善测试场景

实现方案解读:
输入图片说明
如图所示,EFI启动阶段内存管理由BIOS进行,内核物理地址随机化特性会从BOIS获取内存布局,并在可选的物理地址范围进行random随机,随机完成之后进行Image的拷贝加载
为解决memmap与内核物理地址随机的问题,需要提前解析cmdline配置,识别内存预留段,并通过allocate_pages将预留内存同步到bios侧的物理内存管理侧,后续在通过efi_get_memory_map获取可用的物理内存map时,则会跳过已被allocate的物理内存,即内核不会在memmap预留的内存段内进行随机偏移

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
5329419 openeuler ci bot 1632792936
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

搜索帮助