From: Numan Siddique <[email protected]> Since we use the common action parsing code between ovn-controller and br-controller, ovnacts_encode() expects to pass a group table and meter table for the actions - ct_lb, select, log and set_meter. Until we have a separate action parsing definitions for br-controller, we just maintain these tables and pass it in the 'struct ovnact_encode_params' in the ovnact_encode() to avoid probable NULL dereferncing.
It is better to address this way, than checking for group_table/meter_table NULL in the encode functions. Signed-off-by: Numan Siddique <[email protected]> --- br-controller/en-lflow.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/br-controller/en-lflow.c b/br-controller/en-lflow.c index c2b3d2377b..b73c36c4fc 100644 --- a/br-controller/en-lflow.c +++ b/br-controller/en-lflow.c @@ -27,6 +27,7 @@ #include "en-lflow.h" #include "en-bridge-data.h" #include "include/ovn/actions.h" +#include "lib/extend-table.h" #include "lib/inc-proc-eng.h" #include "lib/lflow-conj-ids.h" #include "lib/ovn-br-idl.h" @@ -48,6 +49,17 @@ struct ed_type_lflow_output_data { /* conjunction ID usage information of lflows */ struct conj_ids conj_ids; + /* Since we use the common action parsing code between ovn-controller + * and br-controller, ovnacts_encode() expects to pass a + * group table and meter table for the actions - ct_lb, select, log and + * set_meter. Until we have a separate action parsing definitions + * for br-controller, we just maintain these tables and pass it in + * the 'struct ovnact_encode_params' in the ovnact_encode() to make + * coverity happy and to avoid probable NULL dereferncing. + * */ + struct ovn_extend_table group_table; + struct ovn_extend_table meter_table; + /* Data which is persistent and not cleared during * full recompute. */ struct lflow_output_persistent_data pd; @@ -61,6 +73,8 @@ struct lflow_ctx_in { struct lflow_ctx_out { struct conj_ids *conj_ids; + struct ovn_extend_table *group_table; + struct ovn_extend_table *meter_table; }; struct lookup_port_aux { @@ -90,7 +104,8 @@ static void add_matches_to_flow_table(const struct ovnbrrec_logical_flow *, struct hmap *matches, uint8_t ptable, uint8_t output_ptable, - struct ofpbuf *ovnacts); + struct ofpbuf *ovnacts, + struct lflow_ctx_out *); void *en_lflow_output_init(struct engine_node *node OVS_UNUSED, struct engine_arg *arg OVS_UNUSED) @@ -98,6 +113,8 @@ void *en_lflow_output_init(struct engine_node *node OVS_UNUSED, struct ed_type_lflow_output_data *lflow_data = xzalloc(sizeof *lflow_data); ovn_init_symtab(&lflow_data->pd.symtab); lflow_conj_ids_init(&lflow_data->conj_ids); + ovn_extend_table_init(&lflow_data->group_table, "group-table", 0); + ovn_extend_table_init(&lflow_data->meter_table, "meter-table", 0); br_controller_extend_symtab(&lflow_data->pd.symtab); return lflow_data; @@ -108,6 +125,8 @@ void en_lflow_output_cleanup(void *data_) struct ed_type_lflow_output_data *lflow_data = data_; lflow_conj_ids_destroy(&lflow_data->conj_ids); expr_symtab_destroy(&lflow_data->pd.symtab); + ovn_extend_table_destroy(&lflow_data->group_table); + ovn_extend_table_destroy(&lflow_data->meter_table); shash_destroy(&lflow_data->pd.symtab); } @@ -164,6 +183,8 @@ init_lflow_ctx(struct engine_node *node, l_ctx_in->brrec_lflow_table = lflow_table; l_ctx_in->symtab = &lflow_data->pd.symtab; l_ctx_out->conj_ids = &lflow_data->conj_ids; + l_ctx_out->group_table = &lflow_data->group_table; + l_ctx_out->meter_table = &lflow_data->meter_table; } static void @@ -251,7 +272,7 @@ consider_logical_flow(const struct ovnbrrec_logical_flow *lflow, add_matches_to_flow_table(lflow, br, matches, ptable, BR_OFTABLE_SAVE_INPORT, - &ovnacts); + &ovnacts, l_ctx_out); done: expr_destroy(expr); @@ -312,7 +333,8 @@ static void add_matches_to_flow_table(const struct ovnbrrec_logical_flow *lflow, const struct ovn_bridge *br, struct hmap *matches, uint8_t ptable, - uint8_t output_ptable, struct ofpbuf *ovnacts) + uint8_t output_ptable, struct ofpbuf *ovnacts, + struct lflow_ctx_out *l_ctx_out) { struct lookup_port_aux aux = { .lflow = lflow, @@ -327,6 +349,8 @@ add_matches_to_flow_table(const struct ovnbrrec_logical_flow *lflow, .aux = &aux, .is_switch = true, .lflow_uuid = lflow->header_.uuid, + .group_table = l_ctx_out->group_table, + .meter_table = l_ctx_out->meter_table, .pipeline = OVNACT_P_INGRESS, .ingress_ptable = BR_OFTABLE_LOG_INGRESS_PIPELINE, -- 2.52.0 _______________________________________________ dev mailing list [email protected] https://mail.openvswitch.org/mailman/listinfo/ovs-dev
