Az Intelnél dolgozó Peter Zijlstra egy KCFI-fejlesztésen dolgozott azokhoz a régebbi platformokhoz, amelyek nem támogatják a FineIBT-t. Peter a készülő javítócsomagról ezt írta:
„Ahogy a 85a2d4a890dc („x86,ibt: Use UDB instead of 0xEA”) commit is megjegyzi, a Jcc utasításról azt kell feltételezni, hogy nem ugrik, a szokásos KCFI (ABI) viszont a következő sorozatot generálja:
FineIBT / CET Indirect Branch Tracking (IBT) funkcióval az Intel Core 11. generációs „Tiger Lake” CPU-któl felfelé érhető el.
movl $(-hash), %r10d
addl -15(%r11), %r10d
je 1f
ud2
1: cs call __x86_indirect_thunk_r11
(ha a -mretpoline-external-thunk opcióval együtt használjuk).
Figyelemre méltó, hogy itt a Jcc mindig ugrik, ami a kelleténél alacsonyabb áteresztőképességet eredményez. Indításkor cseréljük le a következő sorozatra:
movl $(-hash), %r10d
addl -15(%r11), %r10d
jne . + 3
test $0xd6, %al
cs call __x86_indirect_thunk_r11
Ez a test utasításban azonnali bájtként használt UDB utasításra ugrik. A test módosítja az eflags regisztert, de ez nem számít, mert az előtte lévő addl már megváltoztatja az eflags-t.
Az Intel a FineIBT szekvenciát javasolja az IBT-t támogató platformokon; a régebbi platformokat azonban még mindig széles körben használják, és ezek is profitálnának ebből.”
Az Intel mérnöke, Scott Constable korábbi benchmarkokat futtatott a javítócsomag egy korábbi változatával, hogy felmérje a CFI-optimalizáció előnyeit.
A javítócsomag már bekerült a tip/tip.Git x86/core Git branchébe. Mivel a kód most már egy TIP branchben van, várhatóan benyújtják a közelgő Linux 7.3 merge windowra.

