crypto: qce - Improve the conditions for requesting AES fallback cipher
authorThara Gopinath <thara.gopinath@linaro.org>
Thu, 11 Feb 2021 20:01:25 +0000 (15:01 -0500)
committerHerbert Xu <herbert@gondor.apana.org.au>
Sun, 7 Mar 2021 04:13:16 +0000 (15:13 +1100)
The following are the conditions for requesting AES fallback cipher.
-  AES-192
- AES-XTS request with len <= 512 byte (Allow messages of length
  less than 512 bytes for all other AES encryption algorithms other
  than AES XTS)
- AES-XTS request with len > QCE_SECTOR_SIZE and is not a multiple
  of it

Signed-off-by: Thara Gopinath <thara.gopinath@linaro.org>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/qce/skcipher.c

index 11a2a30631afcd1a4a34a6da77da2c96583c6f3b..2e6ab1d33a3152e97707de169ded104461a90893 100644 (file)
@@ -274,14 +274,19 @@ static int qce_skcipher_crypt(struct skcipher_request *req, int encrypt)
                if (!IS_ALIGNED(req->cryptlen, blocksize))
                        return -EINVAL;
 
-       /* qce is hanging when AES-XTS request len > QCE_SECTOR_SIZE and
-        * is not a multiple of it; pass such requests to the fallback
+       /*
+        * Conditions for requesting a fallback cipher
+        * AES-192 (not supported by crypto engine (CE))
+        * AES-XTS request with len <= 512 byte (not recommended to use CE)
+        * AES-XTS request with len > QCE_SECTOR_SIZE and
+        * is not a multiple of it.(Revisit this condition to check if it is
+        * needed in all versions of CE)
         */
        if (IS_AES(rctx->flags) &&
-           (((keylen != AES_KEYSIZE_128 && keylen != AES_KEYSIZE_256) ||
-             req->cryptlen <= aes_sw_max_len) ||
-            (IS_XTS(rctx->flags) && req->cryptlen > QCE_SECTOR_SIZE &&
-             req->cryptlen % QCE_SECTOR_SIZE))) {
+           ((keylen != AES_KEYSIZE_128 && keylen != AES_KEYSIZE_256) ||
+           (IS_XTS(rctx->flags) && ((req->cryptlen <= aes_sw_max_len) ||
+           (req->cryptlen > QCE_SECTOR_SIZE &&
+           req->cryptlen % QCE_SECTOR_SIZE))))) {
                skcipher_request_set_tfm(&rctx->fallback_req, ctx->fallback);
                skcipher_request_set_callback(&rctx->fallback_req,
                                              req->base.flags,