The variable flow is used after being allocated but before being null-checked, which will cause a null pointer dereference if the allocation failed. Fix this and tidy up the error-checking logic in this function. Addresses-Coverity: CID 1497154: Null pointer dereferences (REVERSE_INULL) Signed-off-by: Alex Dewar <alex.dewar90@xxxxxxxxx> --- .../net/ethernet/mellanox/mlx5/core/en_tc.c | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c index b3c57b984a2a..ed308407be6f 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c @@ -4536,20 +4536,22 @@ mlx5e_alloc_flow(struct mlx5e_priv *priv, int attr_size, struct mlx5e_tc_flow_parse_attr *parse_attr; struct mlx5_flow_attr *attr; struct mlx5e_tc_flow *flow; - int out_index, err; + int out_index; flow = kzalloc(sizeof(*flow), GFP_KERNEL); + if (!flow) + return -ENOMEM; parse_attr = kvzalloc(sizeof(*parse_attr), GFP_KERNEL); + if (!parse_attr) + goto err_free_flow; flow->flags = flow_flags; flow->cookie = f->cookie; flow->priv = priv; attr = mlx5_alloc_flow_attr(get_flow_name_space(flow)); - if (!parse_attr || !flow || !attr) { - err = -ENOMEM; - goto err_free; - } + if (!attr) + goto err_free_parse_attr; flow->attr = attr; for (out_index = 0; out_index < MLX5_MAX_FLOW_FWD_VPORTS; out_index++) @@ -4564,11 +4566,11 @@ mlx5e_alloc_flow(struct mlx5e_priv *priv, int attr_size, return 0; -err_free: - kfree(flow); +err_free_parse_attr: kvfree(parse_attr); - kfree(attr); - return err; +err_free_flow: + kfree(flow); + return -ENOMEM; } static void -- 2.28.0