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 <[email protected]>
---
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