mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
s390/crypto: Fix wrong return code to engine in asynch callbacks
When crypto_finalize_hash_request() or
crypto_finalize_skcipher_request() explicitly completes a request, the
do_one_request callback must return 0 to indicate successful
handling. Returning a negative error code causes the crypto engine to
assume the driver failed to take ownership and triggers a second
completion via crypto_request_complete(), resulting in a double
completion. This pattern occurs in paes_s390.c 4 times and once in
phmac_s390.c.
Fixed in phmac_do_one_request() and all four paes do_one_request
callbacks (ecb, cbc, ctr, xts) by returning 0 after explicit
finalization instead of propagating the error code.
Fixes: 6cd87cb5ef ("s390/crypto: Rework protected key AES for true asynch support")
Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Holger Dengler <dengler@linux.ibm.com>
Cc: stable@vger.kernel.org # 6.16+
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
3301483714
commit
ac14813201
|
|
@ -565,7 +565,7 @@ static int ecb_paes_do_one_request(struct crypto_engine *engine, void *areq)
|
|||
atomic_dec(&ctx->via_engine_ctr);
|
||||
crypto_finalize_skcipher_request(engine, req, rc);
|
||||
local_bh_enable();
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct skcipher_engine_alg ecb_paes_alg = {
|
||||
|
|
@ -828,7 +828,7 @@ static int cbc_paes_do_one_request(struct crypto_engine *engine, void *areq)
|
|||
atomic_dec(&ctx->via_engine_ctr);
|
||||
crypto_finalize_skcipher_request(engine, req, rc);
|
||||
local_bh_enable();
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct skcipher_engine_alg cbc_paes_alg = {
|
||||
|
|
@ -1144,7 +1144,7 @@ static int ctr_paes_do_one_request(struct crypto_engine *engine, void *areq)
|
|||
atomic_dec(&ctx->via_engine_ctr);
|
||||
crypto_finalize_skcipher_request(engine, req, rc);
|
||||
local_bh_enable();
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct skcipher_engine_alg ctr_paes_alg = {
|
||||
|
|
@ -1588,7 +1588,7 @@ static int xts_paes_do_one_request(struct crypto_engine *engine, void *areq)
|
|||
atomic_dec(&ctx->via_engine_ctr);
|
||||
crypto_finalize_skcipher_request(engine, req, rc);
|
||||
local_bh_enable();
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct skcipher_engine_alg xts_paes_alg = {
|
||||
|
|
|
|||
|
|
@ -926,7 +926,7 @@ static int phmac_do_one_request(struct crypto_engine *engine, void *areq)
|
|||
atomic_dec(&tfm_ctx->via_engine_ctr);
|
||||
crypto_finalize_hash_request(engine, req, rc);
|
||||
local_bh_enable();
|
||||
return rc;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define S390_ASYNC_PHMAC_ALG(x) \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user