Skip to content

Commit

Permalink
s390/crypto: fix aes_s390 crypto module unload problem
Browse files Browse the repository at this point in the history
If a machine has no hardware support for the xts-aes or ctr-aes algorithms
they are not registered in aes_s390_init. But aes_s390_fini unconditionally
unregisters the algorithms which causes crypto_remove_alg to crash.
Add two flag variables to remember if xts-aes and ctr-aes have been added.

Signed-off-by: Ingo Tuchscherer <ingo.tuchscherer@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
  • Loading branch information
Ingo Tuchscherer authored and Martin Schwidefsky committed Oct 24, 2013
1 parent dc3ac5f commit 4f57ba7
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions arch/s390/crypto/aes_s390.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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,
Expand All @@ -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:
Expand All @@ -921,9 +927,12 @@ static int __init aes_s390_init(void)

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);
Expand Down

0 comments on commit 4f57ba7

Please sign in to comment.