问题标签 [speculative-execution]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
12 浏览

database - 服务器端预取数据库数据是否存在任何安全风险?

我目前正在编写一个 Web 应用程序,该应用程序使用浏览器的隐式授予流来获取一个 ID 令牌,该 ID 令牌附加到对后端 api 的所有后续请求。

在我的后端,每当有请求进入时,id 令牌都需要获取并验证其 JWKS 信息,然后必须将唯一用户 id 发送到我们的数据库以查找该用户的帐户,其中将包括他们的角色信息。

现在我正在从我的数据库中获取用户帐户,只是假设令牌可以被信任,同时验证令牌,然后只有在两者都成功时才继续。因此,即使令牌已过期,我也会发出额外的数据库请求,以便在验证令牌后立即准备好数据,但是最近的 Spectre 和 Meltdown 推测执行攻击让我想知道您的服务器预取数据是否存在任何安全风险在它知道信任用户之前?

我猜实际上不应该有,但我离专家还很远,并且一直在努力寻找任何关于这方面的文章......

0 投票
0 回答
83 浏览

c# - C# 中“Interlocked.SpeculationBarrier”的用例是什么?

Interlocked.SpeculationBarrier自 .net framework 4.8 以来有一个新功能。我一直很好奇并寻找有关此的更多信息,但无法真正找出为什么包含它或为什么要阻止投机执行。那么这个的用例是什么?

在处理针对推测执行的漏洞(例如幽灵、崩溃)的敏感信息时,启用此功能是否会使您的应用程序更加安全?

https://docs.microsoft.com/en-us/dotnet/api/system.threading.interlocked.speculationbarrier?view=netframework-4.8

0 投票
1 回答
486 浏览

security - 由于 Spectre 缓解,硬件锁消除是否永远消失了?

由于 Spectre 缓解而对所有当前 CPU 禁用硬件锁定消除是否正确,并且任何使用 HLE 内在函数/指令的互斥锁的尝试都会导致通常的互斥锁?

这是否有可能在未来不会有任何像 HLE 互斥锁这样的东西来避免像 Spectre 这样的漏洞?

0 投票
0 回答
147 浏览

cpu-architecture - RISC-V 中的分支误预测恢复

我现在正在尝试实现基于 RV32I ISA 的管道 CPU。

我的 CPU 具有用于数据危害的重命名算法和用于控制危害的分支预测。

这是我用于重命名算法和分支预测的示例代码:

让我解释一下我的 CPU。

在第 1 行,“addi x1, x0, 25”,x1 的标签是 15。

在第 2 行,“addi x2, x0, 50”,x2 的标签是 14。

在第 3 行,“bne x1, x2, LABLE”,不采用预测结果。因此,执行第 4 行的指令。

在第 4 行,“addi x1, x0, 200”,x1 的标签为 13。(此指令不应在 true follow 中执行)

在第 5 行,“addi x2, x0, 300”,x2 的标签为 12。(此指令不应在 true follow 中执行)

在第 6 行和第 7 行,这些指令需要读取 x1、x2,而真正的标签是 15、14,但在这种情况下,读取的标签是 13、12。所以 CPU 出错了。

那么,当“bne”在执行阶段完成时,如何将 x1 和 x2 标签恢复为 15、14 ?

我应该参考哪些书籍或资料来解决这个问题?

0 投票
1 回答
824 浏览

cpu - 推测性执行的 CPU 分支能否包含访问 RAM 的操作码?

据我了解,当 CPU 推测性地执行一段代码时,它会在切换到推测性分支之前“备份”寄存器状态,因此如果预测结果错误(使分支无用) - 寄存器状态将是安全恢复,不破坏“状态”。

所以,我的问题是:推测执行的 CPU 分支是否可以包含访问 RAM 的操作码?

我的意思是,访问 RAM 不是“原子”操作——如果数据当前不在 CPU 缓存中,从内存读取一个简单的操作码可能会导致实际的 RAM 访问,这可能会成为一个非常耗时的操作,从 CPU 的角度来看。

如果在推测分支中确实允许这种访问,那么它是否仅用于读取操作?因为,我只能假设如果一个分支被丢弃并执行“回滚”,那么根据它的大小恢复一个写操作可能会变得非常缓慢和棘手。而且,可以肯定的是,至少在某种程度上支持读/写操作,因为据我所知,某些 CPU 上的寄存器本身物理上位于 CPU 缓存上。

所以,也许更精确的表述是:推测执行的代码的限制是什么?

0 投票
1 回答
121 浏览

apache-spark - 在启用了推测的情况下,如何在 Spark 中管理写入?

假设我有一个 Spark 2.x 应用程序,它启用了推测 (spark.speculation=true),它将数据写入 HDFS 上的特定位置。

现在,如果任务(将数据写入 HDFS)需要很长时间,Spark 将在另一个执行器上创建相同任务的副本,并且两个作业将并行运行。

Spark 是如何处理这个问题的?显然,这两个任务不应该同时尝试在同一个文件位置写入数据(在这种情况下似乎正在发生)。

任何帮助,将不胜感激。

谢谢

0 投票
0 回答
62 浏览

apache-spark - Spark:使用 Speculation 属性时,应用程序随机失败,并出现 Failed to CREATE_FILE

我在我的算法中启用了投机属性。有了这个属性,当我执行作业时,在 10 次中,有 8 次作业完成没有任何问题,而且完成速度也很快。但是 2 次应用程序失败并显示以下错误消息。它随机失败。

尽管投机属性由于随机故障而给我们带来了好处,但我还没有在生产中使用此属性的状态。你能帮忙解决这个问题吗?

错误信息:-

0 投票
0 回答
75 浏览

c++ - 推测执行和 malloc

在阅读了 Spectre & Meltdown 漏洞之后,我了解了推测执行。

给定以下简单的 C++ 程序:

  • 我假设malloc编译器没有优化调用。

问:mallocBranch(500000000)被调用时会发生什么?CPU 是否会查看分支预测缓存并查看过去的if (i < 500)成功调用并推测性地执行分支malloc(500000000)malloc每次分支预测缓存的全部内容都会覆盖分支的数量吗?如果malloc(500000000)实际上是推测执行,是否会为进程分配 5 亿字节的内存,如果只是暂时的?

0 投票
0 回答
18 浏览

kvm - 在虚拟机中禁用推测执行

是否有可能有一个来宾 vm(主机是 x86_64 Linux w/kvm,例如,来宾可以是任何东西,Linux 或“准系统操作系统”)在推测执行启动的情况下运行(在来宾中)?