android: Leak the private key reference on Jelly Bean to avoid a bug in the framework

A bug in the framework on Android Jelly Bean causes a SIGSEGV when the private
key object returned from KeyChain.getPrivateKey is garbage collected.
Leaking the global reference to that object prevents the garbage
collection and thereby the crash.
This commit is contained in:
Tobias Brunner 2012-09-24 16:56:37 +02:00
parent dfefa2f6dc
commit 94106ddc85
1 changed files with 10 additions and 1 deletions

View File

@ -232,7 +232,16 @@ METHOD(private_key_t, destroy, void,
JNIEnv *env;
androidjni_attach_thread(&env);
(*env)->DeleteGlobalRef(env, this->key);
if (android_sdk_version >= ANDROID_JELLY_BEAN)
{ /* there is a bug in JB that causes a SIGSEGV if the key object is
* garbage collected so we intentionally leak the reference to it */
DBG1(DBG_LIB, "intentionally leaking private key reference due to "
"a bug in the framework");
}
else
{
(*env)->DeleteGlobalRef(env, this->key);
}
(*env)->DeleteGlobalRef(env, this->signature_class);
androidjni_detach_thread();
this->pubkey->destroy(this->pubkey);