前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[linux][retpoline] retpoline技术分析

[linux][retpoline] retpoline技术分析

作者头像
皮振伟
发布2018-04-09 10:59:42
5.5K1
发布2018-04-09 10:59:42
举报
文章被收录于专栏:皮振伟的专栏皮振伟的专栏

前言: 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中,就不会被用户的指令预执行而窃取内核的数据。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-01-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AlwaysGeek 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档