我正在部署专门使用 Cascade Lake 处理器的系统,该处理器支持用于 Spectre v2 缓解的增强型 IBRS。
我在内核源代码中看到,如果我在此系统上设置 spectre_v2=auto,我将获得增强的 IBRS 缓解(太棒了!):https://github.com/torvalds/linux/blame/master/arch/x86/kernel/cpu/bugs.c#L878
但是,如果我使用 CONFIG_RETPOLINE 编译 Linux 内核,gcc 仍会被指示使用 -mindirect-branch=thunk-extern -mindirect-branch-register 编译代码:https://github.com/torvalds/linux/blame/master/Makefile#L673
这意味着即使硬件本身提供处理器级保护,代码生成仍将激活 retpolines。
举个例子:在这样的系统上运行 KVM 时,我仍然看到 _ 的存在x86_indirect_thunk* 函数发生。
问:如果我是只在具有 Cascade Lake++ 和增强型 IBRS 的系统上部署时,删除 CONFIG_RETPOLINE 是否“安全”……如果不是,为什么?