Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android build: tee_storage_api build error - Android M fixes required #10

Open
lordqwerty opened this issue Oct 5, 2015 · 7 comments
Open
Assignees

Comments

@lordqwerty
Copy link
Contributor

Hello,

After doing a repo sync I now get the following error:

open-tee_error

$ make opentee-engine
....
....
....

opentee/emulator/internal_api/tee_storage_api.c: In function 'gen_des_key':
opentee/emulator/internal_api/tee_storage_api.c:151:2: warning: implicit declaration of function 'DES_random_key' [-Wimplicit-function-declaration]
  DES_random_key(&key1);
  ^
opentee/emulator/internal_api/tee_storage_api.c:152:2: error: incompatible type for argument 2 of 'memcpy'
  memcpy(object->attrs->content.ref.buffer, key1, sizeof(key1));
  ^
In file included from opentee/emulator/internal_api/tee_storage_api.c:26:0:
bionic/libc/include/string.h:191:7: note: expected 'const void * __restrict__' but argument is of type 'DES_cblock'
 void* memcpy(void* __restrict dest, const void* __restrict src, size_t copy_amount) {
       ^
opentee/emulator/internal_api/tee_storage_api.c:160:2: error: incompatible type for argument 2 of 'memcpy'
  memcpy((unsigned char *)object->attrs->content.ref.buffer + sizeof(key1), key2,
  ^
In file included from opentee/emulator/internal_api/tee_storage_api.c:26:0:
bionic/libc/include/string.h:191:7: note: expected 'const void * __restrict__' but argument is of type 'DES_cblock'
 void* memcpy(void* __restrict dest, const void* __restrict src, size_t copy_amount) {
       ^
opentee/emulator/internal_api/tee_storage_api.c:169:2: error: incompatible type for argument 2 of 'memcpy'
  memcpy((unsigned char *)object->attrs->content.ref.buffer + sizeof(key1) + sizeof(key2),
  ^
In file included from opentee/emulator/internal_api/tee_storage_api.c:26:0:
bionic/libc/include/string.h:191:7: note: expected 'const void * __restrict__' but argument is of type 'DES_cblock'
 void* memcpy(void* __restrict dest, const void* __restrict src, size_t copy_amount) {
       ^
ninja: build stopped: subcommand failed.
make: *** [ninja.intermediate] Error 1

Are you also getting this error?

Thanks for your time.

@lordqwerty
Copy link
Contributor Author

Interestingly with the CyanogenMod 12.1 android source Open-TEE builds. To do this I run:

  • source ./build/envsetup.sh
  • breakfast
  • make clean && make opentee-engine

This builds successfully. But in the android source from Googles repo does not build with Open-TEE as shown in the above error. Again is this just me or is everyone getting this?

@brianmcgillion
Copy link
Member

Hi Jorden,

Do you have Android M in your Google aosp repo? We have not yet run
Open-TEE with M, so you should still run it under L. It appears that there
are changes in boring SSL that we will have to address in Open-TEE to get
it to run there.

Br,
Brian

On Wed, Oct 7, 2015 at 5:06 PM, Jorden Whitefield [email protected]
wrote:

Interestingly with the CyanogenMod 12.1 android source Open-TEE builds. To
do this I run:

  • source ./build/envsetup.sh
  • breakfast
  • make clean && make opentee-engine

This builds successfully. But in the android source from Googles repo does
not build with Open-TEE as shown in the above error. Again is this just me
or is everyone getting this?


Reply to this email directly or view it on GitHub
#10 (comment).

@lordqwerty
Copy link
Contributor Author

Ah right ok. I'll continue to use CyanogenMod for now.
Feel free to close the issue.

Thank you

@brianmcgillion brianmcgillion changed the title Android build: tee_storage_api build error Android build: tee_storage_api build error - Android M fixes required Oct 7, 2015
@brianmcgillion brianmcgillion self-assigned this Oct 7, 2015
@brianmcgillion
Copy link
Member

Will leave it open, and have marked it to be done, when I have time to test with an M tree (soon, I hope :)

@brianmcfadden
Copy link

Not an issue with boringssl. openssl was removed from the Android 6.0.0 manifest repo. Try a 'git clone https://android.googlesource.com/platform/external/openssl' into the external directory and rebuild, maybe? You'd still need to comment out some boringssl modules to let the build behave correctly with openssl. No, it still has errors.

prebuilts/misc/linux-x86/ccache/ccache prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/arm-linux-androideabi-g++ -nostdlib -Wl,-soname,libInternalApi.so -Wl,--gc-sections -Wl,-shared  -Lout/target/product/generic/obj/lib out/target/product/generic/obj/lib/crtbegin_so.o             out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/callbacks.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/openssl_1_0_2_beta_rsa_oaep.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_bigint.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_cancellation.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_crypto_api.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_internal_client_api.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_memory.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_panic.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/opentee_storage_common.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/opentee_internal_api.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_storage_api.o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/tee_time_api.o          -Wl,--whole-archive   -Wl,--no-whole-archive   out/target/product/generic/obj/STATIC_LIBRARIES/libunwind_llvm_intermediates/libunwind_llvm.a out/target/product/generic/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a    prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/lib/armv7-a/libatomic.a prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/armv7-a/libgcc.a -lssl -lcrypto -lc -lc++ -ldl -lc -lm  -o out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/LINKED/libInternalApi.so  -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--build-id=md5 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--icf=safe -Wl,--hash-style=gnu -Wl,--fix-cortex-a8 -Wl,--hash-style=sysv   -Wl,--exclude-libs,libunwind_llvm.a -Wl,--no-undefined out/target/product/generic/obj/lib/crtend_so.o 
Open-TEE/emulator/internal_api/openssl_1_0_2_beta_rsa_oaep.c:121: error: undefined reference to 'OPENSSL_malloc'
Open-TEE/emulator/internal_api/openssl_1_0_2_beta_rsa_oaep.c:138: error: undefined reference to 'OPENSSL_free'
Open-TEE/emulator/internal_api/openssl_1_0_2_beta_rsa_oaep.c:181: error: undefined reference to 'OPENSSL_malloc'
Open-TEE/emulator/internal_api/openssl_1_0_2_beta_rsa_oaep.c:232: error: undefined reference to 'OPENSSL_free'
Open-TEE/emulator/internal_api/openssl_1_0_2_beta_rsa_oaep.c:239: error: undefined reference to 'OPENSSL_free'
Open-TEE/emulator/internal_api/tee_bigint.c:130: error: undefined reference to 'BN_num_bytes'
Open-TEE/emulator/internal_api/tee_bigint.c:141: error: undefined reference to 'BN_is_negative'
Open-TEE/emulator/internal_api/tee_bigint.c:282: error: undefined reference to 'BN_num_bytes'
Open-TEE/emulator/internal_api/tee_bigint.c:289: error: undefined reference to 'BN_num_bytes'
Open-TEE/emulator/internal_api/tee_bigint.c:352: error: undefined reference to 'BN_num_bytes'
Open-TEE/emulator/internal_api/tee_bigint.c:367: error: undefined reference to 'BN_is_negative'
Open-TEE/emulator/internal_api/tee_bigint.c:602: error: undefined reference to 'BN_is_negative'
Open-TEE/emulator/internal_api/tee_bigint.c:1076: error: undefined reference to 'BN_is_one'
Open-TEE/emulator/internal_api/tee_bigint.c:1134: error: undefined reference to 'BN_one'
Open-TEE/emulator/internal_api/tee_bigint.c:1135: error: undefined reference to 'BN_zero'
Open-TEE/emulator/internal_api/tee_bigint.c:1136: error: undefined reference to 'BN_zero'
Open-TEE/emulator/internal_api/tee_bigint.c:1137: error: undefined reference to 'BN_one'
Open-TEE/emulator/internal_api/tee_bigint.c:1139: error: undefined reference to 'BN_is_zero'
Open-TEE/emulator/internal_api/tee_crypto_api.c:92: error: undefined reference to 'OpenSSL_add_all_algorithms'
collect2: error: ld returned 1 exit status
make: *** [out/target/product/generic/obj/SHARED_LIBRARIES/libInternalApi_intermediates/LINKED/libInternalApi.so] Error 1

There is some more work to do. Maybe it's time to migrate away from openssl.

@brianmcfadden
Copy link

It works on Android 6.0.0. I've got a manual process for build and install, but it wouldn't take alot of effort to make it a little more automated. It allows everything in Android to use boringssl and OpenTEE can use openssl.

  • Repo init, repo sync, and build your Android tree.
  • Git clone openssl into external/openssl.
  • Change all the references to libssl and libcrypto in the external/openssl *.mk files to libssl_openssl and libcrypto_openssl.
  • mm inside external/openssl to build it.
  • Link (or copy) in the OpenTEE and change all the references in it's make files from libssl and libcrypto to libssl_openssl and libcrypto_openssl. mm it.
  • Start the emulator.
  • run the install_android.sh script.
  • copy the libssl_openssl.so and libcrypto_openssl.so files from wherever they are in your $OUT directory to /system/lib
  • adb shell opentee-engine
10-17 20:30:03.493  1425  1425 E tee_manager: ../../OpenTEE/emulator/manager/ext_storage_stream_api_posix.c:storage_ext_init:100  storage path(/data/.TEE_secure_storage/)
10-17 20:30:03.500  1425  1425 E tee_manager: ../../OpenTEE/emulator/manager/mainloop.c:lib_main_loop:221  Entering the Manager mainloop
10-17 20:30:03.561  1426  1426 E tee_launcher: ../../OpenTEE/emulator/launcher/launcher_mainloop.c:lib_main_loop:151  Entering the launcher mainloop

conn_test_app can run to completion.

!!! SUCCESS !!!
Connection test app did not found any errors.
^^^ SUCCESS ^^^

Huzzah!

@YangRongAtGit
Copy link

YangRongAtGit commented Aug 23, 2016

Hello Brianmcfadden,
I had the same build error about undefined reference to OpenSSL functions. Is it possible that you could describe how to build OpenSSL in ASOP in details?

I git clone the openssl into external/openssl

Based on the the openssl project https://github.com/eighthave/openssl-android
I added different Android.mk files in the external/openssl, external/openssl/apps, external/openssl/crypto and external/openssl/ssl folder, added android-config.mk, and Application.mk to external/openssl folder. But when I run mm.

It had an error:

build/core/base_rules.mk:217: *** external/openssl/crypto: MODULE.TARGET.SHARED_LIBRARIES.libcrypto already defined by external/boringssl.
build/core/ninja.mk:155: recipe for target 'out/build-aosp_arm-mmm-external_openssl_Android.mk.ninja' failed
make: *** [out/build-aosp_arm-mmm-external_openssl_Android.mk.ninja] Error 1
make: Leaving directory '/home/rong/projects/Android/src'

I also tried to git clone the repository git clone https://github.com/eighthave/openssl-android .
directly, got the same error.

Shell I use boring instead openssl?
Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants