Commit 9a405105 authored by Richard Levitte's avatar Richard Levitte
Browse files

Geoff inspired me to nullify some pointers if initialisation went

wrong.  Additionally, just give a new value to hndidx once.
parent 4c4ea428
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -400,28 +400,42 @@ static int hwcrhk_init()
		goto err;
		}
	/* Everything's fine. */
	hndidx = RSA_get_ex_new_index(0, "nFast HWCryptoHook RSA key handle",
	if (hdnidx == -1)
		hndidx = RSA_get_ex_new_index(0,
			"nFast HWCryptoHook RSA key handle",
			NULL, NULL, hwcrhk_ex_free);
	return 1;
err:
	if(hwcrhk_dso)
		DSO_free(hwcrhk_dso);
	hwcrhk_dso = NULL;
	p_hwcrhk_Init = NULL;
	p_hwcrhk_Finish = NULL;
	p_hwcrhk_ModExp = NULL;
	p_hwcrhk_RSA = NULL;
	p_hwcrhk_RSAUnloadKey = NULL;
	p_hwcrhk_ModExpCRT = NULL;
	p_hwcrhk_RandomBytes = NULL;
	return 0;
	}

static int hwcrhk_finish()
	{
	int to_return = 1;
	if(hwcrhk_dso == NULL)
		{
		ENGINEerr(ENGINE_F_HWCRHK_FINISH,ENGINE_R_NOT_LOADED);
		return 0;
		to_return = 0;
		goto err;
		}
	release_context(hwcrhk_context);
	if(!DSO_free(hwcrhk_dso))
		{
		ENGINEerr(ENGINE_F_HWCRHK_FINISH,ENGINE_R_DSO_FAILURE);
		return 0;
		to_return = 0;
		goto err;
		}
 err:
	hwcrhk_dso = NULL;
	p_hwcrhk_Init = NULL;
	p_hwcrhk_Finish = NULL;
@@ -430,7 +444,7 @@ static int hwcrhk_finish()
	p_hwcrhk_RSAUnloadKey = NULL;
	p_hwcrhk_ModExpCRT = NULL;
	p_hwcrhk_RandomBytes = NULL;
	return 1;
	return to_return;
	}

/* A little mod_exp */