前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KPTI——可以缓解“熔断” (Meltdown) 漏洞的内核新特性

KPTI——可以缓解“熔断” (Meltdown) 漏洞的内核新特性

作者头像
233333
发布2024-06-11 08:20:38
950
发布2024-06-11 08:20:38
举报

Linux 内核修复办法:内核页表隔离KPTl(kernel page table isolation)

  • 每个进程一张页表变成两张:运行在内核态和运行在用户态时分别使用各自分离的页表
  • Kernel页表包含了进程用户空间地址的映射和Kernel使用的内存映射
  • 用户页表仅仅包含了用户空间的内存映射以及内核跳板的内存映射
  • 当进程运行在用户空间时,使用的是用户页表
  • 当发生中断或者是异常时,需要陷入到内核,进入内核空间后,有一小段内核跳板将页表切换到内核页表
  • KPTI最早是运用在x86上
  • KPTI补丁已经合并到Linux 4.15-rc4上

x86上的KPTI补丁主要工作:

  1. 内核页表和用户态页表的分离和切换
  2. 进程切换的优化:
  • 因为内核态的页表包含了所有地址空间的页表,所以可以安全的访问到用户态页表
  • 进程中用户态到内核态之间的切换,需要切换CR3寄存器
  • 采用per-cpu的PCID来优化

ARM上的KPTI

  • ARM64 只有Cortex-A75中招Meltdown漏洞 ARM64上早已经采用了双页表的设计,但是。
  • ARM64上KPTI 的优化:
    • A75上虽然有两个页表寄存器,但是TLB上依然没法做到完全隔离,用户进程在meltdown情况下依然有可能访问内核空间映射的TLB entry
    • -个给当进程跑在内核态的使用,另外一个给进程跑在用户态每个进程上的ASID设置两份时使用。这样原本内核空间属于global TLB,就变成Process-Specific类型的TLB。
  • ARM64上TLB示意图

ASID的简介

  • 进程切换需要flush TLB,导致性能下降
  • TLB优化:(ASID)Address Space ID
    • Gobal类型的TLB:内核空间是所有进程共享的空间,因此这部分空间的虚拟地址到物理地址的翻译是不会变化的,可以理解为Global的。
    • Process-specific类型的TLB:用户地址空间是每个进程独立的地址空间。prev进程切换到next进程时,TLB中缓存的prev进程的相关数据对于next进程是无用的,因此可以冲刷掉,这就是所谓的process-specific的TLB。

ASID 优化

KPTI之前:

KPTI之后:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • x86上的KPTI补丁主要工作:
  • ARM上的KPTI
    • ASID的简介
      • ASID 优化
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档