401 Star 1.4K Fork 1.3K

GVPopenEuler / kernel

 / 详情

arm64关闭CONFIG_ARM64_ILP32选项

已完成
缺陷 成员
创建于  
2022-02-24 21:17

【标题描述】
任何带uaddr的系统调用,内核在使用前,都需要检测是否是有效的用户态va。在arm64删除set_fs()和UAO支持后,uaddr的有效范围改为使用#define TASK_SIZE_MAX (UL(1) << VA_BITS)判断。但ILP32的用户态指针为32位,验证其地址有效性需使用UL(0x100000000)。为区分是否是32位用户态程序发起的syscall,使用is_compat_task()进行判断。is_compat_task()包含两个函数:is_a32_compat_task()和is_ilp32_compat_task()。前者受选项CONFIG_AARCH32_EL0控制,这是一个只使用32位寄存器的用户态,因此系统调用不可能传高32位非零的地址,即场景仍可使用(UL(1) << VA_BITS)生成mask。对于非有效的用户态地址,会在实际访问的时候产生缺页异常,在那里基于task->mm精确判断。后者受CONFIG_ARM64_ILP32控制,为自研特性,暂无人使用,关闭之。
access_ok()更主要的用途是用于区分USER_DS/KERNEL_DS,在set_fs()删除后,显然已没有这方面的需求。

【环境信息】
硬件信息:All
软件信息:OLK5.10
【问题复现步骤】执行benchmark测试
【预期结果】功能正常
【实际结果】功能正常,性能指标下降
【附件信息】无

评论 (5)

ThunderTown 创建了缺陷

Hi thundertown, 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 , @pi3orama , @成坚 (CHENG Jian) , @Qiuuuuu , @zhengzengkai , @gogooo , @Xie XiuQi

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

补丁修改相当于:

  1. Revert 76a06dbed2e7 ("arm64: fix address limit problem with TASK_SIZE_MAX")
  2. 在__range_ok()做is_compat_task()判断和处理。

从而去除了__uaccess_mask_ptr()的判断和处理。

另一个引用点__clear_user(),也先做了access_ok()判断。

ThunderTown 修改了描述
ThunderTown 修改了标题

v3修改变更为:TASK_SIZE_MAX只判断is_ilp32_compat_task(),并在openeuler_defconfig中默认关闭。开关CONFIG_ARM64_ILP32,不影响KABI。

参见

arm64: fix current_thread_info()->addr_limit setup

Revert "arm64: fix current_thread_info()->addr_limit setup"

arm64: fix address limit problem with TASK_SIZE_MAX

对于 is_a32_compat_task() 类型的进程,只能使用 32 位寄存器,所以高 32位全为 0,那么使用 UL(0x100000000) 或者 (UL(1) << VA_BITS)) 来检验都可以。

但是对于 is_ilp32_compat_task() 类型的进程,可以使用 64 位的寄存器,因为必须要用 UL(0x100000000) 校验(保证高32 位为全 0)。

输入图片说明

为了关闭 ILP32,这个补丁其实不是必须的,只是不合入以后,对于 is_compat_

ThunderTown 修改了描述
zhengzengkai 通过src-openeuler/kernel Pull Request !546任务状态待办的 修改为已完成

登录 后才可以发表评论

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

搜索帮助