[dpdk-dev] [PATCH v3] examples/qos_meter: fix unchecked return value

Dumitrescu, Cristian cristian.dumitrescu at intel.com
Tue May 10 19:41:50 CEST 2016



> -----Original Message-----
> From: Mrozowicz, SlawomirX
> Sent: Monday, May 9, 2016 9:38 AM
> To: Dumitrescu, Cristian <cristian.dumitrescu at intel.com>
> Cc: dev at dpdk.org; Singh, Jasvinder <jasvinder.singh at intel.com>;
> Mrozowicz, SlawomirX <slawomirx.mrozowicz at intel.com>
> Subject: [PATCH v3] examples/qos_meter: fix unchecked return value
> 
> Fix issue reported by Coverity.
> 
> Coverity ID 30693: Unchecked return value
> check_return: Calling rte_meter_srtcm_config without checking return
> value.
> 
> Fixes: e6541fdec8b2 ("meter: initial import")
> 
> Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz at intel.com>
> ---
>  examples/qos_meter/main.c | 15 ++++++++++-----
>  examples/qos_meter/main.h |  2 +-
>  2 files changed, 11 insertions(+), 6 deletions(-)
> 
> diff --git a/examples/qos_meter/main.c b/examples/qos_meter/main.c
> index b968b00..7c69606 100644
> --- a/examples/qos_meter/main.c
> +++ b/examples/qos_meter/main.c
> @@ -133,14 +133,17 @@ struct rte_meter_trtcm_params
> app_trtcm_params[] = {
> 
>  FLOW_METER app_flows[APP_FLOWS_MAX];
> 
> -static void
> +static int
>  app_configure_flow_table(void)
>  {
>  	uint32_t i, j;
> +	int ret = 0;
> 
> -	for (i = 0, j = 0; i < APP_FLOWS_MAX; i ++, j = (j + 1) %
> RTE_DIM(PARAMS)){
> -		FUNC_CONFIG(&app_flows[i], &PARAMS[j]);
> -	}
> +	for (i = 0, j = 0; i < APP_FLOWS_MAX && ret == 0;
> +			i ++, j = (j + 1) % RTE_DIM(PARAMS))
> +		ret = FUNC_CONFIG(&app_flows[i], &PARAMS[j]);
> +
> +	return ret;
>  }

This is only returns the configuration status for the last flow and leaves undetected an error for any other flow. Why not check the status for each flow and return an error on first occurrence?
For (...){ret = FUNC_CONFIG(...); if (ret) return ret;}

> 
>  static inline void
> @@ -381,7 +384,9 @@ main(int argc, char **argv)
>  	rte_eth_promiscuous_enable(port_tx);
> 
>  	/* App configuration */
> -	app_configure_flow_table();
> +	ret = app_configure_flow_table();
> +	if (ret < 0)
> +		rte_exit(EXIT_FAILURE, "Invalid configure flow table\n");
> 
>  	/* Launch per-lcore init on every lcore */
>  	rte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER);
> diff --git a/examples/qos_meter/main.h b/examples/qos_meter/main.h
> index 530bf69..54867dc 100644
> --- a/examples/qos_meter/main.h
> +++ b/examples/qos_meter/main.h
> @@ -51,7 +51,7 @@ enum policer_action
> policer_table[e_RTE_METER_COLORS][e_RTE_METER_COLORS] =
>  #if APP_MODE == APP_MODE_FWD
> 
>  #define FUNC_METER(a,b,c,d) color, flow_id=flow_id, pkt_len=pkt_len,
> time=time
> -#define FUNC_CONFIG(a,b)
> +#define FUNC_CONFIG(a, b) 0
>  #define PARAMS	app_srtcm_params
>  #define FLOW_METER int
> 
> --
> 1.9.1



More information about the dev mailing list