8月11日消息,英特尔开发者皮特·齐尔斯特拉近日向Linux内核提交了一项KCFI(内核控制流完整性)优化补丁。简单来说,这次更新的核心目标,是让那些已经广泛部署、但暂不支持FineIBT特性的老款英特尔CPU,也能获得更好的安全与性能表现。
KCFI是Linux内核中的一项安全防护机制,主要用于拦截控制流劫持攻击。它会在间接调用执行前校验目标函数类型,从而降低攻击者篡改程序跳转流程的风险,提升内核安全性。

与KCFI配套的FineIBT则属于软硬件协同方案,依赖英特尔的间接分支跟踪硬件能力,因此目前只在第11代酷睿Tiger Lake及更新一代的处理器上支持。
这也意味着,搭载第10代酷睿以及更早期英特尔处理器的老电脑,还有部分旧款服务器,现在只能使用常规的KCFI执行检查序列,因此性能开销相对更高。此次新补丁优化的正是这一环节:它会在系统启动阶段,将原本必然触发的跳转指令,改为直接落到预留字节位置。这样一来,每次间接调用产生的额外指令周期消耗就能明显降低。
新的指令序列还进一步利用了英特尔新定义的单字节指令UDB(操作码0xD6)。该指令可以作为立即数嵌入test指令,并在跳转时直接落到这个字节位置,不仅实现了更节省空间的设计,也避免了此前借用保留操作码所引发的争议。
从目前公布的测试结果来看,老平台在开启KCFI后原本会积累较明显的性能损失,而这套新方案基本消除了其中最主要的性能拖累。基准测试数据显示,整体性能损耗可回落约90%。
目前,这项补丁已经进入tip/tip.git仓库的x86/core分支。按照计划,Linux 7.2预计将在8月下旬发布正式版,而在随后的7.3合并窗口中,这项KCFI优化有望正式进入Linux内核主线。
如果后续顺利合入主线并随新版Linux内核发布,那么安装新内核的老旧英特尔电脑将在不牺牲安全防护能力的前提下,获得一定幅度的性能提升。

