diff --git a/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/interceptors/Keystore2Interceptor.kt b/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/interceptors/Keystore2Interceptor.kt index dbf7f18..ce69f0c 100644 --- a/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/interceptors/Keystore2Interceptor.kt +++ b/app/src/main/java/io/github/beakthoven/TrickyStoreOSS/interceptors/Keystore2Interceptor.kt @@ -77,14 +77,20 @@ object Keystore2Interceptor : BaseKeystoreInterceptor() { if (code == getKeyEntryTransaction) { if (KeyBoxUtils.hasKeyboxes()) { Logger.d("intercept pre $target uid=$callingUid pid=$callingPid dataSz=${data.dataSize()}") - kotlin.runCatching { + try { data.enforceInterface(IKeystoreService.DESCRIPTOR) - val descriptor = data.readTypedObject(KeyDescriptor.CREATOR) ?: return@runCatching + val descriptor = data.readTypedObject(KeyDescriptor.CREATOR) ?: return Skip if (PkgConfig.needGenerate(callingUid)) { val response = SecurityLevelInterceptor.getKeyResponse(callingUid, descriptor.alias) - ?: return@runCatching - Logger.i("Generate key for uid=$callingUid alias=${descriptor.alias}") - return createTypedObjectReply(response) + if (response != null) { + Logger.i("Found generated response for uid=$callingUid alias=${descriptor.alias}") + return createTypedObjectReply(response) + } else { + Logger.e("No generated response found for uid=$callingUid alias=${descriptor.alias}") + val nullParcel = Parcel.obtain() + nullParcel.writeTypedObject(null as KeyEntryResponse?, 0) + return OverrideReply(0, nullParcel) + } } else if (PkgConfig.needHack(callingUid)) { if (SecurityLevelInterceptor.shouldSkipLeafHack(callingUid, descriptor.alias)) { Logger.i("skip leaf hack for uid=$callingUid alias=${descriptor.alias}") @@ -94,7 +100,9 @@ object Keystore2Interceptor : BaseKeystoreInterceptor() { return createTypedObjectReply(response) } else { Logger.e("No generated response found for uid=$callingUid alias=${descriptor.alias}") - return@runCatching + val nullParcel = Parcel.obtain() + nullParcel.writeTypedObject(null as KeyEntryResponse?, 0) + return OverrideReply(0, nullParcel) } } else { Logger.i("proceeding with leaf hack for uid=$callingUid alias=${descriptor.alias}") @@ -102,8 +110,11 @@ object Keystore2Interceptor : BaseKeystoreInterceptor() { } } return Skip - } + } catch (e: Exception) { + Logger.e("Exception in onPreTransact uid=$callingUid pid=$callingPid!", e) + return Skip } + } } return Skip }