[PATCH] crypto/cnxk: fix AE table get on unprobed device

Sucharitha Sarananaga ssarananaga at marvell.com
Fri Oct 9 13:41:42 CEST 2026


rte_pmd_cnxk_ae_ec_grp_table_get() and rte_pmd_cnxk_ae_fpm_table_get()
checked rte_cryptodev_pmd_get_dev() against NULL, but that helper
always returns a valid pointer into the static device array, even for
an unprobed dev_id. This led to a NULL dereference on dev->data when
called with a dev_id that has no probed device.

Use rte_cryptodev_is_valid_dev() to validate dev_id before
dereferencing dev->data, and reject a NULL nb_max_entries pointer in
rte_pmd_cnxk_ae_ec_grp_table_get().

Fixes: 53ff25b1086b ("crypto/cnxk: add API to get EC group table address")
Fixes: a1b4cc32591d ("crypto/cnxk: add API to get FPM table address")

Signed-off-by: Sucharitha Sarananaga <ssarananaga at marvell.com>
---
 drivers/crypto/cnxk/cnxk_cryptodev_ops.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/cnxk/cnxk_cryptodev_ops.c b/drivers/crypto/cnxk/cnxk_cryptodev_ops.c
index 4c9bacecdd..b0ae8c7298 100644
--- a/drivers/crypto/cnxk/cnxk_cryptodev_ops.c
+++ b/drivers/crypto/cnxk/cnxk_cryptodev_ops.c
@@ -1131,12 +1131,12 @@ rte_pmd_cnxk_ae_fpm_table_get(uint8_t dev_id)
 	struct rte_cryptodev *dev;
 	struct cnxk_cpt_vf *vf;
 
-	dev = rte_cryptodev_pmd_get_dev(dev_id);
-	if (dev == NULL) {
+	if (!rte_cryptodev_is_valid_dev(dev_id)) {
 		plt_err("Invalid dev_id %u", dev_id);
 		return NULL;
 	}
 
+	dev = rte_cryptodev_pmd_get_dev(dev_id);
 	vf = dev->data->dev_private;
 	if (vf == NULL) {
 		plt_err("VF is not initialized");
@@ -1153,12 +1153,17 @@ rte_pmd_cnxk_ae_ec_grp_table_get(uint8_t dev_id, uint16_t *nb_max_entries)
 	struct rte_cryptodev *dev;
 	struct cnxk_cpt_vf *vf;
 
-	dev = rte_cryptodev_pmd_get_dev(dev_id);
-	if (dev == NULL) {
+	if (nb_max_entries == NULL) {
+		plt_err("Invalid nb_max_entries pointer");
+		return NULL;
+	}
+
+	if (!rte_cryptodev_is_valid_dev(dev_id)) {
 		plt_err("Invalid dev_id %u", dev_id);
 		return NULL;
 	}
 
+	dev = rte_cryptodev_pmd_get_dev(dev_id);
 	vf = dev->data->dev_private;
 	if (vf == NULL) {
 		plt_err("VF is not initialized");
-- 
2.54.0



More information about the dev mailing list