从这个网页截图中,我们可以获取到以下关于漏洞的关键信息: 1. 漏洞描述: - 当检测到vmap堆栈溢出时,riscv首先切换到所谓的阴影堆栈,然后使用这个阴影堆栈来调用get_overflow_stack()来获取溢出堆栈。 - 存在一个竞争条件,如果两个或多个hart同时使用相同的阴影堆栈。 2. 解决方案: - 引入spin_shadow_stack原子变量,该变量将在原子方式下交换其地址和0。当该变量被设置时,表示阴影堆栈正在使用;当该变量被清除时,表示阴影堆栈未在使用。 - 通过引入spin_shadow_stack变量来解决竞争条件。 3. 修复代码: - 修改了 文件中的代码,添加了新的宏定义。 - 修改了 文件中的代码,添加了新的代码片段。 - 修改了 文件中的代码,添加了新的函数和宏定义。 4. 修复范围: - 修复了三个文件: 、 和 。 5. 修复细节: - 在 文件中,添加了新的宏定义。 - 在 文件中,修改了 函数的代码。 - 在 文件中,添加了新的函数 和宏定义。 这些信息表明,修复了riscv堆栈溢出时的竞争条件问题,通过引入新的变量和宏定义来解决。