Re: [情报] Intel严重漏洞 OS更新将会降低效能

楼主: jclin (状态:idle)   2018-01-05 15:18:14
※ 引述《s25Ag5d4 (function(){})()》之铭言:
: (删)
: 1 ; rcx = kernel address
: 2 ; rbx = probe array
: 3 retry:
: 4 mov al, byte [rcx]
: 5 shl rax, 0xc
: 6 jz retry
: 7 mov rbx, qword [rbx + rax]
: 在第四行会产生一个例外,但因为 OOOE 与推测执行,造成第
: 七行的读取内存行为也执行了,它存取的资料被从内存中
: 搬入快取,但因为在第四行产生例外,因此 rbx 并没有真的
: 被写入资料。因为 rbx + rax 上的资料被移到快取了,它的
补充一下细节.
第四行一定会引发 exception,因为 user space application 不可以这样
直读取 kernel data。但是因为 OOOE 跟 superscalar,
line 4 之后的指令也一并被拆解为 micro-ops 充份利用 CPU 上的运算单元
最后等 line 4 和后面的 uOPs 做完 in-order 回到 architecture state,发现
line 4 会有问题才 raise exception,并且把已经 OOOE 多做的资料清掉跟准备
发出 exception。但是这时会有 race condition 产生.
虽然 line 4 不允许被执行,但是后面的因为 uOPs 已经做了,
rbx + rax 指向的资料已被搬进 cache。rbx 是自己程式记忆起头,而 rax * 4096
就是 shift left 12, 避免预先读进相邻的 data 到 cache line
这时再利用以前的 paper 的 flush+reload 技巧把 cache 状态读出来
就可以知道 rcx 这个 byte 的值为何

Links booklink

Contact Us: admin [ a t ] ucptt.com