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:
parent
dfefa2f6dc
commit
94106ddc85
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue