Ubuntu 20.04 gcc9 linux-sgx v2.9出现-fcf-protection -mfunction-return冲突

linux-sgx v2.9出现-fcf-protection -mfunction-return冲突

Ubuntu 20.04 gcc9 linux-sgx v2.9出现-fcf-protection -mfunction-return冲突_第1张图片

Github Issue

https://github.com/intel/linux-sgx/issues/523

原因及解决办法

gcc-9编译器的问题,gcc-10同样存在,可以改成gcc-8。

$sudo apt install gcc-8
$sudo rm /usr/bin/gcc
$sudo ln -s /usr/bin/gcc-8 /usr/bin/gcc

如下图linux-sgx 2.10 buildenv.mk里把-fcf-protection关了(理论上关了fcf会有安全风险)

Ubuntu 20.04 gcc9 linux-sgx v2.9出现-fcf-protection -mfunction-return冲突_第2张图片

如果使用的linux-sgx 2.9,可以gcc降到比如8的版本,或者手动添加一个MITIGATION_CFLAGS += -fcf-protection=none,在./buildenv 214行左右位置加上如下代码将-fcf-protection(保护控制流完整性)关了。

https://github.com/apache/incubator-teaclave-sgx-sdk/commit/a740c3a40dcdcd8282f75ddc7cfc2ab9ae26f0c4

MITIGATION_CFLAGS += -fcf-protection=none

Ubuntu 20.04 gcc9 linux-sgx v2.9出现-fcf-protection -mfunction-return冲突_第3张图片

-fcf-protection=[full|branch|return|none]

https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/Instrumentation-Options.html#Instrumentation-Options

-mfunction-return=choice

https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/x86-Options.html#x86-Options

这涉及到Retpoline的一个知识点,用来防御Spectre V2利用Indirect Branch Predictor。

https://terenceli.github.io/%E6%8A%80%E6%9C%AF/2018/03/24/retpoline

https://stackoverflow.com/questions/48089426/what-is-a-retpoline-and-how-does-it-work

nocf_check

https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html

-Wa,option

https://gcc.gnu.org/onlinedocs/gcc-9.3.0/gcc/Assembler-Options.html#Assembler-Options

你可能感兴趣的:(Intel,SGX)