향상된 IBRS 시스템을 위해 Linux 커널 CONFIG_RETPOLINE을 제거할 수 있습니까?

향상된 IBRS 시스템을 위해 Linux 커널 CONFIG_RETPOLINE을 제거할 수 있습니까?

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을 제거하는 것이 "안전"합니까? 그렇지 않다면 그 이유는 무엇입니까?

관련 정보