专栏首页皮振伟的专栏[linux][retpoline] retpoline技术分析

[linux][retpoline] retpoline技术分析

前言: Intel CPU的Spectre问题,在linux-upstream上有了一个叫做retpoline的解决方案。 本文选择系统调用的变化以及调用过程来分析,retpoline到底做了什么。 分析: 1,syscall linux-upstream/arch/x86/entry/entry_64.S中,

如果没有使用retpoline的话,直接根据syscall的nr调用对应的handler。 如果使用了retpoline,会进入__x86_indirect_thunk_rax的函数。 2,__x86_indirect_thunk_\reg linux-upstream/arch/x86/lib/retpoline.S中:

这里是宏嵌套实现的,生成了__x86_indirect_thunk_rax,__x86_indirect_thunk_rbx...__x86_indirect_thunk_r15。它们的实现都是使用JMP_NOSPEC。 3,JMP_NOSPEC inux-upstream/arch/x86/include/asm/nospec-branch.h中:

JMP_NOSPEC依然是宏嵌套。如果没有使用retpoline的话,直接调用函数。以__x86_indirect_thunk_rax为例,就是直接jmp到*rax,相当于系统调用直接call下来了。 如果使用retpoline的话,还需要继续展开宏JMP_NOSPEC。

在代码中插入了一个无限循环,而且并不会执行到。代码加载之后,CPU预执行的时候,预测分支走进trap中,就不会被用户的指令预执行而窃取内核的数据。

文章分享自微信公众号:
AlwaysGeek

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

如有侵权,请联系 yunjia_community@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • [linux][kernel]meltdown攻击和retpoline防御分析

    前言: Intel爆出来的漏洞,搞了一个大新闻,然后Linus也对Intel的补丁批判了一番。 关于meltdown攻击的原理,以及retpoline防御,见下...

    皮振伟
  • 10分钟!一键部署Oracle 11GR2单机

    无人值守安装Oracle 11GR2单机,只需要10分钟?没错,通过脚本静默安装,真的只需要10分钟,包括安装补丁,建库。

    Lucifer三思而后行
  • 如何通过VMware安装Linux CentOS 7.7系统

    安装要求:安装后的虚拟机用于服务器,因此要最小化安装,不要安装多余的软件,也不需要安装图形化界面。

    踏歌行
  • Cilium使用 (Cilium 3)

    Cilium要求的内核版本比较高,需要对内核进行升级,否则会运行失败。错误日志如minimal supported kernel version is 4.8....

    charlieroro
  • 阿里飞绪: poll 性能回归分析

    Aliyun Linux 2 是为云上应用程序特别优化的开源操作系统,上游包括 4.19 LTS 内核、CentOS 7.6 软件包,为阿里云基础设施深度优化,...

    Linux阅码场
  • Linux 标准大页和透明大页

    Huge pages ( 标准大页 ) 和 Transparent Huge pages( 透明大页 )

    用户1278550
  • 利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序

    前面两篇文章已经介绍过 tap/tun 的原理和配置工具。这篇文章通过一个编程示例来深入了解 tap/tun 的程序结构。

    Linux云计算网络
  • 芯片漏洞后续:苹果发布Spectre漏洞修复补丁;微软KB4056892补丁造成系统和应用程序崩溃;英特尔惹上官司

    Meltdown 与 Spectre 漏洞曝出之后,各大厂商都在紧急响应。目前事态还在进展,本文送上今天份的更新。 苹果发布 Spectre 漏洞修复补丁 苹果...

    FB客服
  • 核武按钮终被劫持?Meltdown与Spectre攻击深入解析

    Zip
  • Docker 基础技术之 Linux namespace 源码分析

    上篇我们从进程 clone 的角度,结合代码简单分析了 Linux 提供的 6 种 namespace,本篇从源码上进一步分析 Linux namespace,...

    Linux云计算网络
  • [kvm][virt]PIO技术分析

    前言: 基于KVM的设备虚拟化,就从这里开始吧。 分析: 1,PIO Port IO,所谓端口IO,x86上使用in、out指令进行访问。和内存的地址空间完...

    皮振伟
  • [kvm][virt]MMIO技术分析

    前言: 简单回顾一下前文,《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。《内存回收》介绍了一下PFRA内存回收。 上述...

    皮振伟
  • [linux][memory]KSM技术分析

    前言: 先来回顾一下Linux平台上的节约内存的方案: swap:通过LRU淘汰掉掉一部分page,把这些page交换到磁盘上。再次访问到这些page的时候,k...

    皮振伟
  • [database][redis]redis技术分析

    前言: 解读一下redis的源代码~ 因为hash算法,skiplist等相关文章很多,前人之述备矣,这里不做解读。这里会解读一些相对较“冷门”的代码。 分...

    皮振伟
  • [linux][memory]balloon技术分析

    前言: 我大天朝人觉得什么东西含量不够,叫做有“水份”。内存的含量不足,叫“balloon”。作者是外语专业毕业的,感觉不同国度的人虽然语言不同,但是表达出来的...

    皮振伟
  • [linux][network]bond技术分析

    前言: 云计算场景下,经常会使用到bond技术的主备模式。这里分析一下bond技术的原理。 原理: 简单回忆一下IPV4协议栈,以用户发送一个HTTP请求为...

    皮振伟

扫码关注云+社区

领取腾讯云代金券