Skip to content

Commit 8b9914c

Browse files
ayushsawldavem330
authored andcommitted
Crypto/chcr: Checking cra_refcnt before unregistering the algorithms
This patch puts a check for algorithm unregister, to avoid removal of driver if the algorithm is under use. Signed-off-by: Ayush Sawal <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent fb90a1c commit 8b9914c

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

drivers/crypto/chelsio/chcr_algo.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4391,22 +4391,32 @@ static int chcr_unregister_alg(void)
43914391
for (i = 0; i < ARRAY_SIZE(driver_algs); i++) {
43924392
switch (driver_algs[i].type & CRYPTO_ALG_TYPE_MASK) {
43934393
case CRYPTO_ALG_TYPE_SKCIPHER:
4394-
if (driver_algs[i].is_registered)
4394+
if (driver_algs[i].is_registered && refcount_read(
4395+
&driver_algs[i].alg.skcipher.base.cra_refcnt)
4396+
== 1) {
43954397
crypto_unregister_skcipher(
43964398
&driver_algs[i].alg.skcipher);
4399+
driver_algs[i].is_registered = 0;
4400+
}
43974401
break;
43984402
case CRYPTO_ALG_TYPE_AEAD:
4399-
if (driver_algs[i].is_registered)
4403+
if (driver_algs[i].is_registered && refcount_read(
4404+
&driver_algs[i].alg.aead.base.cra_refcnt) == 1) {
44004405
crypto_unregister_aead(
44014406
&driver_algs[i].alg.aead);
4407+
driver_algs[i].is_registered = 0;
4408+
}
44024409
break;
44034410
case CRYPTO_ALG_TYPE_AHASH:
4404-
if (driver_algs[i].is_registered)
4411+
if (driver_algs[i].is_registered && refcount_read(
4412+
&driver_algs[i].alg.hash.halg.base.cra_refcnt)
4413+
== 1) {
44054414
crypto_unregister_ahash(
44064415
&driver_algs[i].alg.hash);
4416+
driver_algs[i].is_registered = 0;
4417+
}
44074418
break;
44084419
}
4409-
driver_algs[i].is_registered = 0;
44104420
}
44114421
return 0;
44124422
}

0 commit comments

Comments
 (0)