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之后:

KPTI——可以缓解“熔断” (Meltdown) 漏洞的内核新特性的更多相关文章

  1. Atitit.linux 内核 新特性 新功能

    Atitit.linux 内核 新特性 新功能 1.  Linux 3.2内核新特性 2012-02-12 22:41:471 1.1. EXT4:支持更大的块2 1.2. BTRFS:更快的数据清理 ...

  2. Linux内核通杀提权漏洞CVE-2016-5195 - 内核升级方法

    如题,对于脏牛(Dirty COW)漏洞的修复方式已经在上篇文章中有介绍过如何验证,这里对如何升级内核给出修复建议. (注意:为避免不必要的生产风险的发生,请审核自己的实际环境而决定采用什么方法进行升 ...

  3. Windows 11 内核新调试器「GitHub 热点速览 v.23.01」

    本周热点趋势榜虽然新项目不多,但是还是有几个不错值得收藏的工具项目,比如用来做文本转语音的 tortoise-tts 能生成更加贴近真实人声的语音,让 Golang 并发更出色的 conc,以及通过 ...

  4.  Meltdown论文翻译【转】

    转自:http://www.wowotech.net/basic_subject/meltdown.html#6596 摘要(Abstract) The security of computer sy ...

  5. linux 内核头文件 linux kernel header

    概述:在进行有关系统软件的安装的时候(编译一个新的驱动,或者安装一个系统级别的测试工具,例如systemtap),经常需要重新编译内核,相应的问题往往与内核头文件有关.那么,什么是内核头文件,为什么需 ...

  6. php小白和菜鸟 上班路上可以看的修行博客

    上班地铁 公交上我们不要去追剧 不要去打游戏 不要看看有效性的海量新闻, 我们需要去技术博客里遨游, 下面就推荐点与php有关的可以学习的技术博客; 大部分程序员在自学的道路上不知道走了多少坑,这个视 ...

  7. C10K问题渣翻译

    The C10K problem [Help save the best Linux news source on the web -- subscribe to Linux Weekly News! ...

  8. NET Framework 4.5 五个新特性

    .NET Framework 4.5 五个新特性 Framework 4.5 已经开发了几个项目了,想去研究一下VS 2015 里面的跨平台..不过好像4.5内核新特性还没搞明白呢还是先看看4.5内核 ...

  9. DevOps 开源工具

    1. 开发工具 版本控制&协作开发 版本控制系统 Git Git 是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.开源中国 Git 代码托管平台:http:/ ...

  10. 60款与DevOps相关的开源工具

    原文地址:https://elasticbox.com/blog/de ... ools/ 你喜欢免费的东西吗?获得开发者社区支持的自动化,开源的工具是大家梦寐以求的.这里列举了 60+ 款最棒的开源 ...

随机推荐

  1. 1分钟了解HashSet的使用

    前言:刷leetcode的时候体验到hashset有多厉害了,用了他剪枝之后直接不爆超时了.速度大大滴快 使用方法 1.创建set对象Set<Integer>set=new HashSet ...

  2. Jmeter函数助手6-time

    time函数用于获取不同格式的当前时间(年月日时分秒). Format string for SimpleDateFormat (optional):时间格式,填入如yyyyMMdd-HHmmss.d ...

  3. 编程语言中的Variable Shadowing(变量遮蔽)—— declaration shadows a local variable —— Consider Allow Shadowing of let Bindings

    Variable Shadowing(变量遮蔽)是编程语言中比较常见的一种情况,但是由于不同语言对于这个情景的处理是不同的,所以在具体语言中这个Variable Shadowing(变量遮蔽)的表现也 ...

  4. stm32 F103C8T6 4x4矩阵键盘使用

    首先感谢 江科大 的stm32入门课程 受益匪浅.推荐有兴趣的朋友去看看. 先看看我用的矩阵键盘是啥样的(很常见的一种) 接线如图(其他型号根据自己需求接上GPIO口) 代码基于stm大善人的代码修改 ...

  5. 高效调度新篇章:详解DolphinScheduler 3.2.0生产级集群搭建

    转载自tuoluzhe8521 导读:通过简化复杂的任务依赖关系, DolphinScheduler为数据工程师提供了强大的工作流程管理和调度能力.在3.2.0版本中,DolphinScheduler ...

  6. programmers model

    Handler模式一直使用MSP,所以在handler模式下处理器会忽略SPSEL位:异常进入及返回机制会更新CONTROL寄存器. 在操作系统的环境中,推荐线程在Thread模式下运行使用PSP,内 ...

  7. 2023 ICPC 合肥游记

    board zsy 11.24 开始嗓子疼了,但可以忍受.晚上睡的很不舒服 11.25 起床就开始难受,还得骑车到地铁站,应该打个车来着.不过路上拍到了很好看的朝霞(写到这里才想起来还没发朋友圈给 t ...

  8. Linux信号量(2)-POSIX 信号量

    ​上一章,讲述了SYSTEM V信号量,主要运行于进程之间,本章主要介绍POSIX信号量:有名信号量.无名信号量. POSIX信号量 POSIX信号量进程是3种 IPC(Inter-Process C ...

  9. cloud compare PCA插件开发详细步骤(二)附代码

    在上一节 https://blog.csdn.net/csy1021/article/details/141200135 我们已经完成了 具体开发前的准备工作,包括 各级 CMakelists.txt ...

  10. WM_ERASEBKGND

    WM_ERASEBKGND是在当窗口背景必须被擦除时 (例如,窗口的移动,窗口的大小的改变)才发送. 当窗口的一部分无效需要重绘时发送此消息. #define WM_ERASEBKGND 0x0014 ...