security: fix crash at accessing non-implemented ops
authorKonstantin Ananyev <konstantin.ananyev@intel.com>
Thu, 23 Apr 2020 15:10:42 +0000 (16:10 +0100)
committerAkhil Goyal <akhil.goyal@nxp.com>
Thu, 23 Apr 2020 15:56:38 +0000 (17:56 +0200)
Valid checks for optional function pointers inside dev-ops
were disabled by undefined macro.

Fixes: b6ee98547847 ("security: fix verification of parameters")
Cc: stable@dpdk.org
Signed-off-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
lib/librte_security/rte_security.c

index d475b09..dc9a3e8 100644 (file)
@@ -108,10 +108,11 @@ rte_security_set_pkt_metadata(struct rte_security_ctx *instance,
                              struct rte_mbuf *m, void *params)
 {
 #ifdef RTE_DEBUG
-       RTE_PTR_CHAIN3_OR_ERR_RET(instance, ops, set_pkt_metadata, -EINVAL,
-                       -ENOTSUP);
        RTE_PTR_OR_ERR_RET(sess, -EINVAL);
+       RTE_PTR_OR_ERR_RET(instance, -EINVAL);
+       RTE_PTR_OR_ERR_RET(instance->ops, -EINVAL);
 #endif
+       RTE_FUNC_PTR_OR_ERR_RET(*instance->ops->set_pkt_metadata, -ENOTSUP);
        return instance->ops->set_pkt_metadata(instance->device,
                                               sess, m, params);
 }
@@ -122,8 +123,10 @@ rte_security_get_userdata(struct rte_security_ctx *instance, uint64_t md)
        void *userdata = NULL;
 
 #ifdef RTE_DEBUG
-       RTE_PTR_CHAIN3_OR_ERR_RET(instance, ops, get_userdata, NULL, NULL);
+       RTE_PTR_OR_ERR_RET(instance, NULL);
+       RTE_PTR_OR_ERR_RET(instance->ops, NULL);
 #endif
+       RTE_FUNC_PTR_OR_ERR_RET(*instance->ops->get_userdata, NULL);
        if (instance->ops->get_userdata(instance->device, md, &userdata))
                return NULL;