[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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.