![향상된 IBRS 시스템을 위해 Linux 커널 CONFIG_RETPOLINE을 제거할 수 있습니까?](https://linux55.com/image/14684/%ED%96%A5%EC%83%81%EB%90%9C%20IBRS%20%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%84%20%EC%9C%84%ED%95%B4%20Linux%20%EC%BB%A4%EB%84%90%20CONFIG_RETPOLINE%EC%9D%84%20%EC%A0%9C%EA%B1%B0%ED%95%A0%20%EC%88%98%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
Spectre v2 완화를 위해 향상된 IBRS를 지원하는 Cascade Lake 프로세서만을 사용하는 시스템을 배포하고 있습니다.
커널 소스에서 이 시스템에 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
이는 하드웨어 자체가 프로세서 수준 보호를 제공하더라도 코드 생성이 여전히 리트폴린을 활성화한다는 것을 의미합니다.
예를 들어, 이와 같은 시스템에서 KVM을 실행할 때 여전히 _가 표시됩니다.x86_indirect_thunk* 기능이 발생합니다.
Q. 만약 내가 그랬다면 어땠을까?오직Cascade Lake++ 및 Enhanced IBRS가 포함된 시스템에 배포할 때 CONFIG_RETPOLINE을 제거하는 것이 "안전"합니까? 그렇지 않다면 그 이유는 무엇입니까?