[14/20] net/ice: avoid fix memory leaks in register parser

Message ID tencent_F0370FE1A96004830EE477FD888C0850CC06@qq.com (mailing list archive)
State Changes Requested, archived
Delegated to: David Marchand
Headers
Series fix memory leaks in error handling |

Checks

Context Check Description
ci/checkpatch success coding style OK

Commit Message

Weiguo Li Feb. 22, 2022, 6:18 p.m. UTC
  1) When 'ice_get_parser_list()' fails and return, 'parser_node' is not
   released, we can move the parser list action ahead of the memory
   allocation to avoid this memory leak.
2) In another error handling branch, we release 'parser_node' directly
   to avoid the memory leak.

Fixes: 7615a6895009cb ("net/ice: rework for generic flow enabling")

Signed-off-by: Weiguo Li <liwg06@foxmail.com>
---
 drivers/net/ice/ice_generic_flow.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)
  

Patch

diff --git a/drivers/net/ice/ice_generic_flow.c b/drivers/net/ice/ice_generic_flow.c
index 53b1c0b69a..e3df090186 100644
--- a/drivers/net/ice/ice_generic_flow.c
+++ b/drivers/net/ice/ice_generic_flow.c
@@ -1920,6 +1920,10 @@  ice_register_parser(struct ice_flow_parser *parser,
 	struct ice_flow_parser_node *existing_node;
 	void *temp;
 
+	list = ice_get_parser_list(parser, ad);
+	if (list == NULL)
+		return -EINVAL;
+
 	parser_node = rte_zmalloc("ice_parser", sizeof(*parser_node), 0);
 	if (parser_node == NULL) {
 		PMD_DRV_LOG(ERR, "Failed to allocate memory.");
@@ -1927,10 +1931,6 @@  ice_register_parser(struct ice_flow_parser *parser,
 	}
 	parser_node->parser = parser;
 
-	list = ice_get_parser_list(parser, ad);
-	if (list == NULL)
-		return -EINVAL;
-
 	if (ad->devargs.pipe_mode_support) {
 		TAILQ_INSERT_TAIL(list, parser_node, node);
 	} else {
@@ -1961,6 +1961,7 @@  ice_register_parser(struct ice_flow_parser *parser,
 		} else if (parser->engine->type == ICE_FLOW_ENGINE_ACL) {
 			TAILQ_INSERT_HEAD(list, parser_node, node);
 		} else {
+			rte_free(parser_node);
 			return -EINVAL;
 		}
 	}