> -----Original Message-----
> From: Anatoly Burakov <[email protected]>
> Sent: 14 October 2026 20:49
> To: [email protected]
> Subject: [PATCH v1 5/7] net/iavf: fix hash flow metadata leaks
> 
> Hash flow parsing allocates RSS metadata, but validation has no callback to
> release it. Creation also leaks the metadata if rule allocation or the 
> request to
> add the RSS rule fails.
> 
> Add a validation callback to release the parsed metadata, and free it on both
> creation failure paths. Parsing already checks the RSS inputs; validation does
> not add or remove a rule.
> 
> Fixes: 7be10c3004be ("net/iavf: add RSS configuration for VF")
> Fixes: 215a247b5f33 ("net/iavf: refactor hash flow")
> Cc: [email protected]
> 
> Signed-off-by: Anatoly Burakov <[email protected]>
> ---
>  drivers/net/intel/iavf/iavf_hash.c | 15 +++++++++++++++
>  1 file changed, 15 insertions(+)
> 
> diff --git a/drivers/net/intel/iavf/iavf_hash.c
> b/drivers/net/intel/iavf/iavf_hash.c
> index cef30cd08e1..6787a380f8e 100644
> --- a/drivers/net/intel/iavf/iavf_hash.c
> +++ b/drivers/net/intel/iavf/iavf_hash.c
> @@ -80,6 +80,9 @@ iavf_hash_destroy(struct iavf_adapter *ad, struct
> rte_flow *flow,  static void  iavf_hash_uninit_parser(struct iavf_adapter 
> *ad);
> static int
> +iavf_hash_validation(struct iavf_adapter *ad, struct rte_flow *flow,
> +                  void *meta, struct rte_flow_error *error); static int
>  iavf_hash_parse_pattern_action(struct iavf_adapter *ad,
>                              struct iavf_pattern_match_item *array,
>                              uint32_t array_len,
> @@ -680,6 +683,7 @@ static struct iavf_flow_engine iavf_hash_engine = {
>       .create = iavf_hash_create,
>       .destroy = iavf_hash_destroy,
>       .uninit = iavf_hash_uninit_parser,
> +     .validation = iavf_hash_validation,
>       .name = "hash",
>       .type = IAVF_FLOW_ENGINE_HASH,
>       .rule_size = sizeof(struct virtchnl_rss_cfg), @@ -1579,6 +1583,15 @@
> iavf_hash_parse_pattern_action(struct iavf_adapter *ad,
>       return ret;
>  }
> 
> +static int
> +iavf_hash_validation(__rte_unused struct iavf_adapter *ad,
> +                  __rte_unused struct rte_flow *flow, void *meta,
> +                  __rte_unused struct rte_flow_error *error) {
> +     rte_free(meta);
> +     return 0;
> +}
> +
>  static int
>  iavf_hash_create(__rte_unused struct iavf_adapter *ad,
>                __rte_unused struct rte_flow *flow, void *meta, @@ -1594,6
> +1607,7 @@ iavf_hash_create(__rte_unused struct iavf_adapter *ad,
>               rte_flow_error_set(error, EINVAL,
>                                  RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>                                  "No memory for rss rule");
> +             rte_free(meta);
>               return -ENOMEM;
>       }
> 
> @@ -1609,6 +1623,7 @@ iavf_hash_create(__rte_unused struct iavf_adapter
> *ad,
>                                  RTE_FLOW_ERROR_TYPE_HANDLE, NULL,
>                                  "Failed to add rss rule.");
>               rte_free(rss_cfg);
> +             rte_free(meta);
>               return -rte_errno;
>       }
> 
> --
> 2.52.0

Hi Anatoly, 

I had submitted similar fix  in this patch earlier.
https://patches.dpdk.org/project/dpdk/patch/[email protected]/

Thanks,
Anurag M



Reply via email to