Commit c7260ca3 authored by Harald Freudenberger's avatar Harald Freudenberger Committed by Martin Schwidefsky

s390/crypto: Fix kernel crash on aes_s390 module remove.

A kernel crash occurs when the aes_s390 kernel module is
removed on machines < z14. This only happens on kernel
version 4.15 and higher on machines not supporting MSA 8.

The reason for the crash is a unconditional
crypto_unregister_aead() invocation where no previous
crypto_register_aead() had been called. The fix now
remembers if there has been a successful registration and
only then calls the unregister function upon kernel module
remove.

The code now crashing has been introduced with
"bf7fa038 s390/crypto: add s390 platform specific aes gcm support."
Signed-off-by: default avatarHarald Freudenberger <freude@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent c9f52c2d
...@@ -1047,6 +1047,7 @@ static struct aead_alg gcm_aes_aead = { ...@@ -1047,6 +1047,7 @@ static struct aead_alg gcm_aes_aead = {
static struct crypto_alg *aes_s390_algs_ptr[5]; static struct crypto_alg *aes_s390_algs_ptr[5];
static int aes_s390_algs_num; static int aes_s390_algs_num;
static struct aead_alg *aes_s390_aead_alg;
static int aes_s390_register_alg(struct crypto_alg *alg) static int aes_s390_register_alg(struct crypto_alg *alg)
{ {
...@@ -1065,7 +1066,8 @@ static void aes_s390_fini(void) ...@@ -1065,7 +1066,8 @@ static void aes_s390_fini(void)
if (ctrblk) if (ctrblk)
free_page((unsigned long) ctrblk); free_page((unsigned long) ctrblk);
crypto_unregister_aead(&gcm_aes_aead); if (aes_s390_aead_alg)
crypto_unregister_aead(aes_s390_aead_alg);
} }
static int __init aes_s390_init(void) static int __init aes_s390_init(void)
...@@ -1123,6 +1125,7 @@ static int __init aes_s390_init(void) ...@@ -1123,6 +1125,7 @@ static int __init aes_s390_init(void)
ret = crypto_register_aead(&gcm_aes_aead); ret = crypto_register_aead(&gcm_aes_aead);
if (ret) if (ret)
goto out_err; goto out_err;
aes_s390_aead_alg = &gcm_aes_aead;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment