Caused by android.security.KeyStoreException: Memory allocation failed (internal Keystore code: -41 message: In KeystoreOperation::update
Hi,
I have recently noticed that after migrating from SDK version 3.5.4 to 3.5.6 the following crash started to happen whenever we attempt to set the email upon application startup using the method IterableApi.setEmail.
The crash is affecting users with
- Android 13
- Android 14
Here is the stack trace:
Caused by T0.c: javax.crypto.IllegalBlockSizeException
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:187)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:138)
at androidx.startup.AppInitializer.initializeComponent(AppInitializer.java:117)
...
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1285)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7257)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8423)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Caused by javax.crypto.IllegalBlockSizeException:
at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:613)
at javax.crypto.Cipher.doFinal(Cipher.java:2074)
at com.iterable.iterableapi.IterableDataEncryptor.encryptModern(IterableDataEncryptor.kt:195)
at com.iterable.iterableapi.IterableDataEncryptor.encrypt(IterableDataEncryptor.kt:131)
at com.iterable.iterableapi.IterableKeychain.secureSave(IterableKeychain.kt:87)
at com.iterable.iterableapi.IterableKeychain.saveEmail(IterableKeychain.kt:92)
at com.iterable.iterableapi.IterableApi.storeAuthData(IterableApi.java:435)
at com.iterable.iterableapi.IterableApi.setEmail(IterableApi.java:741)
at com.iterable.iterableapi.IterableApi.setEmail(IterableApi.java:713)
...
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:138)
at androidx.startup.AppInitializer.initializeComponent(AppInitializer.java:117)
...
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1285)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7257)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8423)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Caused by android.security.KeyStoreException: Memory allocation failed (internal Keystore code: -41 message: In KeystoreOperation::update
Caused by:
0: In update: KeyMint::update failed.
1: Error::Km(ErrorCode(-41)))
at android.security.KeyStore2.getKeyStoreException(KeyStore2.java:369)
at android.security.KeyStoreOperation.handleExceptions(KeyStoreOperation.java:78)
at android.security.KeyStoreOperation.update(KeyStoreOperation.java:115)
at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer$MainDataStream.update(KeyStoreCryptoOperationChunkedStreamer.java:222)
at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer.update(KeyStoreCryptoOperationChunkedStreamer.java:156)
at android.security.keystore2.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:179)
at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:603)
at javax.crypto.Cipher.doFinal(Cipher.java:2074)
at com.iterable.iterableapi.IterableDataEncryptor.encryptModern(IterableDataEncryptor.kt:195)
at com.iterable.iterableapi.IterableDataEncryptor.encrypt(IterableDataEncryptor.kt:131)
at com.iterable.iterableapi.IterableKeychain.secureSave(IterableKeychain.kt:87)
at com.iterable.iterableapi.IterableKeychain.saveEmail(IterableKeychain.kt:92)
at com.iterable.iterableapi.IterableApi.storeAuthData(IterableApi.java:435)
at com.iterable.iterableapi.IterableApi.setEmail(IterableApi.java:741)
at com.iterable.iterableapi.IterableApi.setEmail(IterableApi.java:713)
...
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:180)
at androidx.startup.AppInitializer.doInitialize(AppInitializer.java:138)
at androidx.startup.AppInitializer.initializeComponent(AppInitializer.java:117)
...
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1285)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7257)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication()
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2292)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:240)
at android.os.Looper.loop(Looper.java:351)
at android.app.ActivityThread.main(ActivityThread.java:8423)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:584)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1013)
Can someone please help me out with this issue?
Hi @pedrotrabulo-hw . Thanks for logging this isssue. This is being addressed in https://github.com/Iterable/iterable-android-sdk/pull/884
Hi @pedrotrabulo-hw , thanks for reporting this one. We have now released 3.5.12 which addresses ANR causing block and also allows for developers to opt out of SDK using encryption mentioned here. Please give it a try and let us know your thoughts.
Thank you.