[v2,7/8] ipc: fix net/mlx4 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: 0b259b8e9655 ("net/mlx4: enable secondary process to register DMA memory")
Cc: yskoh@mellanox.com
Signed-off-by: Herakliusz Lipiec <herakliusz.lipiec@intel.com>
---
drivers/net/mlx4/mlx4_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: 0b259b8e9655 ("net/mlx4: 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/mlx4/mlx4_mp.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/mlx4/mlx4_mp.c b/drivers/net/mlx4/mlx4_mp.c
> index 183622453..f4cff7486 100644
> --- a/drivers/net/mlx4/mlx4_mp.c
> +++ b/drivers/net/mlx4/mlx4_mp.c
> @@ -255,6 +255,7 @@ mlx4_mp_req_mr_create(struct rte_eth_dev *dev, uintptr_t addr)
> if (ret) {
> ERROR("port %u request to primary process failed",
> dev->data->port_id);
> + free(mp_rep.msgs);
> return -rte_errno;
> }
> assert(mp_rep.nb_received == 1);
> @@ -292,7 +293,8 @@ mlx4_mp_req_verbs_cmd_fd(struct rte_eth_dev *dev)
> if (ret) {
> ERROR("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
>
@@ -255,6 +255,7 @@ mlx4_mp_req_mr_create(struct rte_eth_dev *dev, uintptr_t addr)
if (ret) {
ERROR("port %u request to primary process failed",
dev->data->port_id);
+ free(mp_rep.msgs);
return -rte_errno;
}
assert(mp_rep.nb_received == 1);
@@ -292,7 +293,8 @@ mlx4_mp_req_verbs_cmd_fd(struct rte_eth_dev *dev)
if (ret) {
ERROR("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];