首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >PTI中的SMEP模拟技术解析

PTI中的SMEP模拟技术解析

原创
作者头像
qife122
发布2025-08-10 14:27:00
发布2025-08-10 14:27:00
1360
举报

PTI中的SMEP模拟

近期内核页表隔离补丁(CONFIG_PAGE_TABLE_ISOLATION)带来了一项额外优势:当内核模式运行时,可见的用户空间页表缺少可执行位。这使得不具备SMEP CPU特性的系统(Ivy-Bridge之前的处理器)能"免费"获得该特性的模拟实现。

非SMEP系统测试案例

关闭PTI的情况(使用"pti=off"启动参数):

代码语言:bash
复制
# grep smep /proc/cpuinfo
# dmesg -c | grep isolation
[    0.000000] Kernel/User page tables isolation: disabled on command line.
# cat <(echo EXEC_USERSPACE) > /sys/kernel/debug/provoke-crash/DIRECT
# dmesg
[   17.883754] lkdtm: Performing direct entry EXEC_USERSPACE
[   17.885149] lkdtm: attempting ok execution at ffffffff9f6293a0
[   17.886350] lkdtm: attempting bad execution at 00007f6a2f84d000

系统未崩溃!内核成功执行了用户空间内存。

开启PTI的情况

代码语言:bash
复制
# grep smep /proc/cpuinfo
# dmesg -c | grep isolation
[    0.000000] Kernel/User page tables isolation: enabled
# cat <(echo EXEC_USERSPACE) > /sys/kernel/debug/provoke-crash/DIRECT
Killed
# dmesg
[   33.657695] lkdtm: Performing direct entry EXEC_USERSPACE
[   33.658800] lkdtm: attempting ok execution at ffffffff926293a0
[   33.660110] lkdtm: attempting bad execution at 00007f7c64546000
[   33.661301] BUG: unable to handle kernel paging request at 00007f7c64546000
[   33.662554] IP: 0x7f7c64546000
...

未来优化方向

只需稍加改进,就能在内核模式下完全取消用户空间页表的映射,仅在copy_to_user()/copy_from_user()时临时映射——这与ARM架构通过ARM64_SW_TTBR0_PAN(或arm32的CONFIG_CPU_SW_DOMAIN_PAN)实现的方式类似。


© 2018, Kees Cook. 本作品采用知识共享署名-相同方式共享4.0国际许可协议进行许可。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PTI中的SMEP模拟
    • 非SMEP系统测试案例
    • 未来优化方向
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档