[v2,8/8] ipc: fix net/mlx5 memleak
Checks
Commit Message
When sending synchronous IPC requests, the caller must free the response
buffer even if the request returned failure. Fix the code to correctly
use the IPC API.
Bugzilla ID:228
Fixes: 9a8ab29b84d3 ("net/mlx5: replace IPC socket with EAL API")
Fixes: c18cf501a7af ("net/mlx5: enable secondary process to register DMA memory")
Cc: yskoh@mellanox.com
Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
---
drivers/net/mlx5/mlx5_mp.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
Comments
> On Apr 23, 2019, at 10:43 AM, Herakliusz Lipiec <herakliusz.lipiec@intel.com> wrote:
>
> When sending synchronous IPC requests, the caller must free the response
> buffer even if the request returned failure. Fix the code to correctly
> use the IPC API.
>
> Bugzilla ID:228
> Fixes: 9a8ab29b84d3 ("net/mlx5: replace IPC socket with EAL API")
> Fixes: c18cf501a7af ("net/mlx5: enable secondary process to register DMA memory")
> Cc: yskoh@mellanox.com
> Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
> ---
Acked-by: Yongseok Koh <yskoh@mellanox.com>
> drivers/net/mlx5/mlx5_mp.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/mlx5/mlx5_mp.c b/drivers/net/mlx5/mlx5_mp.c
> index cea74adb6..c9915b1d5 100644
> --- a/drivers/net/mlx5/mlx5_mp.c
> +++ b/drivers/net/mlx5/mlx5_mp.c
> @@ -258,6 +258,7 @@ mlx5_mp_req_mr_create(struct rte_eth_dev *dev, uintptr_t addr)
> if (ret) {
> DRV_LOG(ERR, "port %u request to primary process failed",
> dev->data->port_id);
> + free(mp_rep.msgs);
> return -rte_errno;
> }
> assert(mp_rep.nb_received == 1);
> @@ -295,7 +296,8 @@ mlx5_mp_req_verbs_cmd_fd(struct rte_eth_dev *dev)
> if (ret) {
> DRV_LOG(ERR, "port %u request to primary process failed",
> dev->data->port_id);
> - return -rte_errno;
> + ret = -rte_errno;
> + goto exit;
> }
> assert(mp_rep.nb_received == 1);
> mp_res = &mp_rep.msgs[0];
> --
> 2.17.2
>
@@ -258,6 +258,7 @@ mlx5_mp_req_mr_create(struct rte_eth_dev *dev, uintptr_t addr)
if (ret) {
DRV_LOG(ERR, "port %u request to primary process failed",
dev->data->port_id);
+ free(mp_rep.msgs);
return -rte_errno;
}
assert(mp_rep.nb_received == 1);
@@ -295,7 +296,8 @@ mlx5_mp_req_verbs_cmd_fd(struct rte_eth_dev *dev)
if (ret) {
DRV_LOG(ERR, "port %u request to primary process failed",
dev->data->port_id);
- return -rte_errno;
+ ret = -rte_errno;
+ goto exit;
}
assert(mp_rep.nb_received == 1);
mp_res = &mp_rep.msgs[0];