[PATCH v3 5/6] s390/crypto: Fix handling of EBUSY in PAES when req is pushed to crypto engine
Harald Freudenberger <[email protected]>
| Newsgroups | org.kernel.vger.linux-s390,org.kernel.vger.linux-crypto |
|---|---|
| Message-ID | <[email protected]> |
When a request is transferred to the engine via
crypto_transfer_skcipher_request_to_engine() there are two return
codes signaling a successful transfer: EINPROGRESS and EBUSY. However
the correct handling of EBUSY was missing and has been added as a
return code indicating a successful transfer to the crypto engine.
Fixes: 6cd87cb5ef6c ("s390/crypto: Rework protected key AES for true asynch support")
Signed-off-by: Harald Freudenberger <[email protected]>
Cc: [email protected] # 6.16+
---
arch/s390/crypto/paes_s390.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/s390/crypto/paes_s390.c b/arch/s390/crypto/paes_s390.c
index 03446bfac37f..1dd48f7a1bdf 100644
--- a/arch/s390/crypto/paes_s390.c
+++ b/arch/s390/crypto/paes_s390.c
@@ -494,6 +494,8 @@ static int ecb_paes_crypt(struct skcipher_request *req, unsigned long modifier)
if (rc == 0 || rc == -EKEYEXPIRED) {
atomic_inc(&ctx->via_engine_ctr);
rc = crypto_transfer_skcipher_request_to_engine(paes_crypto_engine, req);
+ if (rc == -EBUSY)
+ rc = -EINPROGRESS;
if (rc != -EINPROGRESS)
atomic_dec(&ctx->via_engine_ctr);
}
@@ -763,6 +765,8 @@ static int cbc_paes_crypt(struct skcipher_request *req, unsigned long modifier)
if (rc == 0 || rc == -EKEYEXPIRED) {
atomic_inc(&ctx->via_engine_ctr);
rc = crypto_transfer_skcipher_request_to_engine(paes_crypto_engine, req);
+ if (rc == -EBUSY)
+ rc = -EINPROGRESS;
if (rc != -EINPROGRESS)
atomic_dec(&ctx->via_engine_ctr);
}
@@ -1089,6 +1093,8 @@ static int ctr_paes_crypt(struct skcipher_request *req)
if (rc == 0 || rc == -EKEYEXPIRED) {
atomic_inc(&ctx->via_engine_ctr);
rc = crypto_transfer_skcipher_request_to_engine(paes_crypto_engine, req);
+ if (rc == -EBUSY)
+ rc = -EINPROGRESS;
if (rc != -EINPROGRESS)
atomic_dec(&ctx->via_engine_ctr);
}
@@ -1529,6 +1535,8 @@ static inline int xts_paes_crypt(struct skcipher_request *req, unsigned long mod
if (rc == 0 || rc == -EKEYEXPIRED) {
atomic_inc(&ctx->via_engine_ctr);
rc = crypto_transfer_skcipher_request_to_engine(paes_crypto_engine, req);
+ if (rc == -EBUSY)
+ rc = -EINPROGRESS;
if (rc != -EINPROGRESS)
atomic_dec(&ctx->via_engine_ctr);
}
--
2.43.0