mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-19 12:00:00 +00:00
net/mlx5: Avoid double free in fs init error unwinding path
In below code flow, for ingress acl table root ns memory leads to double free. mlx5_init_fs init_ingress_acls_root_ns() init_ingress_acl_root_ns kfree(steering->esw_ingress_root_ns); /* steering->esw_ingress_root_ns is not marked NULL */ mlx5_cleanup_fs cleanup_ingress_acls_root_ns steering->esw_ingress_root_ns non NULL check passes. kfree(steering->esw_ingress_root_ns); /* double free */ Similar issue exist for other tables. Hence zero out the pointers to not process the table again. Fixes: 9b93ab981e3bf ("net/mlx5: Separate ingress/egress namespaces for each vport") Fixes: 40c3eebb49e51 ("net/mlx5: Add support in RDMA RX steering") Signed-off-by: Parav Pandit <parav@mellanox.com> Reviewed-by: Mark Bloch <markb@mellanox.com> Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
This commit is contained in:
parent
905f6bd30b
commit
9414277a5d
@ -2427,6 +2427,7 @@ static void cleanup_egress_acls_root_ns(struct mlx5_core_dev *dev)
|
|||||||
cleanup_root_ns(steering->esw_egress_root_ns[i]);
|
cleanup_root_ns(steering->esw_egress_root_ns[i]);
|
||||||
|
|
||||||
kfree(steering->esw_egress_root_ns);
|
kfree(steering->esw_egress_root_ns);
|
||||||
|
steering->esw_egress_root_ns = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cleanup_ingress_acls_root_ns(struct mlx5_core_dev *dev)
|
static void cleanup_ingress_acls_root_ns(struct mlx5_core_dev *dev)
|
||||||
@ -2441,6 +2442,7 @@ static void cleanup_ingress_acls_root_ns(struct mlx5_core_dev *dev)
|
|||||||
cleanup_root_ns(steering->esw_ingress_root_ns[i]);
|
cleanup_root_ns(steering->esw_ingress_root_ns[i]);
|
||||||
|
|
||||||
kfree(steering->esw_ingress_root_ns);
|
kfree(steering->esw_ingress_root_ns);
|
||||||
|
steering->esw_ingress_root_ns = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mlx5_cleanup_fs(struct mlx5_core_dev *dev)
|
void mlx5_cleanup_fs(struct mlx5_core_dev *dev)
|
||||||
@ -2625,6 +2627,7 @@ cleanup_root_ns:
|
|||||||
for (i--; i >= 0; i--)
|
for (i--; i >= 0; i--)
|
||||||
cleanup_root_ns(steering->esw_egress_root_ns[i]);
|
cleanup_root_ns(steering->esw_egress_root_ns[i]);
|
||||||
kfree(steering->esw_egress_root_ns);
|
kfree(steering->esw_egress_root_ns);
|
||||||
|
steering->esw_egress_root_ns = NULL;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2652,6 +2655,7 @@ cleanup_root_ns:
|
|||||||
for (i--; i >= 0; i--)
|
for (i--; i >= 0; i--)
|
||||||
cleanup_root_ns(steering->esw_ingress_root_ns[i]);
|
cleanup_root_ns(steering->esw_ingress_root_ns[i]);
|
||||||
kfree(steering->esw_ingress_root_ns);
|
kfree(steering->esw_ingress_root_ns);
|
||||||
|
steering->esw_ingress_root_ns = NULL;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user