Infineon / linux-optiga-trust-m

Linux tools and examples for OPTIGA™ Trust V1/V3 security solution
MIT License
22 stars 18 forks source link

Migration from Linux 4.9.11 built with GCC version 7.3.0, to Linux version 5.4.47 built with GCC version 10.2.0 #17

Closed Kitty-Hawk1 closed 3 years ago

Kitty-Hawk1 commented 3 years ago

This is taken from one of our i.MX6 solutions.

We’re migrating our Infineon Trust M software, which was running Linux 4.9.11 built with GCC version 7.3.0, To Linux version 5.4.47 built with GCC version 10.2.0 [to add in new features]

Yocto recipe snippet:

SRC_URI = "gitsm://github.com/Infineon/cli-optiga-trust-m.git;protocol=https"

SRC_URI += file://28db645eb6f121becd968ba62b775fa56a189f46.patch;patchdir=trustm_lib
SRC_URI += file://c0ec9b28dbc27748d18b52d1351fc1c1e44f54be.patch;patchdir=trustm_lib

PV = "1.0+git${SRCPV}"
SRCREV = "44f942c04424c03970242281667f01a5aa442d49"

S = "${WORKDIR}/git"

TARGET_CFLAGS = "-I${STAGING_INCDIR} -fPIC -DENGINE_DYNAMIC_SUPPORT"
TARGET_LDFLAGS = "-lpthread -lssl -lcrypto -lrt"

do_compile () { 
    oe_runmake -C ${WORKDIR}/git workaround_patch

    oe_runmake -C ${WORKDIR}/git 'CC=${CC}'
}

The same software but with newer compiler shows the problem below…

NOTE: make -j 8 -C /home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44
f942c044-r0/git CC=arm-cwr-linux-gnueabi-gcc  -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/buil
d-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-sysroot
make: Entering directory '/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUT
OINC+44f942c044-r0/git'
+++++++ Generating lib object: trustm_lib/pal/linux/pal_os_datastore.c 
+++++++ Generating lib object: trustm_lib/pal/linux/pal_os_event.c 
******* Linking bin/libtrustm.so 
******* Linking linux_example/trustm_data 
******* Linking linux_example/trustm_readmetadata_status 
******* Linking linux_example/trustm_read_data 
******* Linking linux_example/trustm_rsa_keygen 
******* Linking linux_example/trustm_readmetadata_data 
******* Linking linux_example/trustm_rsa_sign 
******* Linking linux_example/trustm_rsa_dec 
******* Linking linux_example/trustm_rsa_enc 
******* Linking linux_example/trustm_ecc_keygen 
******* Linking linux_example/trustm_readmetadata_private 
******* Linking linux_example/trustm_errorcode 
******* Linking linux_example/trustm_monotonic_counter 
******* Linking linux_example/trustm_chipinfo 
******* Linking linux_example/trustm_ecc_verify 
******* Linking linux_example/trustm_rsa_verify 
******* Linking linux_example/trustm_read_status 
******* Linking linux_example/simpleTest_Server 
******* Linking linux_example/trustm_metadata 
******* Linking linux_example/simpleTest_Client 
******* Linking linux_example/trustm_cert 
******* Linking linux_example/trustm_ecc_sign 
******* Linking bin/trustm_engine.so 
/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-
sysroot-native/usr/bin/arm-cwr-linux-gnueabi/../../libexec/arm-cwr-linux-gnueabi/gcc/arm-cwr-linux-gnueabi/10.2.0/ld: trustm_engine/trustm_engine.o:(.bss+0x0): multiple defin
ition of `lock'; trustm_engine/trustm_engine_rsa.o:(.bss+0x0): first defined here
/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-
sysroot-native/usr/bin/arm-cwr-linux-gnueabi/../../libexec/arm-cwr-linux-gnueabi/gcc/arm-cwr-linux-gnueabi/10.2.0/ld: trustm_engine/trustm_engine_ec.o:(.bss+0x0): multiple de
finition of `lock'; trustm_engine/trustm_engine_rsa.o:(.bss+0x0): first defined here
/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-
sysroot-native/usr/bin/arm-cwr-linux-gnueabi/../../libexec/arm-cwr-linux-gnueabi/gcc/arm-cwr-linux-gnueabi/10.2.0/ld: trustm_engine/trustm_engine_rand.o:(.bss+0x0): multiple 
definition of `lock'; trustm_engine/trustm_engine_rsa.o:(.bss+0x0): first defined here

Thanks.

RaymWong commented 3 years ago

This is taken from one of our i.MX6 solutions.

We’re migrating our Infineon Trust M software, which was running Linux 4.9.11 built with GCC version 7.3.0, To Linux version 5.4.47 built with GCC version 10.2.0 [to add in new features]

Yocto recipe snippet:

SRC_URI = "gitsm://github.com/Infineon/cli-optiga-trust-m.git;protocol=https"

SRC_URI += file://28db645eb6f121becd968ba62b775fa56a189f46.patch;patchdir=trustm_lib
SRC_URI += file://c0ec9b28dbc27748d18b52d1351fc1c1e44f54be.patch;patchdir=trustm_lib

PV = "1.0+git${SRCPV}"
SRCREV = "44f942c04424c03970242281667f01a5aa442d49"

S = "${WORKDIR}/git"

TARGET_CFLAGS = "-I${STAGING_INCDIR} -fPIC -DENGINE_DYNAMIC_SUPPORT"
TARGET_LDFLAGS = "-lpthread -lssl -lcrypto -lrt"

do_compile () {   
  oe_runmake -C ${WORKDIR}/git workaround_patch

  oe_runmake -C ${WORKDIR}/git 'CC=${CC}'
}

The same software but with newer compiler shows the problem below…

NOTE: make -j 8 -C /home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44
f942c044-r0/git CC=arm-cwr-linux-gnueabi-gcc  -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/buil
d-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-sysroot
make: Entering directory '/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUT
OINC+44f942c044-r0/git'
+++++++ Generating lib object: trustm_lib/pal/linux/pal_os_datastore.c 
+++++++ Generating lib object: trustm_lib/pal/linux/pal_os_event.c 
******* Linking bin/libtrustm.so 
******* Linking linux_example/trustm_data 
******* Linking linux_example/trustm_readmetadata_status 
******* Linking linux_example/trustm_read_data 
******* Linking linux_example/trustm_rsa_keygen 
******* Linking linux_example/trustm_readmetadata_data 
******* Linking linux_example/trustm_rsa_sign 
******* Linking linux_example/trustm_rsa_dec 
******* Linking linux_example/trustm_rsa_enc 
******* Linking linux_example/trustm_ecc_keygen 
******* Linking linux_example/trustm_readmetadata_private 
******* Linking linux_example/trustm_errorcode 
******* Linking linux_example/trustm_monotonic_counter 
******* Linking linux_example/trustm_chipinfo 
******* Linking linux_example/trustm_ecc_verify 
******* Linking linux_example/trustm_rsa_verify 
******* Linking linux_example/trustm_read_status 
******* Linking linux_example/simpleTest_Server 
******* Linking linux_example/trustm_metadata 
******* Linking linux_example/simpleTest_Client 
******* Linking linux_example/trustm_cert 
******* Linking linux_example/trustm_ecc_sign 
******* Linking bin/trustm_engine.so 
/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-
sysroot-native/usr/bin/arm-cwr-linux-gnueabi/../../libexec/arm-cwr-linux-gnueabi/gcc/arm-cwr-linux-gnueabi/10.2.0/ld: trustm_engine/trustm_engine.o:(.bss+0x0): multiple defin
ition of `lock'; trustm_engine/trustm_engine_rsa.o:(.bss+0x0): first defined here
/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-
sysroot-native/usr/bin/arm-cwr-linux-gnueabi/../../libexec/arm-cwr-linux-gnueabi/gcc/arm-cwr-linux-gnueabi/10.2.0/ld: trustm_engine/trustm_engine_ec.o:(.bss+0x0): multiple de
finition of `lock'; trustm_engine/trustm_engine_rsa.o:(.bss+0x0): first defined here
/home/wblinux/Development/scripts/scripts/sn-gpm-249.rel.1.01/build-devel/tmp/work/cortexa7t2hf-neon-cwr-linux-gnueabi/cli-optiga-trust-m/1.0+gitAUTOINC+44f942c044-r0/recipe-
sysroot-native/usr/bin/arm-cwr-linux-gnueabi/../../libexec/arm-cwr-linux-gnueabi/gcc/arm-cwr-linux-gnueabi/10.2.0/ld: trustm_engine/trustm_engine_rand.o:(.bss+0x0): multiple 
definition of `lock'; trustm_engine/trustm_engine_rsa.o:(.bss+0x0): first defined here

Thanks. Thanks a lot for your feedback. Please remove this line "pthread_mutex_t lock;": in the trustm_engine_common.h https://github.com/Infineon/linux-optiga-trust-m/blob/44f942c04424c03970242281667f01a5aa442d49/trustm_engine/trustm_engine_common.h#L171

For greater stability and performance, please upgrade to development_v3 branch https://github.com/Infineon/linux-optiga-trust-m/commit/1718b8211f01738373f5e45548c964d2138a0a6a

Kitty-Hawk1 commented 3 years ago

Yes removing it from the header builds, haven't tested yet though.

RaymWong commented 3 years ago

Thanks for the feedback and will close this GCC build issue for now.