Android Meeting SDK ANR com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decryptInternal

###Andorid Meeting SDK:
We are facing a recurring ANR (Application Not Responding) issue related to keystore decryption while using the Zoom Android SDK.

From the stack trace, it appears that com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decryptInternal is making a blocking Binder call on the main thread, eventually leading to an ANR.

Below is the relevant part of the trace:

  #00  pc 0x0000000000085c6c  /apex/com.android.runtime/lib64/bionic/libc.so (syscall+28)
  #01  pc 0x0000000000201990  /apex/com.android.art/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks+136)
  #02  pc 0x00000000005ec884  /apex/com.android.art/lib64/libart.so (artJniMethodEnd+120)
  #03  pc 0x000000000068f80c  /apex/com.android.art/lib64/libart.so (art_jni_method_end+12)
  at android.os.BinderProxy.transactNative (Native method)
This Binder call may be taking too long, causing the main thread to wait, and triggering the ANR. Learn more

  at android.os.BinderProxy.transact (BinderProxy.java:571)
  at android.system.keystore2.IKeystoreSecurityLevel$Stub$Proxy.createOperation (IKeystoreSecurityLevel.java:311)
  at android.security.KeyStoreSecurityLevel.createOperation (KeyStoreSecurityLevel.java:81)
  at android.security.keystore2.AndroidKeyStoreCipherSpiBase.ensureKeystoreOperationInitialized (AndroidKeyStoreCipherSpiBase.java:334)
  at android.security.keystore2.AndroidKeyStoreCipherSpiBase.engineInit (AndroidKeyStoreCipherSpiBase.java:234)
  at javax.crypto.Cipher.tryTransformWithProvider (Cipher.java:2999)
  at javax.crypto.Cipher.tryCombinations (Cipher.java:2910)
  at javax.crypto.Cipher$SpiAndProviderUpdater.updateAndGetSpiAndProvider (Cipher.java:2815)
  at javax.crypto.Cipher.chooseProvider (Cipher.java:792)
  at javax.crypto.Cipher.init (Cipher.java:1307)
  at javax.crypto.Cipher.init (Cipher.java:1242)
  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decryptInternal (AndroidKeystoreAesGcm.java:113)
  at com.google.crypto.tink.integration.android.AndroidKeystoreAesGcm.decrypt (AndroidKeystoreAesGcm.java:101)
  at com.google.crypto.tink.KeysetHandle.decrypt (KeysetHandle.java:845)
  at com.google.crypto.tink.KeysetHandle.readWithAssociatedData (KeysetHandle.java:732)
  at com.google.crypto.tink.KeysetHandle.read (KeysetHandle.java:713)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.read (AndroidKeysetManager.java:315)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.readOrGenerateNewKeyset (AndroidKeysetManager.java:288)
  at com.google.crypto.tink.integration.android.AndroidKeysetManager$Builder.build (AndroidKeysetManager.java:239)
  at us.zoom.libtools.storage.ZMEncryptedSharedPreferences.a (ZMEncryptedSharedPreferences.java:10)
  at us.zoom.libtools.storage.ZMEncryptedSharedPreferences.a (ZMEncryptedSharedPreferences.java:1)
  at us.zoom.libtools.storage.ZmSharePreferenceHelper.getSharedPreferences (ZmSharePreferenceHelper.java:32)
  at us.zoom.libtools.storage.ZmSharePreferenceHelper.getSharedPreferences (ZmSharePreferenceHelper.java:2)
  at us.zoom.libtools.storage.PreferenceUtil.getSharedPreferences (PreferenceUtil.java:1)
  at us.zoom.libtools.storage.PreferenceUtil.readBooleanValue (PreferenceUtil.java:4)
  at com.zipow.videobox.utils.meeting.j.a (ZmMeetingUtils.java:675)
  at com.zipow.videobox.conference.ui.view.bottomui.ZmRecycleMeetingBottomControlLayout.a (ZmRecycleMeetingBottomControlLayout.java:26)
  at com.zipow.videobox.conference.ui.view.bottomui.ZmRecycleMeetingBottomControlLayout.a (ZmRecycleMeetingBottomControlLayout.java:14)
  at com.zipow.videobox.conference.ui.container.control.c.Y (ZmBaseMeetingControlContainer.java:37)
  at com.zipow.videobox.conference.ui.container.control.c$y0.a (ZmBaseMeetingControlContainer.java:1)
  at com.zipow.videobox.conference.ui.container.control.c$y0.onChanged (ZmBaseMeetingControlContainer.java:1)
  at us.zoom.libtools.lifecycle.c$a.onChanged (ZmMutableLiveData.java:20)
  at androidx.lifecycle.LiveData.considerNotify (LiveData.java:133)
  at androidx.lifecycle.LiveData.dispatchingValue (LiveData.java:151)
  at androidx.lifecycle.LiveData.setValue (LiveData.java:309)
  at androidx.lifecycle.MutableLiveData.setValue (MutableLiveData.java:50)
  at us.zoom.libtools.lifecycle.c.setValue (ZmMutableLiveData.java:8)
  at com.zipow.videobox.conference.viewmodel.model.pip.a.a (ZmAudioConfPipModel.java:108)
  at com.zipow.videobox.conference.viewmodel.model.pip.a.handleUICommand (ZmAudioConfPipModel.java:53)
  at com.zipow.videobox.conference.viewmodel.ZmBaseConfViewModel.handleUICommand (ZmBaseConfViewModel.java:15)
  at com.zipow.videobox.conference.viewmodel.ZmConfMainViewModel.handleUICommand (ZmConfMainViewModel.java:1)
  at com.zipow.videobox.conference.viewmodel.b.a (ZmConfViewModelMgr.java:45)
  at com.zipow.videobox.conference.state.f.a (ZmConfUINativeEventImpl.java:4)
  at com.zipow.videobox.conference.state.c$b.a (ZmConfStateMgr.java:12)
  at com.zipow.videobox.conference.module.d.a (ZmBaseAudioStatusMgr.java:71)
  at com.zipow.videobox.conference.module.h.a (ZmConfStatusMgr.java:121)
  at com.zipow.videobox.conference.state.d.onUserStatusChanged (ZmConfStateProxy.java:2)
  at com.zipow.videobox.conference.state.c.onUserStatusChanged (ZmConfStateMgr.java:16)
  at com.zipow.videobox.conference.jni.ZmConfDefaultCallback.onUserStatusChanged (ZmConfDefaultCallback.java:7)
  at com.zipow.videobox.compat.b.a (ZmOldConfCallbackCompat.kt:23)
  at us.zoom.component.sdk.meetingsdk.sink.meeting.ZmMeetingUISink$OnBatchUserStatusChanged$1.invoke (ZmMeetingUISink.kt:8)
  at us.zoom.component.sdk.meetingsdk.sink.meeting.ZmMeetingUISink$OnBatchUserStatusChanged$1.invoke (ZmMeetingUISink.kt:1)
  at us.zoom.component.sdk.meetingsdk.sink.a.dispatchToObservers (ZmSinkDispatcher.kt:29)
  at us.zoom.component.sdk.meetingsdk.sink.meeting.ZmMeetingUISink.dispatchToObservers (unavailable:7)
  at us.zoom.component.sdk.meetingsdk.sink.meeting.ZmMeetingUISink.OnBatchUserStatusChanged (ZmMeetingUISink.kt:14)
  at us.zoom.reflection.utils.ZmClassLoaderReflection.onClassLoaderAttach (Native method)
  at us.zoom.reflection.utils.ZmClassLoaderReflection.attachClassLoader (ZmClassLoaderReflection.java:1)
  at android.os.MessageQueue.nativePollOnce (Native method)
  at android.os.MessageQueue.next (MessageQueue.java:335)
  at android.os.Looper.loopOnce (Looper.java:169)
  at android.os.Looper.loop (Looper.java:338)
  at android.app.ActivityThread.main (ActivityThread.java:8093)
  at java.lang.reflect.Method.invoke (Native method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:579)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1045)

Device/Environment

  • Android 12

  • Zoom SDK version:6.5.1