[PATCH 04/16] common/cnxk: validate cipher key length in IPsec SA fill
Tejasree Kondoj
ktejasree at marvell.com
Mon Oct 19 15:07:45 CEST 2026
From: Rupesh Chiluka <rchiluka at marvell.com>
The IPsec SA builders copy the cipher key into the fixed 32-byte
SA context field via memcpy. The per-algorithm length validation
only runs for AES/DES/3DES and AES-GMAC, so a NULL-cipher SA with
a non-zero, oversized key.length skips every check.
Reject any key longer than the SA cipher key field with -EINVAL.
Signed-off-by: Rupesh Chiluka <rchiluka at marvell.com>
---
drivers/common/cnxk/cnxk_security.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/drivers/common/cnxk/cnxk_security.c b/drivers/common/cnxk/cnxk_security.c
index 228ff2781d..9f734c16b1 100644
--- a/drivers/common/cnxk/cnxk_security.c
+++ b/drivers/common/cnxk/cnxk_security.c
@@ -170,6 +170,10 @@ ot_ipsec_sa_common_param_fill(union roc_ot_ipsec_sa_word2 *w2, uint8_t *cipher_k
w2->s.spi = ipsec_xfrm->spi;
if (key != NULL && length != 0) {
+ if (length > ROC_CTX_MAX_CKEY_LEN) {
+ plt_err("Invalid cipher key length");
+ return -EINVAL;
+ }
/* Validate key length and set AES key len before copy to avoid overflow */
if (w2->s.enc_type == ROC_IE_SA_ENC_AES_CBC ||
w2->s.enc_type == ROC_IE_SA_ENC_AES_CTR ||
@@ -1012,8 +1016,13 @@ on_fill_ipsec_common_sa(struct rte_security_ipsec_xform *ipsec,
}
}
- if (cipher_key_len != 0)
+ if (cipher_key_len != 0) {
+ if (cipher_key_len > (int)sizeof(common_sa->cipher_key)) {
+ plt_err("Invalid cipher key length");
+ return -EINVAL;
+ }
memcpy(common_sa->cipher_key, cipher_key, cipher_key_len);
+ }
return 0;
}
@@ -1403,6 +1412,10 @@ ow_ipsec_sa_common_param_fill(union roc_ow_ipsec_sa_word2 *w2, uint8_t *cipher_k
w2->s.spi = ipsec_xfrm->spi;
if (key != NULL && length != 0) {
+ if (length > ROC_CTX_MAX_CKEY_LEN) {
+ plt_err("Invalid cipher key length");
+ return -EINVAL;
+ }
/* Validate key length and set AES key len before copy to avoid overflow */
if (w2->s.enc_type == ROC_IE_SA_ENC_AES_CBC ||
w2->s.enc_type == ROC_IE_SA_ENC_AES_CTR ||
--
2.43.0
More information about the dev
mailing list