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. linux性能资源分析工具

    linux性能资源分析工具 1,top 2,ps 3,uptime 4,mpstat 5,pidstat 6,vmstat 7,iostat 8,netstat 9,lsof 10,sar / nmo ...

  2. 测试工程师-bug的组成要素

    bug的组成要素:所属产品.所属模块.版本.指派开发.bug标题.严重程度.优先级.bug类型.重现步骤.附件等: 1. 所属产品.所属模块.版本.指派开发 根据相应的项目正确填写 2.bug标题 简 ...

  3. 【Vue】NPM构建的一些问题解决

    9418端口已经不再支持未授权的GIT协议 C:\Users\Administrator\Desktop\wss-taskcore-web>npm install npm ERR! Error ...

  4. (待续)【转载】 Deep Reinforcement Learning Doesn't Work Yet(这里有一篇深度强化学习劝退文)

    原文: https://www.alexirpan.com/2018/02/14/rl-hard.html ============================================== ...

  5. EDI企业订单报文系统——冷链物流管理系统——低代码的应用

    参考: 驳"低代码开发取代程序员"论 为什么专业开发者也需要低代码? =========================================== 推荐视频: https ...

  6. python代码实现将PDF文件转为文本及其对应的音频

    代码地址: https://github.com/TiffinTech/python-pdf-audo ============================================ imp ...

  7. java多线程之-不可变final

    1.背景 final这个关键字相信大家不陌生吧... 看看下面的案例 2.时间格式化之线程不安全SimpleDateFormat package com.ldp.demo08final; import ...

  8. Python 将Word转换为JPG、PNG、SVG图片

    将Word文档以图片形式导出,既能方便信息的分享,也能保护数据安全,避免被二次编辑.文本将介绍如何使用Spire.Doc for Python 库在Python程序中实现Word到图片的批量转换. P ...

  9. 武汉市委郭元强书记、盛阅春代市长会见白鲸开源CEO郭炜等嘉宾代表

    2024年6月14日,第二届软件创新发展大会在中国武汉举行.大会云集了来自全国的书数百位院士.专家.知名软件企业负责人,包括中国工程院院士倪光南.中国科学院院士陈十一.国家工业信息安全发展研究中心总工 ...

  10. Spring启动报8080端口被占用问题

    1.window下关闭8080端口 win+R:输入cmd,回车 在黑窗口中输入指令:netstat -ano | findstr 8080       指令的意思是找出占用8080端口的进程pid ...