[dpdk-dev] [PATCH 3/6] eal: Fix memory leaks and needless incrementation of pci uio implementation
Tetsuya Mukawa
mukawa at igel.co.jp
Fri Mar 20 02:53:36 CET 2015
On 2015/03/19 0:39, David Marchand wrote:
> On Tue, Mar 17, 2015 at 10:30 AM, Tetsuya Mukawa <mukawa at igel.co.jp
> <mailto:mukawa at igel.co.jp>> wrote:
>
> When pci_map_resource() is failed but path is allocated correctly,
> path won't be freed. Also, when open() is failed, uio_res won't be
> freed.
> This patch fixes these memory leaks.
> When pci_map_resource() is failed, mapaddr will be MAP_FAILED.
> In this case, pci_map_addr should not be incremented.
>
> Also, the patch fixes belows.
> - To shrink code, move close().
> - Remove fail variable.
>
> Signed-off-by: Tetsuya Mukawa <mukawa at igel.co.jp
> <mailto:mukawa at igel.co.jp>>
> ---
> lib/librte_eal/linuxapp/eal/eal_pci_uio.c | 28
> ++++++++++++++--------------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
> b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
> index b971ec9..5044884 100644
> --- a/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
> +++ b/lib/librte_eal/linuxapp/eal/eal_pci_uio.c
> @@ -333,7 +333,6 @@ pci_uio_map_resource(struct rte_pci_device *dev)
> maps = uio_res->maps;
> for (i = 0, map_idx = 0; i != PCI_MAX_RESOURCE; i++) {
> int fd;
> - int fail = 0;
>
> /* skip empty BAR */
> phaddr = dev->mem_resource[i].phys_addr;
> @@ -347,6 +346,11 @@ pci_uio_map_resource(struct rte_pci_device *dev)
> loc->domain, loc->bus, loc->devid,
> loc->function,
> i);
>
> + /* allocate memory to keep path */
> + maps[map_idx].path = rte_malloc(NULL,
> strlen(devname) + 1, 0);
> + if (maps[map_idx].path == NULL)
> + goto fail0;
> +
>
>
> [snip]
>
> Neither fail0 nor fail1 labels seem to free previous allocations.
> Did I miss something ?
Hi David,
Ah, you are right. I will free all 'maps[i].path' allocated in this
function.
Thanks,
Tetsuya
>
> [snip]
>
> +
> +fail1:
> + rte_free(maps[map_idx].path);
> +fail0:
> + rte_free(uio_res);
> + return -1;
> }
>
>
>
>
> --
> David Marchand
More information about the dev
mailing list