crypto: hisilicon/sec - fix the max length of AAD for the CCM mode
authorKai Ye <yekai13@huawei.com>
Sat, 22 Jan 2022 08:13:10 +0000 (16:13 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 31 Jan 2022 00:21:45 +0000 (11:21 +1100)
Fix the maximum length of AAD for the CCM mode due to the hardware limited.

Signed-off-by: Kai Ye <yekai13@huawei.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/hisilicon/sec2/sec_crypto.c

index 48abd38..8305eee 100644 (file)
@@ -63,6 +63,7 @@
 #define SEC_AUTH_CIPHER                0x1
 #define SEC_MAX_MAC_LEN                64
 #define SEC_MAX_AAD_LEN                65535
+#define SEC_MAX_CCM_AAD_LEN    65279
 #define SEC_TOTAL_MAC_SZ       (SEC_MAX_MAC_LEN * QM_Q_DEPTH)
 
 #define SEC_PBUF_SZ                    512
@@ -2220,6 +2221,10 @@ static int sec_aead_spec_check(struct sec_ctx *ctx, struct sec_req *sreq)
        }
 
        if (c_mode == SEC_CMODE_CCM) {
+               if (unlikely(req->assoclen > SEC_MAX_CCM_AAD_LEN)) {
+                       dev_err_ratelimited(dev, "CCM input aad parameter is too long!\n");
+                       return -EINVAL;
+               }
                ret = aead_iv_demension_check(req);
                if (ret) {
                        dev_err(dev, "aead input iv param error!\n");