|
@@ -725,6 +725,8 @@ static struct crypto_alg xts_aes_alg = {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+static int xts_aes_alg_reg;
|
|
|
+
|
|
|
static int ctr_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
|
|
|
unsigned int key_len)
|
|
|
{
|
|
@@ -846,6 +848,8 @@ static struct crypto_alg ctr_aes_alg = {
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+static int ctr_aes_alg_reg;
|
|
|
+
|
|
|
static int __init aes_s390_init(void)
|
|
|
{
|
|
|
int ret;
|
|
@@ -884,6 +888,7 @@ static int __init aes_s390_init(void)
|
|
|
ret = crypto_register_alg(&xts_aes_alg);
|
|
|
if (ret)
|
|
|
goto xts_aes_err;
|
|
|
+ xts_aes_alg_reg = 1;
|
|
|
}
|
|
|
|
|
|
if (crypt_s390_func_available(KMCTR_AES_128_ENCRYPT,
|
|
@@ -902,6 +907,7 @@ static int __init aes_s390_init(void)
|
|
|
free_page((unsigned long) ctrblk);
|
|
|
goto ctr_aes_err;
|
|
|
}
|
|
|
+ ctr_aes_alg_reg = 1;
|
|
|
}
|
|
|
|
|
|
out:
|
|
@@ -921,9 +927,12 @@ aes_err:
|
|
|
|
|
|
static void __exit aes_s390_fini(void)
|
|
|
{
|
|
|
- crypto_unregister_alg(&ctr_aes_alg);
|
|
|
- free_page((unsigned long) ctrblk);
|
|
|
- crypto_unregister_alg(&xts_aes_alg);
|
|
|
+ if (ctr_aes_alg_reg) {
|
|
|
+ crypto_unregister_alg(&ctr_aes_alg);
|
|
|
+ free_page((unsigned long) ctrblk);
|
|
|
+ }
|
|
|
+ if (xts_aes_alg_reg)
|
|
|
+ crypto_unregister_alg(&xts_aes_alg);
|
|
|
crypto_unregister_alg(&cbc_aes_alg);
|
|
|
crypto_unregister_alg(&ecb_aes_alg);
|
|
|
crypto_unregister_alg(&aes_alg);
|